mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-11-03 19:47:56 +00:00 
			
		
		
		
	Update dockers with platform & SONiC version as part of name/tag. (#4337)
* 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
This commit is contained in:
		@@ -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}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
docker load < $DOCKER_IMAGE_FILE
 | 
			
		||||
 | 
			
		||||
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}
 | 
			
		||||
 | 
			
		||||
[ -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"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
    push_it ${docker_image_name} ${remote_image_name}:${build_version}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 | 
			
		||||
## 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 rmi $docker_image_name || true
 | 
			
		||||
echo "Job completed"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user