diff --git a/templates/gitlab-ci-docker.yml b/templates/gitlab-ci-docker.yml index 4e8fd79622256a2db6f4116b8b538e0720a08e51..755e8f8bb7c7a64d9fa2e51120cd91a797cec18b 100644 --- a/templates/gitlab-ci-docker.yml +++ b/templates/gitlab-ci-docker.yml @@ -518,6 +518,22 @@ stages: done } + # simple JSON merge (used in Skopeo job only) + function merge_json() { + python3 -c "import json,sys + def merge(a,b): + for key in b: + if key in a and isinstance(a[key],dict) and isinstance(b[key],dict): a[key]=merge(a[key],b[key]) + else: a[key]=b[key] + return a + def mergef(*files): + res={} + for f in files: + with open(f,'r') as rd: res=merge(res,json.load(rd)) + return res + print(json.dumps(mergef(*sys.argv[1:])))" "$@" + } + function wait_for_docker_daemon() { log_info "Wait for Docker daemon..." # shellcheck disable=SC2034 @@ -562,10 +578,16 @@ stages: echo "${docker_snapshot_config_json}" > "$BUILDTOOL_HOME/.docker/config.json" fi - # Create the configuration file for Skopeo - mkdir -p "$BUILDTOOL_HOME/skopeo/.docker" - echo "${docker_snapshot_config_json}" > "$BUILDTOOL_HOME/skopeo/.docker/src-config.json" - echo "${docker_release_config_json}" > "$BUILDTOOL_HOME/skopeo/.docker/dest-config.json" + # Create the configuration files for Skopeo + if command -v skopeo > /dev/null + then + mkdir -p "$BUILDTOOL_HOME/skopeo/.docker" + # use same auth config as the build tool for the source image + cp -f "$BUILDTOOL_HOME/.docker/config.json" "$BUILDTOOL_HOME/skopeo/.docker/src-config.json" + # use a merged auth config for the destination image + echo "${docker_release_config_json}" > "$BUILDTOOL_HOME/skopeo/.docker/release-only.json" + merge_json "$BUILDTOOL_HOME/skopeo/.docker/src-config.json" "$BUILDTOOL_HOME/skopeo/.docker/release-only.json" > "$BUILDTOOL_HOME/skopeo/.docker/dest-config.json" + fi log_info "Docker authentication configured for \\e[33;1m${docker_snapshot_registry_host}\\e[0m" }