Skip to content

Commit

Permalink
Update dockers with platform & SONiC version as part of name/tag. (#4337
Browse files Browse the repository at this point in the history
)

* Include platform info in name.
Get SONiC Version as parameter and use
Make additional tag as optional.
Avoid repetitions by using function.

* Per review comments, make SONIC_VERSION optional and added some comments.

* 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.

* 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.

* Drop redundant quotes
  • Loading branch information
renukamanavalan authored Apr 10, 2020
1 parent 7405f8c commit a2cc6b6
Showing 1 changed file with 64 additions and 27 deletions.
91 changes: 64 additions & 27 deletions push_docker.sh
Original file line number Diff line number Diff line change
@@ -1,42 +1,79 @@
#! /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 <version> ] [ -p <platform> ] <DOCKER_IMAGE_FILE> <REGISTRY_SERVER> <REGISTRY_PORT> \
<REGISTRY_USERNAME> <REGISTRY_PASSWD> [<DOCKER_IMAGE_TAG>]"
;;
esac
done

shift $((OPTIND -1))

DOCKER_IMAGE_FILE=$1
REGISTRY_SERVER=$2
REGISTRY_PORT=$3
REGISTRY_USERNAME=$4
REGISTRY_PASSWD=$5
DOCKER_IMAGE_TAG=$6
REGISTRY_SERVER_WITH_PORT=${REGISTRY_SERVER}${REGISTRY_PORT:+:$REGISTRY_PORT}

set -e
docker load < $DOCKER_IMAGE_FILE
push_it() {
# $1 - Given image name
# $2 - Remote image name

## Fetch the Jenkins build number if inside it
[ ${BUILD_NUMBER} ] || {
echo "No BUILD_NUMBER found, setting to 0."
BUILD_NUMBER="0"
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"
}

## Prepare tag
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
set -e

## 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
echo "Loading image ${DOCKER_IMAGE_FILE}"
docker load < ${DOCKER_IMAGE_FILE}

## 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
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_WITH_PORT}/${docker_image_name}

[ -z "${DOCKER_IMAGE_TAG}" ] || {
push_it ${docker_image_name} ${remote_image_name}:${DOCKER_IMAGE_TAG}
}

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}
fi

docker rmi $docker_image_name || true
echo "Job completed"

0 comments on commit a2cc6b6

Please sign in to comment.