#! /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=$6 REGISTRY_SERVER_WITH_PORT=${REGISTRY_SERVER}${REGISTRY_PORT:+:$REGISTRY_PORT} 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") echo "Remove $2" docker rmi $2 || true echo "Image sha256: $image_sha" } set -e 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_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} for tag in ${DOCKER_IMAGE_TAG} do push_it ${docker_image_name} ${remote_image_name}:$tag done 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"