mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-01-01 19:46:44 +00:00
9540ed415b
We've been using tar directly on the base image folder, and this makes the file ordering unpredictable between filesystems, so we use find and sort so that the files are always tarred in the same order, producing the same hash in different filesystems. We also now set the mtime to the specific Unix timestamp 0, to avoid differences due to timezones. Also remove the dest folder before calculating the hash. Change-Type: patch Signed-off-by: Pablo Carranza Velez <pablo@resin.io>
58 lines
3.1 KiB
Bash
Executable File
58 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Jenkins build steps
|
|
export ESCAPED_BRANCH_NAME=$(echo $sourceBranch | sed 's/[^a-z0-9A-Z_.-]/-/g')
|
|
git submodule update --init --recursive
|
|
git clean -fxd base-image
|
|
git submodule foreach --recursive git clean -fxd
|
|
BASE_IMAGE_VERSION=$(find base-image -print0 | LC_ALL=C sort -z | tar --null -cf - --no-recursion --mtime=@0 --owner=root --group=root --numeric-owner -T - | md5sum | awk -F " " '{print $1}')
|
|
export BASE_IMAGE_REPO=resin/$ARCH-supervisor-base
|
|
export BASE_IMAGE_TAG=resin/$ARCH-supervisor-base:$BASE_IMAGE_VERSION
|
|
|
|
# Try to pull the base image according to the contents of the base-image folder, otherwise build it
|
|
docker pull $BASE_IMAGE_TAG || (cd base-image && bash -ex automation/jenkins-build.sh)
|
|
|
|
# Try pulling the old build first for caching purposes.
|
|
docker pull resin/${ARCH}-supervisor:${ESCAPED_BRANCH_NAME} || docker pull resin/${ARCH}-supervisor:master || true
|
|
# Also pull the intermediate images, if possible, to improve caching
|
|
NODE_SUPERVISOR_REPO=registry.resinstaging.io/resin/node-supervisor-${ARCH}
|
|
GO_SUPERVISOR_REPO=registry.resinstaging.io/resin/go-supervisor-${ARCH}
|
|
docker pull ${NODE_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} || docker pull ${NODE_SUPERVISOR_REPO}:master || true
|
|
docker pull ${GO_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} || docker pull ${GO_SUPERVISOR_REPO}:master || true
|
|
|
|
# Test the gosuper
|
|
make SUPERVISOR_VERSION=${ESCAPED_BRANCH_NAME} JOB_NAME=${JOB_NAME} test-gosuper
|
|
|
|
MAKE_ARGS="ARCH=${ARCH} \
|
|
ESCAPED_BASE_IMAGE_TAG=$(echo $BASE_IMAGE_TAG | sed -e 's/\//\\\//g; s/\./\\\./g') \
|
|
PUBNUB_SUBSCRIBE_KEY=${PUBNUB_SUBSCRIBE_KEY} \
|
|
PUBNUB_PUBLISH_KEY=${PUBNUB_PUBLISH_KEY} \
|
|
MIXPANEL_TOKEN=${MIXPANEL_TOKEN} \
|
|
SUPERVISOR_VERSION=${ESCAPED_BRANCH_NAME}"
|
|
|
|
make ${MAKE_ARGS} \
|
|
DEPLOY_REGISTRY= \
|
|
deploy
|
|
|
|
# Try to push the intermediate images to improve caching in future builds
|
|
docker tag resin/node-supervisor-${ARCH}:${ESCAPED_BRANCH_NAME} ${NODE_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} \
|
|
|| docker tag -f resin/node-supervisor-${ARCH}:${ESCAPED_BRANCH_NAME} ${NODE_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} \
|
|
|| true
|
|
docker tag -f resin/go-supervisor-${ARCH}:${ESCAPED_BRANCH_NAME} ${GO_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} \
|
|
|| docker tag -f resin/go-supervisor-${ARCH}:${ESCAPED_BRANCH_NAME} ${GO_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} \
|
|
|| true
|
|
docker push ${NODE_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} || true
|
|
docker push ${GO_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME} || true
|
|
|
|
make ${MAKE_ARGS} \
|
|
DEPLOY_REGISTRY=registry.resinstaging.io/ \
|
|
deploy
|
|
|
|
# Cleanup removing by Id to actually remove the images rather than untagging them
|
|
docker rmi -f $(docker inspect -f "{{.Id}}" registry.resinstaging.io/resin/${ARCH}-supervisor:${ESCAPED_BRANCH_NAME}) || true
|
|
docker rmi -f $(docker inspect -f "{{.Id}}" resin/${ARCH}-supervisor:${ESCAPED_BRANCH_NAME}) || true
|
|
docker rmi -f $(docker inspect -f "{{.Id}}" ${NODE_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME}) || true
|
|
docker rmi -f $(docker inspect -f "{{.Id}}" ${GO_SUPERVISOR_REPO}:${ESCAPED_BRANCH_NAME}) || true
|
|
docker rmi -f $(docker inspect -f "{{.Id}}" ${BASE_IMAGE_TAG}) || true
|