こんにちは私はCIとCDにgitlabciを使い始めました。私は瓶と戦争を保管するためにNexusを使用しています。
gitlab config
stages:
- build
- package
services:
- name: mongo:3.2.4
alias: mongodb
variables:
mongodb_hosts: "mongodb"
build_maven:
image: maven:3-jdk-8
stage: build
script:
- echo $pwd
- "./docker/wait-for-it.sh mongodb:27107 -t 30 -- git checkout master && mvn -B -Dresume=false release:prepare release:perform"
artifacts:
paths:
- target/*.jar
only:
- master
これは正常に機能しますが、ビルドの循環方法をトリガーします。 MavenアーティファクトのリリースにMavenリリースプラグインを使用しているためです。
リリースプラグインはスナップショットの変更を変更し、再びgitlabにコミットします。その間にgitlabトリガーが再びビルドされるので、循環トリガーのためです。
これを適切に処理する方法は?私は次のことを達成したいと思います。
マスターブランチをビルドするとき、私は最終バージョンをnexusにリリースし、リリースプラグインと同じようにpomファイルのバージョンを自動的に増やすのが好きです。
アーティファクトをリリースするための次の仕事があります。
Release Maven:
stage: release
image: maven:3-jdk-8
script:
- git checkout master
- git reset --hard "Origin/master"
# Gitlab clones as HTTPS and there's no plan to support SSH
# The SSH key needed is built into the custom Maven image
- git remote set-url Origin $SSH_GIT_URL
- mvn --batch-mode clean release:prepare release:perform -Dresume=false -DautoVersionSubmodules=true -DdryRun=false -Dmaven.test.skip=true -DskipITs -DscmCommentPrefix="[ci skip]"
ここでの主な属性は-DscmCommentPrefix="[ci skip]"
-これにより、プレフィックス付きのコミットメッセージが作成され、gitlab-ciが新しいパイプラインを開始できなくなります。
Gitlab ci 変数を除くを使用できます:
release:
stage: release
only:
- /^(release|RELEASE).*/
except:
variables:
- $CI_COMMIT_MESSAGE =~ /maven-release-plugin/
script:
- git checkout -B "$CI_BUILD_REF_NAME"
- mvn -B release:prepare ...
変数に関する詳細情報: https://docs.gitlab.com/ee/ci/variables/