JenkinsプラグインのGitHub pull request builder pluginを使ってみる
現在、GitHubのPull Requestでコードレビューし、問題なければマージするというフローで開発しているのですが、
コードは問題なさそうなのでマージしてみると、specが落ちている・・といったことがありました。
そこで、Pull Requestされた時点でそれをマージしspecを実行してくれる、そしてその結果を通知してくれる
といったことが自動でできれば良いなと考えていました。
そこで発見したのがGitHub pull request builder pluginというJenkinsのプラグインです。
このプラグインは、以下のようなことをやってくれます。
- Pull Requestされた(またはそのPull Requestにコミットを積み重ねた)時にそれを検知し、自動でマージしビルドしてくれる
(実際はcrontabで設定したタイミングで)
- GitHubのPull Requestページに、その結果を反映してくれる(ビルドに成功したとか、失敗したとか)
- GitHubのPull Requestページに、設定しているフレーズをコメントすると再ビルドしてくれる
設定
若干設定に戸惑いましたが、以下の流れでうまくいきました。
詳細はGitHub pull request builder plugin - Jenkins - Jenkins Wikiをご参照ください。
- 事前準備
-
- 対象リポジトリのコラボレータにボットユーザを追加する
- プラグインをインストールする
- Jenkinsの全体設定でGitHub pull request builderの設定を行う
-
- Jenkinsの管理 -> システムの設定 -> "Github pull requests builder" セクションへ
-
- すべてのジョブに対するadminのGitHubユーザを登録する("Admin list" フィールド)
(ここで登録したユーザが各ジョブで自動でadminとなる。各ジョブで変更することも可能)
- すべてのジョブに対するadminのGitHubユーザを登録する("Admin list" フィールド)
-
- 高度な設定から
-
-
- crontabを設定する("Crontab line" フィールド)
デフォルトは "*/5 * * * *" だったような・・・
- crontabを設定する("Crontab line" フィールド)
-
- ジョブの設定を行う
-
- 新しいジョブを作成する
-
- "GitHub project" にURLを設定する(e.g.:"https://github.com/username/repository_name")
-
- "ソースコード管理システム" (SCM) をGitに設定する
-
- "Repositories -> Repository URL" を設定する(e.g.:"git@github.com:username/repository_name.git")
-
- 高度な設定から
-
-
- "Repositories -> Refspec" に次の値を設定する
-
+refs/pull/*:refs/remotes/origin/pr/*
-
- "Branches to build -> Branch Specifier" に次の値を設定する
${sha1}
-
- "ビルド・トリガ" セクションの "Github pull requests builder" にチェックを入れる
-
- adminのユーザを設定する("Admin list" フィールド)
Jenkinsの全体の設定で登録したadminがデフォルトで入る(たぶん・・・)
- adminのユーザを設定する("Admin list" フィールド)
-
- 高度な設定から
-
-
- crontabを設定する("Crontab line" フィールド)
Jenkinsの全体の設定で登録したcrontabがデフォルトで入る
- crontabを設定する("Crontab line" フィールド)
-
-
-
- whitelistを登録する("White list" フィールド)
-
結果
上記の設定を行った後、Pull Requestを出してみてください。
crontabに設定したタイミングでPull Requestを検知し、ビルドを実行してくれるはずです。
GitHubのPull Requestページは以下のようになります。
- ビルド中
- ビルドが成功した場合
- ビルドが失敗した場合
- 各コミットにグリーン、レッドマークがつく
ビルドのステータスによって色分けされ、とても分かりやすいですね^^
これにより、Pull Requestのビルド結果をマージする前に知ることができ、冒頭で書いたような問題が解消されました。
Pull Requestをトリガーにして何かをするという場合、とても良いプラグインだと思います。
後は結果をIRC等で通知しても面白そうですね。
注意点とフレーズについて
Pull Requestを出したユーザがadminまたはwhitelistに登録されていない場合は、自動でビルドされません。
この時、ボットが "Can one of the admins verify this patch?" とコメントします。
adminユーザがビルドして良いと判断したとき、 下記2つのどちらかのフレーズをコメントし、ビルドを実行します。
(adminユーザ以外がこの2つのフレーズをコメントしても動きません)
- ok to test
Pull Requestがテストされるのを許可し、ビルドを実行する
- add to whitelist
whitelistにPull Requestの作成者を追加、Pull Requestがテストされるのを許可し、ビルドを実行する
再度ビルドを実行したい場合、下記フレーズをコメントすれば、再ビルドしてくれます。
(これはadminユーザまたはwhitelistに登録されたユーザが実行できます)
- test this please
再度ビルドを実行する
whitelist周りの設定が煩わしい場合は、ジョブの設定の段階でwhitelistを登録しておくと良いと思います。
備考
Jenkins1.442からは、プラグインを再起動しないでインストールできるようになりましたが、
今回Github pull requests builder pluginの設定を行う際、それができずエラーとなってしまいました。
原因はPersona Pluginによるものでした。Jenkinsにおいて画像を扱うプラグインのようです。
これをインストールしていると「再起動せずにインストール」ができません。
この現象が問題となる場合は、Persona Pluginを外した方がいいかもしれませんね。