125 lines
4.3 KiB
YAML
125 lines
4.3 KiB
YAML
---
|
|
# variables:
|
|
# # Available platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
|
|
# # DOCKER_IMAGE_BUILD_TARGET_PLATFORMS: "linux/amd64,linux/arm64,linux/arm/v7"
|
|
# DOCKER_IMAGE_BUILD_NAME: $CI_PROJECT_NAME
|
|
# DOCKER_IMAGE_BUILD_REGISTRY: $CI_REGISTRY_IMAGE
|
|
# DOCKER_IMAGE_BUILD_TAG: $CI_COMMIT_SHA
|
|
|
|
|
|
.publish-docker-hub:
|
|
stage: publish
|
|
image: docker:23-dind
|
|
services:
|
|
- docker:23-dind
|
|
before_script:
|
|
- |
|
|
|
|
docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD;
|
|
|
|
if [ "0$DOCKER_IMAGE_BUILD_TARGET_PLATFORMS" != "0" ]; then
|
|
|
|
for i in ${DOCKER_IMAGE_BUILD_TARGET_PLATFORMS//,/ }
|
|
do
|
|
|
|
docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
|
|
|
#DOCKER_MULTI_ARCH_IMAGES=$(docker buildx imagetools inspect "$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG" --format "{{ range .Manifest.Manifests }}{{ if ne (print .Platform) \"&{unknown unknown [] }\" }}$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG@{{ println .Digest }}{{end}} {{end}}")
|
|
DOCKER_MULTI_ARCH_IMAGES=$(docker buildx imagetools inspect "$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG" --format "{{ range .Manifest.Manifests }}$DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG@{{ println .Digest }} {{end}}")
|
|
|
|
|
|
echo "[DEBUG] DOCKER_MULTI_ARCH_IMAGES=$DOCKER_MULTI_ARCH_IMAGES";
|
|
|
|
done;
|
|
|
|
else
|
|
|
|
docker pull $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;
|
|
|
|
fi
|
|
|
|
#docker logout $CI_REGISTRY; # commented out to test if for private repo remaining logged in works to allow pulling image
|
|
|
|
script:
|
|
- docker login docker.io -u $NFC_DOCKERHUB_USERNAME -p $NFC_DOCKERHUB_TOKEN
|
|
- docker image ls
|
|
- |
|
|
DOCKER_HUB_TAG=dev
|
|
|
|
if [ "0$CI_COMMIT_TAG" != "0" ]; then
|
|
|
|
DOCKER_HUB_TAG=latest
|
|
|
|
if [ "0$CI_COMMIT_TAG" == *"rc"* ]; then
|
|
|
|
DOCKER_HUB_TAG=dev
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
echo "[DEBUG] DOCKER_IMAGE_PUBLISH_NAME=$DOCKER_IMAGE_PUBLISH_NAME";
|
|
echo "[DEBUG] DOCKER_HUB_TAG=$DOCKER_HUB_TAG";
|
|
|
|
if [ "0$DOCKER_IMAGE_BUILD_TARGET_PLATFORMS" != "0" ]; then
|
|
|
|
echo "[DEBUG] DOCKER_MULTI_ARCH_IMAGES=$DOCKER_MULTI_ARCH_IMAGES";
|
|
|
|
docker buildx imagetools create $DOCKER_MULTI_ARCH_IMAGES --tag $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$DOCKER_HUB_TAG;
|
|
|
|
if [ "0$CI_COMMIT_TAG" != "0" ]; then
|
|
|
|
docker buildx imagetools create $DOCKER_MULTI_ARCH_IMAGES --tag $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$CI_COMMIT_TAG;
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
docker image tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$DOCKER_HUB_TAG;
|
|
|
|
docker push $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$DOCKER_HUB_TAG;
|
|
|
|
if [ "0$CI_COMMIT_TAG" != "0" ]; then
|
|
|
|
docker image tag $DOCKER_IMAGE_BUILD_NAME/$DOCKER_IMAGE_BUILD_REGISTRY:$DOCKER_IMAGE_BUILD_TAG $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$CI_COMMIT_TAG;
|
|
|
|
docker push $DOCKER_IMAGE_PUBLISH_REGISTRY/$DOCKER_IMAGE_PUBLISH_NAME:$CI_COMMIT_TAG;
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
- docker logout docker.io
|
|
environment:
|
|
name: DockerHub
|
|
url: $DOCKER_IMAGE_PUBLISH_URL
|
|
rules:
|
|
|
|
- if: # condition_git_tag
|
|
$CI_COMMIT_TAG != null &&
|
|
$CI_COMMIT_BRANCH == null
|
|
exists:
|
|
- '{dockerfile, dockerfile.j2}'
|
|
when: on_success
|
|
|
|
- if: # condition_master_branch_push
|
|
$CI_COMMIT_BRANCH == "master" &&
|
|
$CI_PIPELINE_SOURCE == "push"
|
|
exists:
|
|
- '{dockerfile, dockerfile.j2}'
|
|
when: always
|
|
|
|
- if: # condition_dev_branch_push
|
|
$CI_COMMIT_BRANCH == "development" &&
|
|
$CI_PIPELINE_SOURCE == "push"
|
|
exists:
|
|
- '{dockerfile, dockerfile.j2}'
|
|
changes:
|
|
paths:
|
|
- '{dockerfile, dockerfile.j2, includes**/**}'
|
|
compare_to: 'master'
|
|
allow_failure: true
|
|
when: manual
|
|
|
|
- when: never
|