라이브러리 master 업로드 시 태그 붙이기.
gitlab job stage에 release를 제공해줌
https://docs.gitlab.com/ee/ci/yaml/#releasetag_message
파이프라인 tag를 만들어주는 스크립트는 다음과 같다.
tagging:
stage: release
script:
- echo "running release_job"
allow_failure: true
rules:
- if: "$CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == 'master'"
tags:
- prods
release:
tag_name: 'Pipeline.$CI_PIPELINE_ID'
description: 'Pipeline.$CI_PIPELINE_ID'
ref: '$CI_COMMIT_SHA'
두가지 이슈가 존재, 해결 방법
1. version을 어떻게 받아올 것인지
VERSION_TAG=$(awk '/<version>/ && ++count == 2 {gsub(/<\/*version>/, ""); print; exit}' pom-prod.xml)
pom-prod.xml에서 두번째로 나오는 version 태그를 찾아서 변수에 넣어줌, 필자의 경우 version 태그가 부모 pom에 대해 선언 되어있는 것이 있어 두번째 version 명을 찾음, 하지만 이 방법은 version 태그 추가에 대한 제약이 생김
TAG_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
해당 프로젝트 버전을 찍어보면 0.0.1-SNAPSHOT이 찍힌다.
필자는 멀티 pom을 사용하기에 다른 pom을 지정 -f pom-prod.xml
TAG_VERSION=$(mvn help:evaluate -f pom-prod.xml -Dexpression=project.version -q -DforceStdout )
VERSION_TAG를 잘 받아옴
2. version을 release step에 넣을 수가 없음
https://docs.gitlab.com/ee/user/project/releases/release_cicd_examples.html
release는 script, beforescript 다 안타서 변수로 선언해주어도 release에서 사용할 수가 없었음
https://stackoverflow.com/questions/77899654/gitlab-ci-use-a-job-variable-in-release-section
mpolitze 이 사람덕에 해결했다고 한다. 감사합니다.
TAG_VERSION을 그대로 파일에 복사하고 파일에서 cat해서 쓰니 된다고하여 적용해보았다.
tagging:
stage: release
variables:
VERSION_TAG: "v0.0.0"
VERSION_TAG_FILE: "version.txt"
script:
# - VERSION_TAG=$(awk '/<version>/ && ++count == 2 {gsub(/<\/*version>/, ""); print; exit}' pom-prod.xml)
- VERSION_TAG=$(mvn help:evaluate -f pom-prod.xml -Dexpression=project.version -q -DforceStdout )
- echo "Running release job for version VERSION_TAG"
- echo $VERSION_TAG > $VERSION_TAG_FILEallow_failure: true
only:
- master
tags:
- prod
release:
tag_name: $(cat $VERSION_TAG_FILE)
# tag_message: "Release $(cat $VERSION_TAG_FILE)"
name: "Release $(cat $VERSION_TAG_FILE) of $CI_PROJECT_NAME"# description: "Pipeline.$CI_PIPELINE_ID.$VERSION"
description: "Release $(cat $VERSION_TAG_FILE) at $CI_PIPELINE_CREATED_AT based on $CI_COMMIT_SHORT_SHA" ref: "$CI_COMMIT_SHA"
버전 태그 생성 완료
주의할 점
태그 만들때도 동일 버전이면 Job이 fail하게 되니
allow_failure 를 true 값을 주는 것도 좋을 듯 하다.
'IT' 카테고리의 다른 글
node, npm version up (0) | 2024.04.19 |
---|---|
maven multi pom.xml, pom-dev.xml, pom-prod.xml 다중 분리 (0) | 2024.03.22 |
gRPC란? RPC, gRPC, REST API (0) | 2024.03.05 |
싱글톤 유의해서 쓰자...(Feat Freemarker Configuration), Lock (0) | 2024.02.22 |
@Async와 ThreadPoolTaskExecutor (0) | 2024.02.19 |