From 720e987df8c8d26e6b2645f52f8873dcd4b4e790 Mon Sep 17 00:00:00 2001 From: Sergio Prado Date: Tue, 8 Dec 2020 10:35:05 -0300 Subject: [PATCH] Add GitLab CI script The GitLab CI script will automatically build the containers (with multiarch support) and push to GitLab local registry. Manual jobs will be available to push the containers to Docker hub. Signed-off-by: Sergio Prado --- .gitlab-ci.yml | 493 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 493 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..28dd9c2 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,493 @@ +image: docker:latest + +variables: + IMAGE_TAG_DEBIAN: "2-bullseye" + + RT_TESTS_MAJOR: "2" + RT_TESTS_MINOR: "0" + RT_TESTS_PATCH: "0" + + STRESS_TESTS_MAJOR: "2" + STRESS_TESTS_MINOR: "0" + STRESS_TESTS_PATCH: "0" + + # This should be set by docker image already, just to be sure... + DOCKER_HOST: tcp://docker:2375 + + # Use overlayfs driver for better performance + DOCKER_TLS_CERTDIR: "" + DOCKER_DRIVER: overlay2 + + IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + GITLAB_DOCKERREGISTRY_SUFFIX: ${CI_COMMIT_REF_SLUG}-${CI_PIPELINE_ID} + GITLAB_DOCKERREGISTRY_SUFFIX_LATEST: ${CI_COMMIT_REF_SLUG}-latest + +services: + - name: docker:dind + +before_script: + - docker info + +stages: + - build-rt-tests + - build-rt-tests-multiarch + - deploy-major + - deploy-minor + - deploy-patch + - deploy-patch-date + - deploy-multiarch-major + - deploy-multiarch-minor + - deploy-multiarch-patch + - deploy-multiarch-patch-date + +# Docker image builds +# +# Build the Docker images specified in DOCKERFILE_FOLDER/IMAGE_NAME and push +# it to Gitlab's internal Docker registry +.docker-build: + variables: + IMAGE_ARCH: linux/arm + script: + # Try to download latest image for cache, but don't fail if it does not exist + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} || true + - export DATE=$(date +%Y%m%d) + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --build-arg IMAGE_TAG=${IMAGE_TAG} + --build-arg IMAGE_ARCH=${IMAGE_ARCH} + --cache-from ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + ${DOCKER_NO_CACHE:+--no-cache} + --label container.name=${IMAGE_NAME} + --label container.version=${MAJOR}.${MINOR}.${PATCH}-${DATE} + --label git.branch=${CI_COMMIT_BRANCH} + --label git.hash=${CI_COMMIT_SHA} + --label pipeline.id=${CI_PIPELINE_ID} + -f ${DOCKERFILE_FOLDER}Dockerfile + -t ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + -t ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + ${DOCKERFILE_FOLDER} + - docker push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + +docker-build-rt-tests: + extends: .docker-build + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm32v7-rt-tests + DOCKERFILE_FOLDER: "./rt-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests + +docker-build-stress-tests: + extends: .docker-build + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm32v7-stress-tests + DOCKERFILE_FOLDER: "./stress-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests + +docker-build-rt-tests-arm64: + extends: .docker-build + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_ARCH: linux/arm64 + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm64v8-rt-tests + DOCKERFILE_FOLDER: "./rt-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests + +docker-build-stress-tests-arm64: + extends: .docker-build + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_ARCH: linux/arm64 + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm64v8-stress-tests + DOCKERFILE_FOLDER: "./stress-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests + +# Enable experimental features in Docker client (experimental feature are needed for manifest) +.do_docker_experimental: &do_docker_experimental + - mkdir -p $HOME/.docker + - "echo -e '{\n \"experimental\": \"enabled\"\n}' | tee $HOME/.docker/config.json" + - docker version + +.docker-build-multiarch: + before_script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker manifest create ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm + - docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm64 + - docker manifest inspect -v ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + - docker manifest push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + +docker-build-rt-tests-multiarch: + extends: .docker-build-multiarch + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: build-rt-tests-multiarch + +docker-build-stress-tests-multiarch: + extends: .docker-build-multiarch + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: build-rt-tests-multiarch + +# Docker deploy jobs +# +# Make sure DOCKER_HUB_USER/DOCKER_HUB_PW is properly set in the project +# specific Gitlab CI settings. +.docker-deploy-major: + when: manual + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} + +docker-deploy-rt-tests-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-major + +docker-deploy-stress-tests-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-major + +docker-deploy-rt-tests-arm64-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-major + +docker-deploy-stress-tests-arm64-major: + extends: .docker-deploy-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-major + +.docker-deploy-minor: + when: manual + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} + +docker-deploy-rt-tests-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-minor + +docker-deploy-stress-tests-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-minor + +docker-deploy-rt-tests-arm64-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-minor + +docker-deploy-stress-tests-arm64-minor: + extends: .docker-deploy-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-minor + +.docker-deploy-patch: + when: manual + script: + - *do_docker_experimental + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} > /dev/null && true; RESULT=$? + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - (if [ ${RESULT} == 1 ] ; then docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-patch: + extends: .docker-deploy-patch + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-patch + +docker-deploy-stress-tests-patch: + extends: .docker-deploy-patch + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-patch + +docker-deploy-rt-tests-arm64-patch: + extends: .docker-deploy-patch + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-patch + +docker-deploy-stress-tests-arm64-patch: + extends: .docker-deploy-patch + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-patch + +.docker-deploy-patch-date: + when: manual + script: + - *do_docker_experimental + - export DATE=$(date +%Y%m%d) + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} > /dev/null && true; RESULT=$? + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - (if [ ${RESULT} == 1 ] ; then docker push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-patch-date: + extends: .docker-deploy-patch-date + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: arm32v7-rt-tests + stage: deploy-patch-date + +docker-deploy-stress-tests-patch-date: + extends: .docker-deploy-patch-date + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy-patch-date + +docker-deploy-rt-tests-arm64-patch-date: + extends: .docker-deploy-patch-date + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy-patch-date + +docker-deploy-stress-tests-arm64-patch-date: + extends: .docker-deploy-patch-date + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy-patch-date + +.docker-deploy-multiarch-major: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + - docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR} + +docker-deploy-rt-tests-multiarch-major: + extends: .docker-deploy-multiarch-major + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-major + +docker-deploy-stress-tests-multiarch-major: + extends: .docker-deploy-multiarch-major + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-major + +.docker-deploy-multiarch-minor: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + - docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR} + +docker-deploy-rt-tests-multiarch-minor: + extends: .docker-deploy-multiarch-minor + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-minor + +docker-deploy-stress-tests-multiarch-minor: + extends: .docker-deploy-multiarch-minor + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-minor + +.docker-deploy-multiarch-patch: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} > /dev/null && true; RESULT=$? + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} + - (if [ ${RESULT} == 1 ] ; then docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-multiarch-patch: + extends: .docker-deploy-multiarch-patch + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-patch + +docker-deploy-stress-tests-multiarch-patch: + extends: .docker-deploy-multiarch-patch + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-patch + +.docker-deploy-multiarch-patch-date: + when: manual + script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + - export DATE=$(date +%Y%m%d) + - docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} > /dev/null && true; RESULT=$? + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${MAJOR}.${MINOR}.${PATCH}-${DATE} --os linux --arch arm + - docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${MAJOR}.${MINOR}.${PATCH}-${DATE} --os linux --arch arm64 + - docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} + - (if [ ${RESULT} == 1 ] ; then docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${MAJOR}.${MINOR}.${PATCH}-${DATE} ; else echo Image with this tag already exists. ; fi) + +docker-deploy-rt-tests-multiarch-patch-date: + extends: .docker-deploy-multiarch-patch-date + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch-patch-date + +docker-deploy-stress-tests-multiarch-patch-date: + extends: .docker-deploy-multiarch-patch-date + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch-patch-date