Posted at

JenkinsのPipelineでSVNのChangesが二重に記録される問題と対処法

More than 1 year has passed since last update.


状況

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ディレクティブの最初にcheckoutchangelog:false指定で実行

デフォルトのチェックアウト処理は細かい設定ができないので、それをskipして自前でチェックアウトするように設定する。checkoutの引数についてはscm変数が使えるのでそれを使うとシンプルに書ける。

pipeline {

agent any

options {
skipDefaultCheckout()
}

stages {
stage('checkout') {
checkout changelog: false, scm: scm
}

stage('build') {
sh './gradlew build'
}

// omitted...
}
}