Pull Request Builder PluginをJenkinsに導入する

  • 59
    いいね
  • 0
    コメント

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プラグインの設定を行う

  1. Jenkinsの「Jenkinsの管理」から「システム設定」を開き、GitHub pull requests builder節を開きます。
  2. GitHub Enterpriseを利用している場合は、「GitHub server api URL」を適切なURLに変更してください。
  3. botアカウントのアクセストークンを設定します。 GitHub上で発行することもできますが、ghprbの設定から発行したほうが確実です。 GitHub pull requests builder の 高度な設定 を開くと、一番下に username と password があります。そこにbotアカウントを入力し、「Create Access Token」を押してください。アカウントが間違っていなければ、アクセストークンが発行されます。
  4. 「Admins list」にbotアカウントを追加します。

3. Jobを作成する

pull requestを受け付けて実行するJobを作成します。

  1. Jobを作成する。
  2. "GitHub project"フィールドに対象のリポジトリのURLを記述する
  3. Git SCMを選択する(Multi RepositoryでもGitリポジトリならOK)
  4. Repository URLにGitHubのリポジトリURLを入力
  5. 「高度な設定」を開き、「Refspec」に「 +refs/pull/:refs/remotes/origin/pr/ 」と入力する
  6. 「Branch Specifier」に「 ${sha1} 」と入力する
  7. 「ビルド・トリガ」の「Github pull requests builder」にチェックを入れる
  8. 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してくださると僕も助かります。