From 3e1f4238a155f946e7371226b9d31c3eb2b22301 Mon Sep 17 00:00:00 2001 From: Roman <roman@jointech.org> Date: Tue, 22 Mar 2022 12:41:12 +0100 Subject: [PATCH] Feat(gitlab-ci,docker,release-management): Run pipeline for docker and releases - Add release stage to existing Gitlab pipeline - Add docker build and push job - Add create release job --- .gitlab-ci.yml | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index adf15dd..88e0f67 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,11 +3,20 @@ image: python:3.8-buster stages: - bundle - deploy + - release variables: API_ROOT_FILE: ./src/rest/swagger/swagger.yaml BUNDLED_JSON_FILE: ./public/api.json +.release-rules: &release-rules + # rule to run job on a tag-reference which has the form number.number.number (semantic versioning) + # or number.number.number-text (semantic versioning + release-name) + # and where a Dockerfile exists + - if: $CI_COMMIT_TAG =~ /^\d+[.]\d+[.]\d+$/ || $CI_COMMIT_TAG =~ /^\d+[.]\d+[.]\d+[-]\S+$/ + exists: + - Dockerfile + cache: paths: - ./node_modules @@ -56,3 +65,46 @@ pages: expire_in: 2 days only: - master + +docker-push: + # Use the official docker image. + image: docker:latest + stage: release + variables: + # the name of the image without version + AURA_IMAGE_NAME: "autoradio/engine-api" + services: + - docker:dind + before_script: + # default repo is docker.io (aka docker hub) + - docker login -u "$DOCKER_ID" -p "$DOCKER_HUB_AUTH" + script: + # every commit on main branch should build image as unstable + # else it is from a tag (enforced by gitlab-ci rules) + # hint: tags are references independent of branches + - | + if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ] + then docker build -t $AURA_IMAGE_NAME:unstable . + else docker build -t $AURA_IMAGE_NAME -t $AURA_IMAGE_NAME:$CI_COMMIT_TAG . + fi + - docker push "$AURA_IMAGE_NAME" --all-tags + rules: + - *release-rules + # every commit on master/main branch should trigger a push to docker-hub as unstable without a release + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + exists: + - Dockerfile + +release_job: + stage: release + needs: + - docker-push + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: *release-rules + script: + - echo "this will be a release when there is a tag, but tags should be protected to be only createable by maintainers." + release: + name: 'Release $CI_COMMIT_TAG' + description: ./CHANGELOG + tag_name: '$CI_COMMIT_TAG' + ref: '$CI_COMMIT_TAG' -- GitLab