switch to docker buildx
This commit is contained in:
parent
ec553a2e89
commit
239d7723cf
1 changed files with 27 additions and 83 deletions
110
.gitlab-ci.yml
110
.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
|
||||
|
|
Loading…
Reference in a new issue