run_sdk_container: Fall back to tar ball download for SDK image

The nightly SDK image is not pushed to a registry but has to be
downloaded from the build server as tar ball.
Fall back to the tar ball import for a better user experience.
To reuse the ci logic it had to support the "docker" env variable.
The use of the pigz container is not always needed if the user has
pigz available.
This commit is contained in:
Kai Lueke 2022-03-16 15:09:01 +01:00
parent 08b620b5de
commit c149d24ced
3 changed files with 16 additions and 9 deletions

View File

@ -17,8 +17,10 @@ CONTAINER_REGISTRY="ghcr.io/flatcar-linux"
GC_BUCKET="flatcar-linux" GC_BUCKET="flatcar-linux"
# No PIGZ on Flatcar if ! command -v pigz > /dev/null; then
PIGZ="docker run --rm -i ghcr.io/flatcar-linux/pigz --fast" # No PIGZ on Flatcar
PIGZ="docker run --rm -i ghcr.io/flatcar-linux/pigz --fast"
fi
CI_GIT_AUTHOR="flatcar-ci" CI_GIT_AUTHOR="flatcar-ci"
CI_GIT_EMAIL="infra+ci@flatcar-linux.org" CI_GIT_EMAIL="infra+ci@flatcar-linux.org"

View File

@ -8,6 +8,7 @@
source ci-automation/ci-config.env source ci-automation/ci-config.env
: ${PIGZ:=pigz} : ${PIGZ:=pigz}
: ${docker:=docker}
function init_submodules() { function init_submodules() {
git submodule init git submodule init
@ -136,7 +137,7 @@ function image_exists_locally() {
local version="$2" local version="$2"
local image="${name}:${version}" local image="${name}:${version}"
local image_exists="$(docker images "${image}" \ local image_exists="$($docker images "${image}" \
--no-trunc --format '{{.Repository}}:{{.Tag}}')" --no-trunc --format '{{.Repository}}:{{.Tag}}')"
[ "${image}" = "${image_exists}" ] [ "${image}" = "${image_exists}" ]
@ -157,7 +158,7 @@ function docker_image_fullname() {
local image="$1" local image="$1"
local version="$2" local version="$2"
docker images --no-trunc --format '{{.Repository}}:{{.Tag}}' \ $docker images --no-trunc --format '{{.Repository}}:{{.Tag}}' \
| grep -E "^(${CONTAINER_REGISTRY}/)*${image}:${version}$" | grep -E "^(${CONTAINER_REGISTRY}/)*${image}:${version}$"
} }
# -- # --
@ -169,7 +170,7 @@ function docker_image_to_buildcache() {
# strip potential container registry prefix # strip potential container registry prefix
local tarball="$(basename "$image")-${version}.tar.gz" local tarball="$(basename "$image")-${version}.tar.gz"
docker save "${image}":"${version}" | $PIGZ -c > "${tarball}" $docker save "${image}":"${version}" | $PIGZ -c > "${tarball}"
copy_to_buildcache "containers/${version}" "${tarball}" copy_to_buildcache "containers/${version}" "${tarball}"
} }
# -- # --
@ -179,7 +180,7 @@ function docker_commit_to_buildcache() {
local image_name="$2" local image_name="$2"
local image_version="$3" local image_version="$3"
docker commit "${container}" "${image_name}:${image_version}" $docker commit "${container}" "${image_name}:${image_version}"
docker_image_to_buildcache "${image_name}" "${image_version}" docker_image_to_buildcache "${image_name}" "${image_version}"
} }
# -- # --
@ -199,7 +200,7 @@ function docker_image_from_buildcache() {
--retry-connrefused --retry-max-time 60 --connect-timeout 20 \ --retry-connrefused --retry-max-time 60 --connect-timeout 20 \
--remote-name "${url}" --remote-name "${url}"
cat "${tgz}" | $PIGZ -d -c | docker load cat "${tgz}" | $PIGZ -d -c | $docker load
rm "${tgz}" rm "${tgz}"
} }
@ -213,10 +214,11 @@ function docker_image_from_registry_or_buildcache() {
return return
fi fi
if docker pull "${CONTAINER_REGISTRY}/${image}:${version}" ; then if $docker pull "${CONTAINER_REGISTRY}/${image}:${version}" ; then
return return
fi fi
echo "Falling back to tar ball download..." >&2
docker_image_from_buildcache "${image}" "${version}" docker_image_from_buildcache "${image}" "${version}"
} }
# -- # --

View File

@ -4,7 +4,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
set -eu set -euo pipefail
cd $(dirname "$0") cd $(dirname "$0")
source sdk_lib/sdk_container_common.sh source sdk_lib/sdk_container_common.sh
@ -104,6 +104,9 @@ if [ -z "$stat" ] ; then
gpg_volumes=$(gnupg_ssh_gcloud_mount_opts) gpg_volumes=$(gnupg_ssh_gcloud_mount_opts)
source ci-automation/ci_automation_common.sh
docker_image_from_registry_or_buildcache "flatcar-sdk-${arch}" "${docker_sdk_vernum}"
$docker create $tty -i \ $docker create $tty -i \
-v /dev:/dev \ -v /dev:/dev \
-v "$(pwd)/sdk_container:/mnt/host/source/" \ -v "$(pwd)/sdk_container:/mnt/host/source/" \