Skip to content

Commit b68ec0e

Browse files
qiluo-msftShuotian Cheng
authored and
Shuotian Cheng
committed
Split script: push_docker.sh (#89)
1 parent 923b13a commit b68ec0e

File tree

2 files changed

+48
-36
lines changed

2 files changed

+48
-36
lines changed

build_docker.sh

+6-36
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,7 @@ shift "$((OPTIND - 1))"
5252

5353
## Dockerfile directory
5454
DOCKER_BUILD_DIR=dockers/$1
55-
REGISTRY_SERVER=$2
56-
REGISTRY_PORT=$3
57-
REGISTRY_USERNAME=$4
58-
REGISTRY_PASSWD=$5
55+
shift 1
5956

6057
[ -f "$DOCKER_BUILD_DIR"/Dockerfile ] || {
6158
echo "Invalid DOCKER_BUILD_DIR directory" >&2
@@ -66,16 +63,6 @@ REGISTRY_PASSWD=$5
6663
docker_image_name=$(basename $DOCKER_BUILD_DIR)
6764
}
6865

69-
[ ${BUILD_NUMBER} ] || {
70-
echo "No BUILD_NUMBER found, setting to 0."
71-
BUILD_NUMBER="0"
72-
}
73-
74-
remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$docker_image_tag
75-
timestamp="$(date -u +%Y%m%d)"
76-
build_version="${timestamp}.${BUILD_NUMBER}"
77-
build_remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$build_version
78-
7966
## Copy dependencies
8067
## Note: Dockerfile ADD doesn't support reference files outside the folder, so copy it locally
8168
if ls deps/* 1>/dev/null 2>&1; then
@@ -112,27 +99,10 @@ if [ "$docker_image_name" = "docker-base" ]; then
11299
docker rmi -f $image_id || true
113100
fi
114101

115-
image_sha=''
116-
if [ -n "$REGISTRY_SERVER" ] && [ -n "$REGISTRY_PORT" ]; then
117-
## Add registry information as tag, so will push as latest
118-
## Add additional tag with build information
119-
## Temporarily add -f option to prevent error message of Docker engine version < 1.10.0
120-
docker tag $docker_image_name $remote_image_name
121-
docker tag $docker_image_name $build_remote_image_name
102+
## Save the docker image in a gz file
103+
mkdir -p target
104+
docker save $docker_image_name | gzip -c > target/$docker_image_name.gz
122105

123-
## Login the docker image registry server
124-
## Note: user name and password are passed from command line
125-
docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER:$REGISTRY_PORT
126-
127-
## Push image to registry server
128-
## And get the image digest SHA256
129-
trap_push "docker rmi $remote_image_name || true"
130-
trap_push "docker rmi $build_remote_image_name || true"
131-
image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p")
132-
docker push $build_remote_image_name
106+
if [ -n "$1" ]; then
107+
./push_docker.sh target/$docker_image_name.gz $@ $docker_image_tag
133108
fi
134-
135-
mkdir -p target
136-
rm -f target/$docker_image_name.*.gz
137-
docker save $docker_image_name | gzip -c > target/$docker_image_name.$build_version.gz
138-
echo "Image sha256: $image_sha"

push_docker.sh

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
DOCKER_IMAGE_FILE=$1
2+
REGISTRY_SERVER=$2
3+
REGISTRY_PORT=$3
4+
REGISTRY_USERNAME=$4
5+
REGISTRY_PASSWD=$5
6+
DOCKER_IMAGE_TAG=$6
7+
8+
set -e
9+
docker load < $DOCKER_IMAGE_FILE
10+
11+
## Fetch the Jenkins build number if inside it
12+
[ ${BUILD_NUMBER} ] || {
13+
echo "No BUILD_NUMBER found, setting to 0."
14+
BUILD_NUMBER="0"
15+
}
16+
17+
## Prepare tag
18+
docker_image_name=$(basename $DOCKER_IMAGE_FILE | cut -d. -f1)
19+
remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$DOCKER_IMAGE_TAG
20+
timestamp="$(date -u +%Y%m%d)"
21+
build_version="${timestamp}.${BUILD_NUMBER}"
22+
build_remote_image_name=$REGISTRY_SERVER:$REGISTRY_PORT/$docker_image_name:$build_version
23+
24+
## Add registry information as tag, so will push as latest
25+
## Add additional tag with build information
26+
## Temporarily add -f option to prevent error message of Docker engine version < 1.10.0
27+
docker tag $docker_image_name $remote_image_name
28+
docker tag $docker_image_name $build_remote_image_name
29+
30+
## Login the docker image registry server
31+
## Note: user name and password are passed from command line
32+
docker login -u $REGISTRY_USERNAME -p "$REGISTRY_PASSWD" $REGISTRY_SERVER:$REGISTRY_PORT
33+
34+
## Push image to registry server
35+
## And get the image digest SHA256
36+
echo "Pushing $remote_image_name"
37+
image_sha=$(docker push $remote_image_name | sed -n "s/.*: digest: sha256:\([0-9a-f]*\).*/\\1/p")
38+
docker rmi $remote_image_name || true
39+
echo "Image sha256: $image_sha"
40+
echo "Pushing $build_remote_image_name"
41+
docker push $build_remote_image_name
42+
docker rmi $build_remote_image_name || true

0 commit comments

Comments
 (0)