読者です 読者をやめる 読者になる 読者になる

GeekFactory

int128.hatenablog.com

Jenkins MultibranchでPull Requestをビルド

jenkins CI

JenkinsのMultibranch Pipelineを利用してPull Requestをビルドしたい場合、ジョブをどのように設定すべきか調べてみました。

Branch SourcesでGitHub *1 を追加すると、以下を選択できます。

  • Build origin branches
  • Build origin branches also filed as PRs
  • Build origin PRs (merged with base branch)
  • Build origin PRs (unmerged head)
  • Build fork PRs (merged with base branch)
  • Build fork PRs (unmerged head)

デフォルトの設定

デフォルトでは以下が選択されています。

  • Build origin branches
  • Build origin branches also filed as PRs
  • Build fork PRs (merged with base branch)

この場合、以下の振る舞いになります。

  • ブランチがpushされたら、ブランチをビルドする。
  • 同一リポジトリでPull Requestが作成されても何もしない。
  • フォークリポジトリからPull Requestを受けた場合は、ベースブランチとマージした上でビルドを行う。(最新版にマージしてビルド)

特に要件がなければ、この振る舞いで問題ないでしょう。

ベースブランチとマージした上でビルドしたい

Pull Requestが作成された場合にベースブランチとマージした上でビルドを行うには、以下を有効にします。

  • Build origin PRs (merged with base branch)
  • Build fork PRs (merged with base branch)

これらを有効にすると、Pull Requestはちゃんとビルドできたけどmasterにマージしたらビルドが失敗した、といったことを予防できます。

ビルド時にPull Requestに関する情報を取得したい

ビルド時にPull Request Numberなどを取得したい場合、以下のいずれかを有効にします。

  • Build origin PRs (merged with base branch)
  • Build origin PRs (unmerged head)

以下の環境変数でPull Requestに関する情報が取得できるようになります。

Key Value
BRANCH_NAME Pull Request Number PR-6
CHANGE_ID Pull Request Number 6
CHANGE_URL Pull RequestのURL
CHANGE_TITLE Pull Requestのタイトル
CHANGE_AUTHOR Pull Requestの作成者
CHANGE_AUTHOR_DISPLAY_NAME Pull Requestの作成者
CHANGE_AUTHOR_EMAIL Pull Requestの作成者
CHANGE_TARGET ベースブランチ master

ビルド時に静的解析を行い、Pull Requestにコメントを付けるといった場合に活用できます。

ただし、ブランチのビルドとPull Requestのビルドが両方とも実行されるため、CIの所要時間が2倍になります。通常のテストはブランチのビルドで行い、Pull Requestにコメントするといった特殊な要件のみPull Requestのビルドで行うとよいと思います。

*1:GitBucketでも使えます