diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fe163e6..925f172 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,95 +2,39 @@ image: docker:stable services: - docker:dind +variables: + DOCKER_BUILDX_VERSION: v0.180 + DOCKER_BUILDX_ARCH: linux-amd64 + DOCKER_IMAGE_BUILD_TAG: ${CI_PIPELINE_IID} + DOCKER_IMAGE_BUILD: ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID} + DOCKER_IMAGE_LATEST: ${CI_REGISTRY_IMAGE}:latest + DOCKERX_BUILD_CONTEXT: dockerx-ctx-${CI_PIPELINE_IID} + DOCKERHUB_IMAGE_BUILD: ${DOCKERHUB_IMAGE}:${CI_PIPELINE_IID} + DOCKERHUB_IMAGE_LATEST: ${DOCKERHUB_IMAGE}:latest + stages: - - build - release -before_script: - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - export DOCKER_BUILD_ARGS="--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=$CI_COMMIT_SHORT_SHA" - -build-amd64: - stage: build - script: - - docker build --build-arg ARCH=amd64 $DOCKER_BUILD_ARGS -t ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 . - - docker push ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 - -build-arm32v6: - stage: build - script: - - docker build --build-arg ARCH=arm32v6 $DOCKER_BUILD_ARGS -t ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 . - - docker push ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 - -build-arm32v7: - stage: build - script: - - docker build --build-arg ARCH=arm32v7 $DOCKER_BUILD_ARGS -t ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 . - - docker push ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 - -build-arm64v8: - stage: build - script: - - docker build --build-arg ARCH=arm64v8 $DOCKER_BUILD_ARGS -t ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 . - - docker push ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 - -release: +release:docker: stage: release + timeout: 10m + image: docker:stable + services: + - docker:dind before_script: - - mkdir -p /root/.docker || true - - echo '{"experimental":"enabled"}' > /root/.docker/config.json - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} + - mkdir -p ~/.docker/cli-plugins + - wget -O ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/${DOCKER_BUILDX_VERSION}/buildx-${DOCKER_BUILDX_VERSION}.${DOCKER_BUILDX_ARCH}" + - chmod a+x ~/.docker/cli-plugins/docker-buildx + - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" + - docker login -u "${DOCKERHUB_USER}" -p "${DOCKERHUB_PASSWORD}" "${DOCKERHUB_REGISTRY}" + - docker buildx create --use --name "${DOCKERX_BUILD_CONTEXT}" script: - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 ${CI_REGISTRY_IMAGE}:latest-amd64 - - docker push ${CI_REGISTRY_IMAGE}:latest-amd64 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 ${CI_REGISTRY_IMAGE}:latest-arm32v6 - - docker push ${CI_REGISTRY_IMAGE}:latest-arm32v6 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 ${CI_REGISTRY_IMAGE}:latest-arm32v7 - - docker push ${CI_REGISTRY_IMAGE}:latest-arm32v7 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 ${CI_REGISTRY_IMAGE}:latest-arm64v8 - - docker push ${CI_REGISTRY_IMAGE}:latest-arm64v8 - - docker manifest create ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 - - docker manifest annotate --os linux --arch amd64 ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 - - docker manifest annotate --os linux --arch arm --variant v6 ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 - - docker manifest annotate --os linux --arch arm --variant v7 ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 - - docker manifest annotate --os linux --arch arm64 --variant v8 ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 - - docker manifest push ${CI_REGISTRY_IMAGE}:latest - only: - - main - - tags - - schedules - -dockerhub: - stage: release - before_script: - - mkdir -p /root/.docker || true - - echo '{"experimental":"enabled"}' > /root/.docker/config.json - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} - - docker login -u ${DOCKERHUB_USER} -p ${DOCKERHUB_PASSWORD} ${DOCKERHUB_REGISTRY} - script: - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-amd64 ${DOCKERHUB_IMAGE}:latest-amd64 - - docker push ${DOCKERHUB_IMAGE}:latest-amd64 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v6 ${DOCKERHUB_IMAGE}:latest-arm32v6 - - docker push ${DOCKERHUB_IMAGE}:latest-arm32v6 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm32v7 ${DOCKERHUB_IMAGE}:latest-arm32v7 - - docker push ${DOCKERHUB_IMAGE}:latest-arm32v7 - - docker pull ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 - - docker tag ${CI_REGISTRY_IMAGE}:${CI_PIPELINE_ID}-arm64v8 ${DOCKERHUB_IMAGE}:latest-arm64v8 - - docker push ${DOCKERHUB_IMAGE}:latest-arm64v8 - - docker manifest create ${DOCKERHUB_IMAGE}:latest ${DOCKERHUB_IMAGE}:latest-amd64 ${DOCKERHUB_IMAGE}:latest-arm32v6 ${DOCKERHUB_IMAGE}:latest-arm32v7 ${DOCKERHUB_IMAGE}:latest-arm64v8 - - docker manifest annotate --os linux --arch amd64 ${DOCKERHUB_IMAGE}:latest ${DOCKERHUB_IMAGE}:latest-amd64 - - docker manifest annotate --os linux --arch arm --variant v6 ${DOCKERHUB_IMAGE}:latest ${DOCKERHUB_IMAGE}:latest-arm32v6 - - docker manifest annotate --os linux --arch arm --variant v7 ${DOCKERHUB_IMAGE}:latest ${DOCKERHUB_IMAGE}:latest-arm32v7 - - docker manifest annotate --os linux --arch arm64 --variant v8 ${DOCKERHUB_IMAGE}:latest ${DOCKERHUB_IMAGE}:latest-arm64v8 - - docker manifest push ${DOCKERHUB_IMAGE}:latest + - docker buildx build --push --platform linux/amd64,linux/arm64/v8 --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` --build-arg VCS_REF=$CI_COMMIT_SHORT_SHA -t ${DOCKER_IMAGE_BUILD} -t ${DOCKER_IMAGE_LATEST} -t ${DOCKERHUB_IMAGE_BUILD} -t ${DOCKERHUB_IMAGE_LATEST} . + after_script: + - rm -f .git-credentials + - docker buildx rm "${DOCKERX_BUILD_CONTEXT}" + - docker logout "${CI_REGISTRY}" only: - main - tags