variables: CI_BUILD_IMAGE: "registry.gitlab.com/gdunstone/docker-buildx-qemu" .build: image: $CI_BUILD_IMAGE stage: build services: - name: docker:dind entrypoint: ["env", "-u", "DOCKER_HOST"] command: ["dockerd-entrypoint.sh"] variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 # See https://github.com/docker-library/docker/pull/166 DOCKER_TLS_CERTDIR: "" retry: 2 before_script: - | if [[ -z "$CI_COMMIT_TAG" ]]; then export CI_APPLICATION_REPOSITORY=${CI_APPLICATION_REPOSITORY:-$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG} export CI_APPLICATION_TAG=${CI_APPLICATION_TAG:-$CI_COMMIT_SHA} else export CI_APPLICATION_REPOSITORY=${CI_APPLICATION_REPOSITORY:-$CI_REGISTRY_IMAGE} export CI_APPLICATION_TAG=${CI_APPLICATION_TAG:-$CI_COMMIT_TAG} fi - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY # build:buildx-master: # extends: .build # only: # refs: # - master # variables: # - $CI_BUILDX_ARCHS # script: # # Use docker-container driver to allow useful features (push/multi-platform) # - update-binfmts --enable # Important: Ensures execution of other binary formats is enabled in the kernel # - docker buildx create --driver docker-container --use # - docker buildx inspect --bootstrap # - docker buildx ls # - docker buildx build --platform $CI_BUILDX_ARCHS --progress plain --pull -t "$CI_REGISTRY_IMAGE" --push . # build:buildx: # extends: .build # only: # variables: # - $CI_BUILDX_ARCHS # except: # refs: # - master # script: # - update-binfmts --enable # Important: Ensures execution of other binary formats is enabled in the kernel # - docker buildx create --driver docker-container --use # - docker buildx inspect --bootstrap # - docker buildx ls # - docker buildx build --platform $CI_BUILDX_ARCHS --progress plain --pull -t "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" --push . # # disable build:armv7 for now since it seems to have an issue with dind # .build:arm: # image: docker:dind # extends: .build # only: # variables: # - $CI_BUILD_ARM # except: # variables: # - $CI_BUILDX_ARCHS # tags: # - arm # script: # - docker build -t "$CI_APPLICATION_REPOSITORY/arm:$CI_APPLICATION_TAG" . # - docker push "$CI_APPLICATION_REPOSITORY/arm:$CI_APPLICATION_TAG" # build:arm64: # extends: .build # only: # variables: # - $CI_BUILD_ARM64 # except: # variables: # - $CI_BUILDX_ARCHS # tags: # - arm64 # script: # - docker build -t "$CI_APPLICATION_REPOSITORY/arm64:$CI_APPLICATION_TAG" . # - docker push "$CI_APPLICATION_REPOSITORY/arm64:$CI_APPLICATION_TAG" # builds this by default build:amd64: image: docker:dind extends: .build except: variables: - $CI_AMD64_DISABLED - $CI_BUILDX_ARCHS script: - docker build -t "$CI_APPLICATION_REPOSITORY/amd64:$CI_APPLICATION_TAG" . - docker push "$CI_APPLICATION_REPOSITORY/amd64:$CI_APPLICATION_TAG" build:manifest: extends: .build stage: deploy except: variables: - $CI_BUILDX_ARCHS script: - echo "Checking amd86 build..." && [[ -z $CI_AMD64_DISABLE ]] && echo "found" && export CI_MANIFEST_LIST="$CI_APPLICATION_REPOSITORY/amd64:$CI_APPLICATION_TAG" - echo "Checking arm build..." && [[ $CI_BUILD_ARM ]] && echo "found" && export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APPLICATION_REPOSITORY/arm:$CI_APPLICATION_TAG" - echo "Checking arm64 build..." && [[ $CI_BUILD_ARM64 ]] && echo "found" && export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APPLICATION_REPOSITORY/arm64:$CI_APPLICATION_TAG" - export DOCKER_CLI_EXPERIMENTAL=enabled - echo $CI_MANIFEST_LIST - docker manifest create $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG $CI_MANIFEST_LIST && docker manifest push $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG - docker manifest create $CI_APPLICATION_REPOSITORY:latest $CI_MANIFEST_LIST && docker manifest push $CI_APPLICATION_REPOSITORY:latest - echo "Checking master" && [[ $CI_COMMIT_REF_NAME == "master" ]] && docker manifest create $CI_REGISTRY_IMAGE:latest $CI_MANIFEST_LIST && docker manifest push $CI_REGISTRY_IMAGE:latest