宣言型パイプラインを使用する Jenkins ジョブがあります。
このジョブは、他のさまざまなビルドによってトリガーされる可能性があります。
宣言型パイプラインで、どのビルドがパイプラインをトリガーしたかを確認するにはどうすればよいですか?
宣言型パイプラインを使用する Jenkins ジョブがあります。
このジョブは、他のさまざまなビルドによってトリガーされる可能性があります。
宣言型パイプラインで、どのビルドがパイプラインをトリガーしたかを確認するにはどうすればよいですか?
これは数年前のものですが、以前の対応では、Jenkins インスタンスに追加のセキュリティ設定が必要でした。少し調査した結果、2018 年 11 月にこのニーズに対応し、currentBuild でビルドの原因を公開する新しい機能の要求が完了したことがわかりました。ビルドが別のビルドによってトリガーされた場合、文字列「JOB /」を先頭に追加して原因を返す、私が書いた小さなライブラリを次に示します。
def call(body) {
if (body == null) {body = {DEBUG = false}}
def myParams= [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = myParams
body()
def causes = currentBuild.getBuildCauses()
if (myParams.DEBUG) {
echo "causes count: " + causes.size().toString()
echo "causes text : " + causes.toString()
}
for(cause in causes) {
// echo cause
if (cause._class.toString().contains("UpstreamCause")) {
return "JOB/" + cause.upstreamProject
} else {
return cause.toString()
}
}
}
これを使用するには、「buildCause.groovy」という名前のファイルのライブラリに配置します。次に、Jenkinsfile の上部にあるライブラリを参照します。
library identifier: 'lib@master', retriever: modernSCM(
[$class: 'GitSCMSource', remote: '<LIBRARY_REPO_URL>',
credentialsId: '<LIBRARY_REPO_CRED_ID', includes: '*'])
次に、パイプライン内で必要に応じて呼び出すことができます。
def cause=buildCause()
echo cause
if (!cause.contains('JOB/')) {
echo "started by user"
} else {
echo "triggered by job"
}