状況
JenkinsのPipelineを下記設定で作成してジョブを実行すると、変更履歴が1コミットに対して2つ記録されてしまう。
- Pipeline script from SCM
- SCMはSubversionを使う
- プロジェクト直下にJenkinsfileを配置
- JenkinsfileはDeclarative Pipeline構文
原因
「Pipeline script from SCM」でジョブを作成した場合、Jenkinsfile自体を更新するPipelineJobのワークスペースと、Jenkinsfileを実行するSandboxのワークスペースが別になっているっぽい。
それぞれのワークスペースでsvn update
が合計2回実行されて、そのぶん二重にChangesが記録されてしまう。
一応バグ報告は上がっているみたいだけどStatusがOPENのままなので解決していないみたい。
SCMにgitを使っている場合は発生しないのかな。
[JENKINS-38204] SVN plugin show all checkouts twice in pipeline project - Jenkins JIRA
対処法
Jenkinsfileに下記2つを設定する。
-
options
ディレクティブにskipDefaultCheckout()
の設定を追加 -
stages
ディレクティブの最初にcheckout
をchangelog:false
指定で実行
デフォルトのチェックアウト処理は細かい設定ができないので、それをskipして自前でチェックアウトするように設定する。checkout
の引数についてはscm
変数が使えるのでそれを使うとシンプルに書ける。
pipeline {
agent any
options {
skipDefaultCheckout()
}
stages {
stage('checkout') {
checkout changelog: false, scm: scm
}
stage('build') {
sh './gradlew build'
}
// omitted...
}
}