LoginSignup
1
0

More than 5 years have passed since last update.

Jenkins Multibranch Pipeline で変更がないのにビルドが実行される場合の対処法

Last updated at Posted at 2017-12-10

何回か同じことを調べている気がするので、書き出し。

環境

  • Jenkins 2.73.2 + Mercurial Plugin 2.2
  • Mercurial 4.0
  • Mercurial リポジトリに対して Jenkins で Multibranch Pipeline を実行している

事象

  • ブランチに対して何も変更コミットがないはずなのに、そのブランチに対するビルドが何回も trigger されてしまう

原因

  • Mercurial リポジトリに対して Multibranch Pipeline が scan する時の挙動は以下のような流れで動いている
    1. hg heads --template "{node} {branch}\n" でブランチとそのブランチの head コミット ID 一覧を取得する
    2. 各コミットに対して hg locate -I path:Jenkinsfile して、Jenkinsfile が存在するかチェックする
    3. head コミットが、前回 Jenkins がビルドしたブランチのコミットと違う場合、変更があったと検知してビルドを trigger する
      • 前回ビルドしたコミットは、ジョブディレクトリ内の branches/<ブランチ名を略した名前>/scm-revision-hash.xml というファイルに書かれている
  • あるブランチに対して複数の head コミットが存在する場合、↑の3. でそのブランチは常に変更があったとみなされてしまうのが原因

対処方法

  1. 同じブランチ名で head コミットが複数ないか hg heads で確認する
  2. どちらかのコミットをマージするなりクローズするなりして、double head を解消する
    • そもそも、double head を拒否するように hook を書けばいいじゃん、という話もありますが…

余談

  • Git だと double head は起こり得ない雰囲気がする
    • Mercurial はコミットごとにブランチ名が記録されるが、Git の場合はブランチはあくまでもコミットを指し示すポインタでしかないので
  • Multi-branch Pipeline のビルドが動く度に、ログが2つ出て来るとか、ビルドが2つ走っちゃうとかいう問題も別にある
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0