1 changed files with 133 additions and 0 deletions
@ -0,0 +1,133 @@ |
|||
variables: |
|||
CI_BUILD_IMAGE: "registry.gitlab.com/ericvh/docker-buildx-qemu" |
|||
CI_BUILDX_ARCHS: "linux/amd64,linux/arm64,linux/386,linux/arm/v7,linux/arm/v6" |
|||
|
|||
.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 |
|||
DOCKER_TLS_CERTDIR: "" |
|||
before_script: |
|||
- | |
|||
echo "CI_BUILD_IMAGE is $CI_BUILD_IMAGE" |
|||
echo "CI_COMMIT_REF_NAME is $CI_COMMIT_REF_NAME" |
|||
echo "CI_REGISTRY_IMAGE is $CI_REGISTRY_IMAGE" |
|||
echo "CI_COMMIT_REF_SLUG is $CI_COMMIT_REF_SLUG" |
|||
echo "CI_COMMIT_SHA is $CI_COMMIT_SHAE" |
|||
echo "CI_REGISTRY is $CI_REGISTRY" |
|||
echo "CI_PROJECT_NAMESPACE is $CI_PROJECT_NAMESPACE" |
|||
echo "CI_PROJECT_NAME is $CI_PROJECT_NAME" |
|||
if [[ -z "$CI_COMMIT_TAG" ]]; then |
|||
echo "Commit tag not set" |
|||
export CI_APPLICATION_REPOSITORY=${CI_APPLICATION_REPOSITORY:-$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG} |
|||
echo "CI_APPLICATION_REPOSITORY is $CI_APPLICATION_REPOSITORY" |
|||
export CI_APPLICATION_TAG=${CI_APPLICATION_TAG:-$CI_COMMIT_SHA} |
|||
else |
|||
echo "CI_COMMIT_TAG is $CI_COMMIT_TAG" |
|||
echo "CI_REGISTRY_IMAGE is $CI_REGISTRY_IMAGE" |
|||
export CI_APPLICATION_REPOSITORY=${CI_APPLICATION_REPOSITORY:-$CI_REGISTRY_IMAGE} |
|||
echo "CI_APPLICATION_REPOSITORY is $CI_APPLICATION_REPOSITORY" |
|||
export CI_APPLICATION_TAG=${CI_APPLICATION_TAG:-$CI_COMMIT_TAG} |
|||
fi |
|||
- | |
|||
if [[ -z $DOCKER_USERNAME ]] && [[ -z $DOCKER_PASSWORD ]]; then |
|||
echo "Setting gitlab containers (Username $CI_REGISTRY_USER) credentials" |
|||
echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY |
|||
else |
|||
echo "Setting docker username ($DOCKER_USERNAME) and password" |
|||
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin |
|||
fi |
|||
|
|||
build:buildx-master: |
|||
extends: .build |
|||
only: |
|||
refs: |
|||
- master |
|||
variables: |
|||
- $CI_BUILDX_ARCHS |
|||
script: |
|||
- update-binfmts --enable |
|||
- docker buildx create --driver docker-container --use |
|||
- docker buildx inspect --bootstrap |
|||
- docker buildx ls |
|||
- | |
|||
if [[ -z $DOCKER_USERNAME ]] && [[ -z $DOCKER_PASSWORD ]]; then |
|||
echo "Build to gitlab only" |
|||
docker buildx build --platform $CI_BUILDX_ARCHS --progress plain --pull -t "$CI_REGISTRY_IMAGE" --push . |
|||
else |
|||
echo "Build to docker hub" |
|||
if [[ ! -z $CI_COMMIT_TAG ]]; then |
|||
echo "Building to tag ($CI_COMMIT_TAG)" |
|||
docker buildx build \ |
|||
--platform $CI_BUILDX_ARCHS \ |
|||
--tag $DOCKER_USERNAME/buildx-test:$CI_COMMITTAG \ |
|||
--output "type=registry" . |
|||
else |
|||
echo "Building to latest" |
|||
docker buildx build \ |
|||
--platform $CI_BUILDX_ARCHS \ |
|||
--tag $DOCKER_USERNAME/$CI_PROJECT_NAME:latest \ |
|||
--output "type=registry" . |
|||
fi |
|||
fi |
|||
|
|||
build:buildx-tags-or-branch: |
|||
extends: .build |
|||
only: |
|||
variables: |
|||
- $CI_BUILDX_ARCHS |
|||
except: |
|||
refs: |
|||
- master |
|||
script: |
|||
- update-binfmts --enable |
|||
- | |
|||
echo "Variables set by CI" |
|||
echo "CI_APPLICATION_TAG: $CI_APPLICATION_TAG" |
|||
echo "CI_COMMIT_TAG: $CI_COMMIT_TAG" |
|||
echo "CI_COMMIT_BRANCH: $CI_COMMIT_BRANCH" |
|||
echo "CI_COMMIT_SHORT_SHA: $CI_COMMIT_SHORT_SHA" |
|||
- | |
|||
echo "Setup buildx" |
|||
docker buildx inspect --bootstrap |
|||
docker buildx ls |
|||
docker buildx create --driver docker-container --use |
|||
|
|||
if [[ -z $DOCKER_USERNAME ]] && [[ -z $DOCKER_PASSWORD ]]; then |
|||
echo "Build to gitlab containers" |
|||
if [ ! -z $CI_COMMIT_TAG ]; then |
|||
echo "Building $CI_COMMIT_TAG (tag mode)" |
|||
echo "Repo to push to $CI_APPLICATION_REPOSITORY:$CI_COMMIT_TAG-$CI_COMMIT_SHORT_SHA" |
|||
docker buildx build --platform $CI_BUILDX_ARCHS --progress plain --pull -t "$CI_APPLICATION_REPOSITORY:$CI_COMMIT_TAG-$CI_COMMIT_SHORT_SHA" --push . |
|||
else |
|||
echo "Not building by tag as CI_COMMIT_TAG is empty" |
|||
fi |
|||
if [ ! -z $CI_COMMIT_BRANCH ]; then |
|||
echo "Building $CI_COMMIT_BRANCH (branch mode)" |
|||
echo "Repo to push to $CI_APPLICATION_REPOSITORY:$CI_COMMIT_SHORT_SHA" |
|||
docker buildx build --platform $CI_BUILDX_ARCHS --progress plain --pull -t "$CI_APPLICATION_REPOSITORY:$CI_COMMIT_SHORT_SHA" --push . |
|||
else |
|||
echo "Not building by branch as CI_COMMIT_BRANCH is empty" |
|||
fi |
|||
else |
|||
echo "Build to dockerhub" |
|||
if [[ ! -z $CI_COMMIT_TAG ]]; then |
|||
echo "Building to tag ($CI_COMMIT_TAG)" |
|||
docker buildx build \ |
|||
--platform $CI_BUILDX_ARCHS \ |
|||
--tag $DOCKER_USERNAME/$CI_PROJECT_NAME:$CI_COMMITTAG \ |
|||
--output "type=registry" . |
|||
else |
|||
echo "Building to latest" |
|||
docker buildx build \ |
|||
--platform $CI_BUILDX_ARCHS \ |
|||
--tag $DOCKER_USERNAME/$CI_PROJECT_NAME:latest \ |
|||
--output "type=registry" . |
|||
fi |
|||
fi |
Loading…
Reference in new issue