状況
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...
}
}