Pull Request Builder Pluginとは?
Jenkins Pull Request Builder Plugin(以下ghprb)とは、GitHubの指定したリポジトリにpull requestが作成されると、予め設定しておいたJobを実行し、実行結果をGitHubに通知し、記録してくれるプラグインです。
pull requestを作成すると導入すると、下記の問題を回避できるでしょう。
- 間違えてコンパイルエラーが起こるコードをpushしてしまった
- テストが失敗するコードをpushしてしまった
そもそも「上記の問題が起きるコードなんか糞だ!pushするんじゃないよ!」という意見はこれまでもありました。しかし、僕らは人間です。間違いを犯すことがあるのが人です。
例えば、pull requestは、コードレビューの場面でとても役に立つ便利なもので、いろいろ指摘があったりしたとしましょう。GitHub上のエディタはとても便利なので、その場で修正してみたら、コンパイルエラーが!みたいな事故が起きないとも限りません。
そういう場面で、Jenkinsさんが、そっと「このコミットはコンパイルエラーが起きますよ?修正しておいてくださいね。」と教えてくれるのです。さすが執事さま!
導入方法
このプラグイン、便利な反面、少々導入が煩雑です。ここでは導入するときのポイントをわかりやすく解説します。
a. GitHubでの設定
1. GitHubにbot用のアカウントを追加する
ご自身のアカウントをJenkinsに設定してもよいです。しかし、ghprbがGitHubに設定したアカウントでコメントをしていたりするので、別途bot用アカウントがを用意したほうがよいでしょう。
2. 監視対象のリポジトリのContributorに追加する
ghprbがGitHubにアクセスするアカウントを対象のContributorとして追加します。
Organizationのリポジトリの場合は、チームを作成することになると思います。必ず作成したチームに Write Access 権限を与えてください。 Write Access 権限がないと、Jobの実行結果などをpull requestに記録できません。
b. Jenkinsでの設定
1. 「アップデートセンター」からGitHub Pull Request Builderをインストールする
Jenkinsのプラグインマネージャからインストールします。プラグインの名前は「GitHub Pull Request Builder」です。
2. 「システムの設定」にてGitHub pull request builderプラグインの設定を行う
- Jenkinsの「Jenkinsの管理」から「システム設定」を開き、GitHub pull requests builder節を開きます。
- GitHub Enterpriseを利用している場合は、「GitHub server api URL」を適切なURLに変更してください。
- botアカウントのアクセストークンを設定します。 GitHub上で発行することもできますが、ghprbの設定から発行したほうが確実です。 GitHub pull requests builder の 高度な設定 を開くと、一番下に username と password があります。そこにbotアカウントを入力し、「Create Access Token」を押してください。アカウントが間違っていなければ、アクセストークンが発行されます。
- 「Admins list」にbotアカウントを追加します。
3. Jobを作成する
pull requestを受け付けて実行するJobを作成します。
- Jobを作成する。
- "GitHub project"フィールドに対象のリポジトリのURLを記述する
- Git SCMを選択する(Multi RepositoryでもGitリポジトリならOK)
- Repository URLにGitHubのリポジトリURLを入力
- 「高度な設定」を開き、「Refspec」に「 +refs/pull/*:refs/remotes/origin/pr/* 」と入力する
- 「Branch Specifier」に「 ${sha1} 」と入力する
- 「ビルド・トリガ」の「Github pull requests builder」にチェックを入れる
- whitelistにあるユーザーのpull requestのみ自動的にビルドされる。そのため、予めユーザーを追加しておくか、Organizationで利用している場合は「List of organisations. Their members will be whitelisted.」に対象のorganizatioを加える。
これで設定は完了です。以降設定したリポジトリにpull requestが作成されると自動でビルドが行われるようになるでしょう。なお、 pull request対象のブランチがpushで更新されても、ここで設定したJobが実行されます。
FAQ
Q. 既存のpull requestを対象にするには?
A. ok to testとコメントしてください。
Q. botアカウントのコメントがうっとおしいです。なんとかなりませんか?
A1. botアカウントがリポジトリにWrite Access権限がないからです。設定してあげてください。設定するとコメントはおとなしくなると思います。
A2. システムの設定で「Published Jenkins URL」にURLが設定されているとghbprが色々とコメントします。逆に設定されていないとコメントが減ります。
Q. ghprbからのコメントを日本語化したいです。できませんか?
A. 公式ドキュメントや設定を見る限り、できそうな感じです。しかし設定してみましたが変わりませんでした。時間があるときにコードを追いかけてみて、pull requestしてくださると僕も助かります。