Split script: push_docker.sh (#89)

This commit is contained in:
Qi Luo 2016-12-01 02:18:59 -08:00 committed by Shuotian Cheng
parent 923b13afb4
commit b68ec0eee8
2 changed files with 49 additions and 37 deletions

View File

@ -52,10 +52,7 @@ shift "$((OPTIND - 1))"
## Dockerfile directory ## Dockerfile directory
DOCKER_BUILD_DIR=dockers/$1 DOCKER_BUILD_DIR=dockers/$1
REGISTRY_SERVER=$2 shift 1
REGISTRY_PORT=$3
REGISTRY_USERNAME=$4
REGISTRY_PASSWD=$5
[ -f "$DOCKER_BUILD_DIR"/Dockerfile ] || { [ -f "$DOCKER_BUILD_DIR"/Dockerfile ] || {
echo "Invalid DOCKER_BUILD_DIR directory" >&2 echo "Invalid DOCKER_BUILD_DIR directory" >&2
@ -66,16 +63,6 @@ REGISTRY_PASSWD=$5
docker_image_name=$(basename $DOCKER_BUILD_DIR) docker_image_name=$(basename $DOCKER_BUILD_DIR)
} }
[ ${BUILD_NUMBER} ] || {
echo "No BUILD_NUMBER found, setting to 0."
BUILD_NUMBER="0"
}
remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$docker_image_tag
timestamp="$(date -u +%Y%m%d)"
build_version="${timestamp}.${BUILD_NUMBER}"
build_remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$build_version
## Copy dependencies ## Copy dependencies
## Note: Dockerfile ADD doesn't support reference files outside the folder, so copy it locally ## Note: Dockerfile ADD doesn't support reference files outside the folder, so copy it locally
if ls deps/* 1>/dev/null 2>&1; then if ls deps/* 1>/dev/null 2>&1; then
@ -112,27 +99,10 @@ if [ "$docker_image_name" = "docker-base" ]; then
docker rmi -f $image_id || true docker rmi -f $image_id || true
fi fi
image_sha='' ## Save the docker image in a gz file
if [ -n "$REGISTRY_SERVER" ] && [ -n "$REGISTRY_PORT" ]; then
## Add registry information as tag, so will push as latest
## Add additional tag with build information
## Temporarily add -f option to prevent error message of Docker engine version < 1.10.0
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
trap_push "docker rmi $remote_image_name || true"
trap_push "docker rmi $build_remote_image_name || true"
image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p")
docker push $build_remote_image_name
fi
mkdir -p target mkdir -p target
rm -f target/$docker_image_name.*.gz docker save $docker_image_name | gzip -c > target/$docker_image_name.gz
docker save $docker_image_name | gzip -c > target/$docker_image_name.$build_version.gz
echo "Image sha256: $image_sha" if [ -n "$1" ]; then
./push_docker.sh target/$docker_image_name.gz $@ $docker_image_tag
fi

42
push_docker.sh Executable file
View File

@ -0,0 +1,42 @@
DOCKER_IMAGE_FILE=$1
REGISTRY_SERVER=$2
REGISTRY_PORT=$3
REGISTRY_USERNAME=$4
REGISTRY_PASSWD=$5
DOCKER_IMAGE_TAG=$6
set -e
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"
}
## 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}.${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
## Temporarily add -f option to prevent error message of Docker engine version < 1.10.0
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