From 413ae4bb8aa2d863646d81ee7e085853e5ff7b20 Mon Sep 17 00:00:00 2001 From: Renuka Manavalan Date: Mon, 30 Mar 2020 01:09:34 +0000 Subject: [PATCH 1/5] Include platform info in name. Get SONiC Version as parameter and use Make additional tag as optional. Avoid repetitions by using function. --- push_docker.sh | 62 +++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/push_docker.sh b/push_docker.sh index 3ba9abfae5b..2aa6d827c28 100755 --- a/push_docker.sh +++ b/push_docker.sh @@ -1,42 +1,42 @@ +#! /bin/bash + DOCKER_IMAGE_FILE=$1 REGISTRY_SERVER=$2 -REGISTRY_PORT=$3 -REGISTRY_USERNAME=$4 -REGISTRY_PASSWD=$5 -DOCKER_IMAGE_TAG=$6 +REGISTRY_USERNAME=$3 +REGISTRY_PASSWD=$4 +PLATFORM=$5 +SONIC_VERSION=$6 +DOCKER_IMAGE_TAG=$7 + +push_it() { + docker tag $1 $2 + echo "Pushing $2" + image_sha=$(docker push $2 | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p") + echo "Remove $2" + docker rmi $2 || true + echo "Image sha256: $image_sha" +} set -e +echo "Docker load $DOCKER_IMAGE_FILE" docker load < $DOCKER_IMAGE_FILE -## Fetch the Jenkins build number if inside it -[ ${BUILD_NUMBER} ] || { - echo "No BUILD_NUMBER found, setting to 0." - BUILD_NUMBER="0" -} +## Login the docker image registry server +## Note: user name and password are passed from command line +echo "Docker login $REGISTRY_USERNAME@$REGISTRY_SERVER" +docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER -## Prepare tag +## Get image name docker_image_name=$(basename $DOCKER_IMAGE_FILE | cut -d. -f1) -remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$DOCKER_IMAGE_TAG -timestamp="$(date -u +%Y%m%d)" -build_version="${timestamp}.bld-${BUILD_NUMBER}" -build_remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$build_version -## Add registry information as tag, so will push as latest -## Add additional tag with build information -docker tag $docker_image_name $remote_image_name -docker tag $docker_image_name $build_remote_image_name +remote_image_name=$REGISTRY_SERVER/sonic-dockers/$PLATFORM/$docker_image_name +push_it $docker_image_name $remote_image_name:$SONIC_VERSION -## Login the docker image registry server -## Note: user name and password are passed from command line -docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER:$REGISTRY_PORT - -## Push image to registry server -## And get the image digest SHA256 -echo "Pushing $remote_image_name" -image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p") -docker rmi $remote_image_name || true -echo "Image sha256: $image_sha" -echo "Pushing $build_remote_image_name" -docker push $build_remote_image_name -docker rmi $build_remote_image_name || true +if [ ! -z $DOCKER_IMAGE_TAG ] +then + push_it $docker_image_name $remote_image_name:$DOCKER_IMAGE_TAG +fi + +echo "Remove $docker_image_name" docker rmi $docker_image_name || true +echo "Job completed" From 4f4567749afdab56cd9a7401fd36a94f83e11d0f Mon Sep 17 00:00:00 2001 From: Renuka Manavalan Date: Thu, 2 Apr 2020 19:47:25 +0000 Subject: [PATCH 2/5] Per review comments, make SONIC_VERSION optional and added some comments. --- push_docker.sh | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/push_docker.sh b/push_docker.sh index 2aa6d827c28..defdf72ec8f 100755 --- a/push_docker.sh +++ b/push_docker.sh @@ -5,10 +5,25 @@ REGISTRY_SERVER=$2 REGISTRY_USERNAME=$3 REGISTRY_PASSWD=$4 PLATFORM=$5 -SONIC_VERSION=$6 -DOCKER_IMAGE_TAG=$7 +SONIC_VERSION="" +DOCKER_IMAGE_TAG="" + +shift 5 + +if [ "$#" != "0" ] +then + SONIC_VERSION=$1 + shift +fi + +if [ "$#" != "0" ] + DOCKER_IMAGE_TAG=$1 +fi push_it() { + # $1 - Given image name + # $2 - Remote image name + docker tag $1 $2 echo "Pushing $2" image_sha=$(docker push $2 | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p") @@ -30,7 +45,8 @@ docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER docker_image_name=$(basename $DOCKER_IMAGE_FILE | cut -d. -f1) remote_image_name=$REGISTRY_SERVER/sonic-dockers/$PLATFORM/$docker_image_name -push_it $docker_image_name $remote_image_name:$SONIC_VERSION + +push_it $docker_image_name ${remote_image_name}${SONIC_VERSION:+:$SONIC_VERSION} if [ ! -z $DOCKER_IMAGE_TAG ] then From 11adb1b797fb048ad9ffc0378e7f532f5e2f121d Mon Sep 17 00:00:00 2001 From: Renuka Manavalan Date: Mon, 6 Apr 2020 22:58:34 +0000 Subject: [PATCH 3/5] 1) Added additional params are optional 2) Handle DOCKER_IMAGE_TAG only if given 3) Use BUILD_NUMBER only if SONIC_VERSION not given 4) Tag with SONIC_VERSION if given. Current behavior is not changed, unless SONIC_VERSION is given. --- push_docker.sh | 62 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/push_docker.sh b/push_docker.sh index defdf72ec8f..5b44efc3bb9 100755 --- a/push_docker.sh +++ b/push_docker.sh @@ -1,23 +1,29 @@ -#! /bin/bash - DOCKER_IMAGE_FILE=$1 REGISTRY_SERVER=$2 -REGISTRY_USERNAME=$3 -REGISTRY_PASSWD=$4 -PLATFORM=$5 -SONIC_VERSION="" +REGISTRY_PORT=$3 +REGISTRY_USERNAME=$4 +REGISTRY_PASSWD=$5 DOCKER_IMAGE_TAG="" +PLATFORM="" +SONIC_VERSION="" shift 5 if [ "$#" != "0" ] then - SONIC_VERSION=$1 + DOCKER_IMAGE_TAG=$1 shift fi if [ "$#" != "0" ] - DOCKER_IMAGE_TAG=$1 +then + PLATFORM=$1 + shift +fi + +if [ "$#" != "0" ] +then + SONIC_VERSION=$1 fi push_it() { @@ -33,26 +39,40 @@ push_it() { } set -e -echo "Docker load $DOCKER_IMAGE_FILE" -docker load < $DOCKER_IMAGE_FILE + +echo "Loading image ${DOCKER_IMAGE_FILE}" +docker load < ${DOCKER_IMAGE_FILE} + +## Fetch the Jenkins build number if inside it +[ ${BUILD_NUMBER} ] || { + echo "No BUILD_NUMBER found, setting to 0." + BUILD_NUMBER="0" +} ## Login the docker image registry server ## Note: user name and password are passed from command line -echo "Docker login $REGISTRY_USERNAME@$REGISTRY_SERVER" -docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER +docker login -u ${REGISTRY_USERNAME} -p "${REGISTRY_PASSWD}" ${REGISTRY_SERVER}:${REGISTRY_PORT} -## Get image name -docker_image_name=$(basename $DOCKER_IMAGE_FILE | cut -d. -f1) +## Get Docker image name +docker_image_name=$(basename ${DOCKER_IMAGE_FILE} | cut -d. -f1) +remote_image_name=${REGISTRY_SERVER}:${REGISTRY_PORT}/${docker_image_name} -remote_image_name=$REGISTRY_SERVER/sonic-dockers/$PLATFORM/$docker_image_name +[ -z "${DOCKER_IMAGE_TAG}" ] || { + push_it ${docker_image_name} ${remote_image_name}:${DOCKER_IMAGE_TAG} +} -push_it $docker_image_name ${remote_image_name}${SONIC_VERSION:+:$SONIC_VERSION} +[ -n "${SONIC_VERSION}" ] || { + # If SONIC_VERSION is not given, tag it with build number. + timestamp="$(date -u +%Y%m%d)" + build_version="${timestamp}.bld-${BUILD_NUMBER}" + push_it ${docker_image_name} ${remote_image_name}:${build_version} +} -if [ ! -z $DOCKER_IMAGE_TAG ] -then - push_it $docker_image_name $remote_image_name:$DOCKER_IMAGE_TAG -fi +[ -z "${SONIC_VERSION}" ] || { + remote_image_name=${REGISTRY_SERVER}/sonic-dockers/${PLATFORM}/${docker_image_name}:${SONIC_VERSION} + push_it ${docker_image_name} ${remote_image_name} +} -echo "Remove $docker_image_name" docker rmi $docker_image_name || true echo "Job completed" + From 9d4d57a0bb4bed752179a189bdab3baff2cf728a Mon Sep 17 00:00:00 2001 From: Renuka Manavalan Date: Fri, 10 Apr 2020 00:06:34 +0000 Subject: [PATCH 4/5] Update per review comments 1) Added new args with options 2) Handle PORT possible being empty 3) Exhibit new behavior only if both version & platform are given. --- push_docker.sh | 77 +++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/push_docker.sh b/push_docker.sh index 5b44efc3bb9..bde52dd560a 100755 --- a/push_docker.sh +++ b/push_docker.sh @@ -1,30 +1,33 @@ +#! /bin/bash + +sonic_version="" +sonic_platform="" + +while getopts ":v:p:" opt +do + case ${opt} in + v ) # SONiC image version + sonic_version=${OPTARG} + ;; + p ) # Platform info + sonic_platform=${OPTARG} + ;; + \? ) echo "\ +Usage: [-v ] [ -p ] \ + []" + ;; + esac +done + +shift $((OPTIND -1)) + DOCKER_IMAGE_FILE=$1 REGISTRY_SERVER=$2 REGISTRY_PORT=$3 REGISTRY_USERNAME=$4 REGISTRY_PASSWD=$5 -DOCKER_IMAGE_TAG="" -PLATFORM="" -SONIC_VERSION="" - -shift 5 - -if [ "$#" != "0" ] -then - DOCKER_IMAGE_TAG=$1 - shift -fi - -if [ "$#" != "0" ] -then - PLATFORM=$1 - shift -fi - -if [ "$#" != "0" ] -then - SONIC_VERSION=$1 -fi +DOCKER_IMAGE_TAG="$6" +REGISTRY_SERVER_WITH_PORT=${REGISTRY_SERVER}${REGISTRY_PORT:+:$REGISTRY_PORT} push_it() { # $1 - Given image name @@ -43,35 +46,33 @@ set -e echo "Loading image ${DOCKER_IMAGE_FILE}" docker load < ${DOCKER_IMAGE_FILE} -## Fetch the Jenkins build number if inside it -[ ${BUILD_NUMBER} ] || { - echo "No BUILD_NUMBER found, setting to 0." - BUILD_NUMBER="0" -} - ## Login the docker image registry server ## Note: user name and password are passed from command line -docker login -u ${REGISTRY_USERNAME} -p "${REGISTRY_PASSWD}" ${REGISTRY_SERVER}:${REGISTRY_PORT} +docker login -u ${REGISTRY_USERNAME} -p "${REGISTRY_PASSWD}" ${REGISTRY_SERVER_WITH_PORT} ## Get Docker image name docker_image_name=$(basename ${DOCKER_IMAGE_FILE} | cut -d. -f1) -remote_image_name=${REGISTRY_SERVER}:${REGISTRY_PORT}/${docker_image_name} +remote_image_name=${REGISTRY_SERVER_WITH_PORT}/${docker_image_name} [ -z "${DOCKER_IMAGE_TAG}" ] || { push_it ${docker_image_name} ${remote_image_name}:${DOCKER_IMAGE_TAG} } -[ -n "${SONIC_VERSION}" ] || { - # If SONIC_VERSION is not given, tag it with build number. +if [ -n "${sonic_version}" ] && [ -n "${sonic_platform}" ] +then + remote_image_name=${REGISTRY_SERVER_WITH_PORT}/sonic-dockers/${sonic_platform}/${docker_image_name}:${sonic_version} + push_it ${docker_image_name} ${remote_image_name} +else + ## Fetch the Jenkins build number if inside it + [ ${BUILD_NUMBER} ] || { + echo "No BUILD_NUMBER found, setting to 0." + BUILD_NUMBER="0" + } + timestamp="$(date -u +%Y%m%d)" build_version="${timestamp}.bld-${BUILD_NUMBER}" push_it ${docker_image_name} ${remote_image_name}:${build_version} -} - -[ -z "${SONIC_VERSION}" ] || { - remote_image_name=${REGISTRY_SERVER}/sonic-dockers/${PLATFORM}/${docker_image_name}:${SONIC_VERSION} - push_it ${docker_image_name} ${remote_image_name} -} +fi docker rmi $docker_image_name || true echo "Job completed" From 3c6eace1f9d1b9b988bb8f89ff90161a34a8e52a Mon Sep 17 00:00:00 2001 From: Renuka Manavalan Date: Fri, 10 Apr 2020 00:11:04 +0000 Subject: [PATCH 5/5] Drop redundant quotes --- push_docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/push_docker.sh b/push_docker.sh index bde52dd560a..3e2da08d0b8 100755 --- a/push_docker.sh +++ b/push_docker.sh @@ -26,7 +26,7 @@ REGISTRY_SERVER=$2 REGISTRY_PORT=$3 REGISTRY_USERNAME=$4 REGISTRY_PASSWD=$5 -DOCKER_IMAGE_TAG="$6" +DOCKER_IMAGE_TAG=$6 REGISTRY_SERVER_WITH_PORT=${REGISTRY_SERVER}${REGISTRY_PORT:+:$REGISTRY_PORT} push_it() {