I found a way without using a file for my GitLab CI
It copies all the labels from the source image and passes a list of --label
arguments to docker build
.docker_build_args: &docker_build_args
- DOCKER_BUILD_ARGS="--build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA"
- DOCKER_LABEL_ARGS=$(docker inspect $CI_REGISTRY/$CI_PROJECT_NAMESPACE/project:$PLATFORM_TAG | jq -r '.[] | .Config.Labels | to_entries | map("--label \(.key)=\"\(.value | tostring | gsub("\""; "\\\""))\"") | join(" ")')
- DOCKER_ARGS="$DOCKER_BUILD_ARGS $DOCKER_LABEL_ARGS"
build_image:
stage: deploy
image: docker:28.0.4
services:
- docker:28.0.4-dind
# Do not download artifacts from previous stage
dependencies: []
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin
script:
- TAG=debug
- *docker_build_args
- |
eval "docker build \
--build-arg TAG=$TAG \
$DOCKER_ARGS \
-t $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME ."
- docker push $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME