Git
Jenkins

JenkinsのGit Pluginの設定の意味がやっとわかった

More than 1 year has passed since last update.

JenkinsでGitを使う時にはGitPluginを使うと思いますが、この設定の細かな意味がわからずにいたのですが、いい加減本腰で調べてみました。

GitPluginの設定ではビルド対象のブランチを指定します。

ここでは複数のブランチを指定できるのですが、1つのジョブで複数のブランチを指定するとどれが対象になるのでしょうか?また、ある特定のブランチを明示的にビルドするにはどうすればいいでしょうか?

Git設定

動作を調べたところ、このブランチ設定は「ビルド対象ブランチ」というよりも「更新監視対象ブランチ」と言った方がよさそうです。

実際の動作は以下のようになっているようです。


  1. ジョブが実行される

  2. Gitをfetchし、リモートブランチの状態を収集

  3. 以下の手順でビルド対象ブランチを収集する


    1. [Branches to build]の設定(対象ブランチ設定)が1つだけで、その定義(変数は展開済み)が明確なブランチ指定である(ワイルドカードや正規表現形式ではない)場合


      1. そのブランチの最新リビジョンをビルドしていなければ、ブランチ(リビジョン)を対象とする

      2. すでにビルド済みであれば、現在workspaceでチェックアウトしてあるブランチのHEADリビジョンを対象とする



    2. そうでなければ(対象ブランチ設定では1つに明確に決まらない場合)


      1. 全ブランチの中で、対象ブランチ設定にマッチし、そのリビジョンがビルドされていないものの一覧を対象とする





  4. Step.3で収集したブランチ一覧の1つを、このジョブの実行対象としてチェックアウトする

  5. Step.3のブランチ一覧が複数ある場合は、SCM更新検知トリガーを実行することで収集したブランチ1つずつをビルドするジョブを生成する

端的にいえば、以下のようです。


  • ブランチ設定が単一ブランチを明示していればそのブランチをビルド(未ビルドかどうかは不問)

  • 複数ブランチを対象にしていればそれらのブランチの中で未ビルドのブランチ全てをビルド


    • 未ビルドのブランチがなければ、workspaceにチェックアウトしているブランチをビルド



この動作を踏まえてかんがえると、基本的には1つのブランチが対象になるようにした方がよさそうです。その上で、変数を使って動的にブランチを変えるようにした方がよさそうです。

特に、例えば[ビルド・トリガ]の[定期的に実行]でmasterブランチを毎日ビルドさせたいような場合は、対象のブランチを明示する方法がないので単一ブランチ指定にしておく必要があるようです。