Help us understand the problem. What is going on with this article?

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

More than 3 years have 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...
    }
}

clomie
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away