packaging/docker/{build,publish}.sh: Simplify scripts. Support only single ARCH (#8747)
* packaging/docker/{build,publish}.sh: Simplify scripts. Support only single ARCH * packaging/docker/build.sh: Remove eval
Konstantinos Natsakis committed
Apr 23, 2020 at 00:29 UTC
876e9e65297f995943991dda78004f6f006d2e86
3 files changed
+44
-41
.travis.yml
+8
-8
@@ -375,25 +375,25 @@ jobs:
375
<<: *RELEASE_TEMPLATE
376
env:
377
- ALLOW_SOFT_FAILURE_HERE=true
378
- - ARCHS=i386
378
+ - ARCH=i386
379
380
- name: Build & Publish docker image for amd64
381
<<: *RELEASE_TEMPLATE
382
env:
383
- ALLOW_SOFT_FAILURE_HERE=true
384
- - ARCHS=amd64
384
+ - ARCH=amd64
385
386
- name: Build & Publish docker image for armhf
387
<<: *RELEASE_TEMPLATE
388
env:
389
- ALLOW_SOFT_FAILURE_HERE=true
390
- - ARCHS=armhf
390
+ - ARCH=armhf
391
392
- name: Build & Publish docker image for aarch64
393
<<: *RELEASE_TEMPLATE
394
env:
395
- ALLOW_SOFT_FAILURE_HERE=true
396
- - ARCHS=aarch64
396
+ - ARCH=aarch64
397
398
- name: Create release draft
399
git:
@@ -456,25 +456,25 @@ jobs:
456
<<: *NIGHTLY_TEMPLATE
457
env:
458
- ALLOW_SOFT_FAILURE_HERE=true
459
- - ARCHS=i386
459
+ - ARCH=i386
460
461
- name: Build & Publish docker image for amd64
462
<<: *NIGHTLY_TEMPLATE
463
env:
464
- ALLOW_SOFT_FAILURE_HERE=true
465
- - ARCHS=amd64
465
+ - ARCH=amd64
466
467
- name: Build & Publish docker image for armhf
468
<<: *NIGHTLY_TEMPLATE
469
env:
470
- ALLOW_SOFT_FAILURE_HERE=true
471
- - ARCHS=armhf
471
+ - ARCH=armhf
472
473
- name: Build & Publish docker image for aarch64
474
<<: *NIGHTLY_TEMPLATE
475
env:
476
- ALLOW_SOFT_FAILURE_HERE=true
477
- - ARCHS=aarch64
477
+ - ARCH=aarch64
478
479
- name: Create nightly release artifacts, publish to GCS
480
script:
packaging/docker/build.sh
+16
-16
@@ -14,9 +14,11 @@ if [ "${BASH_VERSINFO[0]}" -lt "4" ]; then
14
fi
15
16
VERSION="$1"
17
-declare -A ARCH_MAP
18
-ARCH_MAP=(["i386"]="386" ["amd64"]="amd64" ["armhf"]="arm" ["aarch64"]="arm64")
19
-[ "${ARCHS}" ] || ARCHS="${!ARCH_MAP[@]}" # Use default ARCHS unless ARCHS are externally provided
17
+
18
+if [ -z "${ARCH}" ]; then
19
+ echo "ARCH not set, build cannot proceed"
20
+ exit 1
21
+fi
22
23
if [ "${RELEASE_CHANNEL}" != "nightly" ] && [ "${RELEASE_CHANNEL}" != "stable" ]; then
24
echo "RELEASE_CHANNEL must be set to either 'nightly' or 'stable' - build cannot proceed"
@@ -51,22 +53,20 @@ if [ ! -z $CWD ] || [ ! "${TOP_LEVEL}" == "netdata" ]; then
53
fi
54
55
echo "Docker image build in progress.."
54
-echo "Version : ${VERSION}"
55
-echo "Repository : ${REPOSITORY}"
56
-echo "Architectures : ${ARCHS[*]}"
56
+echo "Version : ${VERSION}"
57
+echo "Repository : ${REPOSITORY}"
58
+echo "Architecture: ${ARCH}"
59
60
docker run --rm --privileged multiarch/qemu-user-static:register --reset
61
62
# Build images using multi-arch Dockerfile.
61
-for ARCH in ${ARCHS[@]}; do
62
- TAG="${REPOSITORY,,}:${VERSION}-${ARCH}"
63
- echo "Building tag ${TAG}.."
64
- eval docker build --no-cache \
65
- --build-arg ARCH="${ARCH}" \
66
- --build-arg RELEASE_CHANNEL="${RELEASE_CHANNEL}" \
67
- --tag "${TAG}" \
68
- --file packaging/docker/Dockerfile ./
69
- echo "..Done!"
70
-done
63
+TAG="${REPOSITORY,,}:${VERSION}-${ARCH}"
64
+echo "Building tag ${TAG}.."
65
+docker build --no-cache \
66
+ --build-arg ARCH="${ARCH}" \
67
+ --build-arg RELEASE_CHANNEL="${RELEASE_CHANNEL}" \
68
+ --tag "${TAG}" \
69
+ --file packaging/docker/Dockerfile .
70
+echo "..Done!"
71
72
echo "Docker build process completed!"
packaging/docker/publish.sh
+20
-17
@@ -16,9 +16,12 @@ fi
16
17
WORKDIR="$(mktemp -d)" # Temporary folder, removed after script is done
18
VERSION="$1"
19
-declare -A ARCH_MAP
20
-ARCH_MAP=(["i386"]="386" ["amd64"]="amd64" ["armhf"]="arm" ["aarch64"]="arm64")
21
-[ "${ARCHS}" ] || ARCHS="${!ARCH_MAP[@]}" # Use default ARCHS unless ARCHS are externally provided
19
+
20
+if [ -z "${ARCH}" ]; then
21
+ echo "ARCH not set, build cannot proceed"
22
+ exit 1
23
+fi
24
+
25
DOCKER_CMD="docker --config ${WORKDIR}"
26
GIT_MAIL=${GIT_MAIL:-"bot@netdata.cloud"}
27
GIT_USER=${GIT_USER:-"netdatabot"}
@@ -58,10 +61,10 @@ if [ ! -z $CWD ] || [ ! "${TOP_LEVEL}" == "netdata" ]; then
61
fi
62
63
echo "Docker image publishing in progress.."
61
-echo "Version : ${VERSION}"
62
-echo "Repository : ${REPOSITORY}"
63
-echo "Architectures : ${ARCHS[*]}"
64
-echo "Manifest list : ${MANIFEST_LIST}"
64
+echo "Version : ${VERSION}"
65
+echo "Repository : ${REPOSITORY}"
66
+echo "Architecture : ${ARCH}"
67
+echo "Manifest list: ${MANIFEST_LIST}"
68
69
# Create temporary docker CLI config with experimental features enabled (manifests v2 need it)
70
echo '{"experimental":"enabled"}' > "${WORKDIR}"/config.json
@@ -70,18 +73,16 @@ echo '{"experimental":"enabled"}' > "${WORKDIR}"/config.json
73
echo "$DOCKER_PWD" | $DOCKER_CMD login -u "$DOCKER_USERNAME" --password-stdin
74
75
# Push images to registry
73
-for ARCH in ${ARCHS[@]}; do
74
- TAG="${MANIFEST_LIST}-${ARCH}"
75
- echo "Publishing image ${TAG}.."
76
- $DOCKER_CMD push "${TAG}"
76
+TAG="${MANIFEST_LIST}-${ARCH}"
77
+echo "Publishing image ${TAG}.."
78
+$DOCKER_CMD push "${TAG}"
79
78
- published() {
79
- curl -s "https://registry.hub.docker.com/v2/repositories/${REPOSITORY}/tags" | jq -e -r '.results[] | select(.name == "'"${VERSION}-${ARCH}"'")' > /dev/null
80
- }
81
- retry 5 published
80
+published() {
81
+ curl -s "https://registry.hub.docker.com/v2/repositories/${REPOSITORY}/tags" | jq -e -r '.results[] | select(.name == "'"${VERSION}-${ARCH}"'")' > /dev/null
82
+}
83
+retry 5 published
84
83
- echo "Image ${TAG} published succesfully!"
84
-done
85
+echo "Image ${TAG} published succesfully!"
86
87
# Recreate docker manifest list
88
echo "Getting tag list for version '${VERSION}'.."
@@ -91,6 +92,8 @@ echo "Creating manifest list.."
92
$DOCKER_CMD manifest create --amend "${MANIFEST_LIST}" "${TAGS[@]/#/${REPOSITORY}:}"
93
94
# Annotate manifest with CPU architecture information
95
+declare -A ARCH_MAP
96
+ARCH_MAP=(["i386"]="386" ["amd64"]="amd64" ["armhf"]="arm" ["aarch64"]="arm64")
97
98
echo "Executing manifest annotate.."
99
for TAG in "${TAGS[@]}"; do