風邪の治りが遅くなって、徐々に年齢を感じている中村です。こんにちは。
今日は、先日リリースしたプルリクエスト機能に対して、Jenkinsのビルド結果をコメントできるようにJenkins Backlog Pluginをバージョンアップしたので、その連携方法について紹介します。
実現したいこと:Jenkinsのビルド結果をプルリクエストに通知
プルリクエストが提供されて、コードレビューは格段にやりやすくなりました。ただせっかくならば、プルリクエストで修正されたコードに対して、CIの結果も確認したくなりますよね。机上レビューでは問題なさそうに見えても、CIで引っかかってるコードをそのままメインブランチにマージするのは問題ですし。
そう、つまりこういうのを実現したいのです。
- Backlogでプルリクエストを作る or プルリクエスト上のブランチを更新する
- Jenkinsで該当のブランチに対して自動でビルドを行う
- ビルド結果を、該当のプルリクエストにコメントする
3 のプルリクエストへのコメントは、実際には以下のようにコメントされます。
Jenkins側の設定
それでは、上記を実現するための設定を見ていきましょう。なお、Backlog Pluginは1.11以降をご利用ください。
Jenkins側では、設定が必要な箇所が4箇所あります。まずは、Backlog Plugin全体に関わる設定を、プロジェクトの設定画面の上部(”プロジェクトの高度なオプション”より上)で設定してください。今回関係するのは、以下の2項目ですので、他の項目は設定しなくとも大丈夫です。
- Backlog URL : プロジェクトホームのURL ( https://<スペースID>.backlog.jp/projects/<プロジェクトキー> )
- APIキー : 個人設定>API より取得
続いて、プルリクエスト対象のブランチを特定・取得できるようにします。設定箇所は、”ソースコード管理 > Git > Repositories”です。それぞれ、以下のように設定しましょう。
- 高度な設定 > Refspec : “+refs/pull/*:refs/remotes/origin/pr/*”
- Branches to build > Branch Specifier : “**” or 空
ブランチを指定したら、ビルド・トリガを設定します。実際には、後述するWebhookでビルドを起動するため、スケジュールの中の値は不要です(ポーリングは行いません)。
- SCMをポーリング
最後は、”ビルド後の処理”です。こちらは、単に以下の設定を追加するだけです。今のところ、オプションなどもありません。
- Backlogのプルリクエストに通知
Backlog側の設定
続いては、Backlog側の設定です。Backlog側での更新をJenkinsに通知するために、Webhookを利用します。適当なWebhookを追加し、以下のように設定してください。
- WebHook URL : “http://<Jenkinsサーバ>/git/notifyCommit?url=<GitリポジトリのURL>”
- 通知するイベント : Gitプッシュ、プルリクエストの追加
なお、指定するWebHook URLなどは、以前のブログ:サルでもわかるGit Webフック入門で紹介したやり方と根本的には変わりません。ただ、Gitリポジトリに付属しているWebフックだと、”プルリクエストの追加”というイベントを取れないので、今回紹介した方を利用するようにしてください(Gitリポジトリ付属のWebフックは、push時の詳細な情報も取れるのですが、今回のJenkins連携の点だけだと詳細情報は不要です)。
ここまで設定できたら、準備完了です。プルリクエストを追加したときやブランチを更新したときに、正しくJenkins上でビルド実行され、そのビルド結果がプルリクエストにコメントとして反映されていることを確認してください。
なお、Jenkins側の設定で、Branch Specifier を “**” で指定した後の初回ビルド実行時に、既存のブランチを全て対象としてビルドが実行されるようです。一度全ブランチがビルドされたら、以降は更新されたブランチのみ対象となるのですが、気になるようでしたら初回ビルド時は実際のビルド処理をコメントアウトしておくといいでしょう。
追加設定:ブランチを指定して再ビルド
ソースコード上の修正はなくとも、ソースコード以外の外部環境の影響でビルド・テストが失敗することもあるでしょう。その場合、ソースコードはそのままでもう一度再ビルドしたくなることと思います。
そのようなときは、ビルドのパラメータ化でブランチを指定できるようにしましょう。パラメータを設定しつつ、GitのBranch Specifierの設定では指定されたブランチを利用するように修正します。手動ビルドする際にパラメータとしてブランチが指定されればそのブランチを利用し、自動ビルドでパラメータが指定されない場合は最新のブランチを対象となります。
合わせて、GitのAdditional Behaviours に “Force polling using workspace”を追加してください。このオプションがないと、更新対象のブランチとして認識されないようです(詳細な条件までは調べきれていません)。
最後に、ここで紹介した「Jenkinsのビルド結果をプルリクエストに通知」を含め、ヌーラボでのCIに関する取り組みをまとめた資料を紹介します。こちらは、先日のSeasar Conference 2015というイベントで使用した資料です。興味があれば目を通していただき、何かあれば遠慮なくこちらのブログのコメントもしくは@backlogappまでご質問ください。