From 5c00a692f6da20ad01111b0ea5f7e7e9497ee219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Fri, 28 Jul 2023 21:57:20 +0200 Subject: [PATCH] Add container build pipeline --- .gitlab-ci.yml | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..59a7a71 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,60 @@ +variables: + GIT_SUBMODULE_STRATEGY: recursive + GIT_SUBMODULE_FORCE_HTTPS: "true" + DOCKER_HOST: tcp://docker:2375 + DOCKER_TLS_CERTDIR: + DOCKER_DRIVER: overlay2 + DOCKERFILE: Dockerfile_ExerciceChecker + PLATFORMS: linux/amd64,linux/arm64/v8 + CHECKER_PROJECT_FOLDER: ExerciceChecker + +stages: + - build + - release + +default: + tags: + - docker + image: docker:latest + services: + - docker:dind + before_script: + - apk update + - apk add git + - apk add jq + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker buildx create --use + - > + VERSION=$(jq -r .version $CHECKER_PROJECT_FOLDER/package.json) + - > + CONTAINER_IMAGE=$CI_REGISTRY_IMAGE:$VERSION-dev + +build: + stage: build + tags: + - build + script: + - apk add curl + - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | sh + - mv .secure_files/env $CHECKER_PROJECT_FOLDER/.env + # Need to build for each platform separately because of multi-stage builds (docker buildx don't use cache same way as docker build) + - > + platform_array=$(echo $PLATFORMS | tr "," "\n"); + for platform in $platform_array; do + echo "Buildind for : $platform" + docker buildx build --pull --platform $platform --file $DOCKERFILE --tag $CONTAINER_IMAGE . + done + # Here docker buildx can use cached images created in previous step + - docker buildx build --platform $PLATFORMS --file $DOCKERFILE --push --tag $CONTAINER_IMAGE . + rules: + - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH =~ /^v_[0-9]+(\.[0-9]+)*$/ || $CI_COMMIT_TAG =~ /^v_[0-9]+(\.[0-9]+)*$/' + +release-image: + stage: release + tags: + - release + script: + - docker buildx imagetools create $CONTAINER_IMAGE --tag $CI_REGISTRY_IMAGE:$VERSION + - docker buildx imagetools create $CONTAINER_IMAGE --tag $CI_REGISTRY_IMAGE:latest + rules: + - if: '$CI_COMMIT_BRANCH == "main"' \ No newline at end of file -- GitLab