Jenkins MultibranchでPull Requestをビルド
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でも使えます