ブロックチェーン事業部の飯田です。
私が現在携わっているプロジェクトでは、プルリクエストを使ってコードレビューを行っています。
今回はそのプロジェクトで、プルリクエストを作成したときにテストとLintを実行するようにJenkinsと連携させたことについて書きたいと思います。
なお、メモを見て思い出しながら記事を書いたので、途中の設定が怪しい箇所がありますがご容赦ください。
環境について
弊社ではGitBucketを使っているので、GitBucketとJenkinsの連携になります。
今回使用したGitBucketとJenkinsのバージョンは以下になります。
| ツール名 | バージョン |
|---|---|
| GitBucket | 4.11.0 |
| Jenkins | 2.203 |
GitBucketやJenkinsのバージョンによっては今回記載したスクショとは違う表示になってしまう可能性があります。その場合は適宜最新の情報を参照してください。
GitBucketの設定 その1
まずはGitBucketの設定から始めます。
Jenkinsとの連携アカウントの作成
GitBucketにJenkinsからの通知を受け取るアカウントを作成します。
後述するGitHub Pull Request Builderの設定でユーザ名に.と_が使えないので注意してください。アカウントの
Personal access tokenの作成
作成したアカウントのAccount SettingsのApplicationsのGenerate new tokenで作成します。
Token descriptionに任意の名前を入れてGenerate Tokenボタンで作成されます。
tokenは作成時にしか表示されないので忘れないようにコピーして保存しておきましょう。
リポジトリの
Collaboratorsに設定
作成したアカウントを作業するリポジトリのCollaboratorsにAdminで追加してください。Branchの設定
ブランチの構成は以下のような想定で進めます。
| ブランチ名 | 用途 |
|---|---|
| master | リリース用 |
| develop | 開発環境用 |
| feature/* | 各自の開発用 |
まず、developブランチを作成して、Default branchに設定します。
そして、masterとdevelopブランチのProtected branchesでProtect this branchを選択します。
Require status checks to pass before mergingが選択肢に増えますがこれはあとから設定するのでおいておきます。
設定後は以下のような表示になっているかと思います。
5. Service Hooksの設定
最後にプルリクエスト時のJenkinsへのフックの設定をあらかじめしておきます。
Payload URLにはhttps://(your jenkins host url)/gitbucket-webhook/を指定してください。

これでいったんGitBucketの設定は終わりです。
Slackの通知設定
次にSlackで通知を受け取るためJenkins CIとGitHub Enterprise Serverを任意のチャンネルに追加しておきます。
ここではとりあえず追加しておいて、連携設定は後で行います。
Jenkinsの設定
続けてJenkinsの設定をしていきます。
GitBucketのプルリクエストとのやり取りにGitHub pull request builder pluginを使用します。
https://wiki.jenkins.io/display/JENKINS/GitHub+pull+request+builder+plugin
プラグインのインストール
以下のプラグインを入れます。- GitHub pull request builder
- GitBucket Plugin
- Slack Notification Plugin
認証情報の追加
この後の設定で使用する認証情報を追加しておきます。
メニューから認証情報→Systemと選択した画面でグローバルドメインを選択し、認証情報の追加から追加できます。
追加する認証情報は以下になります。- GitBucket Access User
- 種類 : ユーザ名とパスワード
ユーザ名とパスワードに「GitBucketの設定 その1」の1で作成した「Jenkinsとの連携アカウント」のユーザのIDとパスワードを設定する。
- 種類 : ユーザ名とパスワード
- GitBucket Access Key
- 種類 : Secret text
Secretに「GitBucketの設定 その1」の2で作成したPersonal access tokensを設定する。
- 種類 : Secret text
- Slack Integration Token
- 種類 : Secret text
- 「Slackの通知設定」で追加した
Jenkins CIアプリ設定時に取得できるトークンを設定する。
- 「Slackの通知設定」で追加した
- 種類 : Secret text
- GitBucket Access User
システムの設定
Jenkinsの管理→システムの設定から以下の各項目を設定していきます。- GitHub Pull Request Builder
- GitHub Auth
- GitHub Server API URL
GitBucketのAPIのEndpointのURLを指定します。
例)https://(your domain)/api/v3- Credentials
- 先ほど作成した認証情報の
GitBucket Access Keyを選択する。
- 先ほど作成した認証情報の
- Description
GitBucket Connection等を設定
- GitHub Server API URL
- Auto-manage webhooks
- チェックを入れておく
- GitHub Auth
- Slack
- Credential
- 先ほど作成した認証情報の
Slack Integration Tokenを選択する。
- 先ほど作成した認証情報の
- Credential
- GitHub Pull Request Builder
ジョブの作成
次にプルリクエストが作成・更新されたら起動するジョブを以下の内容で作成します。- Enter an item name
- ジョブの名前の設定
例)develop - pull request test
- ジョブの名前の設定
フリースタイル・プロジェクトのビルドを選択
- Enter an item name
ジョブの設定
ジョブの各項目の設定は以下になります。- GitBucket
- GitHub project
- 選択して
Project urlにhttps://(your domain)/{グループ名}/{リポジトリ名}/といった形式で入力する。
※GitHub Pull Request Builderプラグインの仕様なのか、https://(domain)/gitbucket/{グループ名}/{リポジトリ名}/(ドメインとグループ名の間にサブディレクトリが入っている)といったURLを入れても動作しないので注意!
- 選択して
- GitHub project
- ソースコード管理
Gitを選択- リポジトリ
- リポジトリURL
.gitの入った対象リポジトリのURLを設定
- 認証情報
GitBucket Access Userを選択
- 高度な設定
- Refspec
+refs/pull/*:refs/remotes/origin/pr/*
- Refspec
- リポジトリURL
- ビルドするブランチ
- ブランチ指定子 (空欄はすべてを指定)
${sha1}
- ブランチ指定子 (空欄はすべてを指定)
- ビルド・トリガ
GitHub Pull Request Builderを選択- GitHub API credentials
システム設定のGitHub Pull Request BuilderのGitHub AuthのDescriptionで設定した名称(例ではGitBucket Connection)を選択
- Admin list
- 認証情報の
GitBucket Access User作成時に使用したユーザIDを設定
- 認証情報の
- 高度な設定
- Crontab line
H/2 * * * *
デフォルト5分間隔なので2分間隔に変更する(任意)
- Build every pull request automatically without asking (Dangerous!).
- 選択しなくてもいいかも?
動かなかったら選択してみてください。
- 選択しなくてもいいかも?
- Crontab line
- GitHub API credentials
- ビルド
ここには実際に実行したい処理を設定してください。
私のプロジェクトではNuxt.jsを使用していたのでNode.jsとシェルスクリプトの実行を設定しました。
細かい設定は今回の記事の趣旨と離れてしまうので、また別の記事で紹介したいと思います。 - ビルド後の処理
結果を通知したいサービスの設定をしてください。
今回はSlack Notificationsの設定をしました。
- GitBucket
ここまで設定が終わったら、適当なブランチを作成してGitBucketへプッシュし、プルリクエストを作成してみましょう!
しばらくすると作成したJenkinsのジョブが動き出し、下記画像のようにステータスが表示されるようになると思います。

動かないですか?
もしかしたら、なにか設定がもれているのかもしれません……。
GitBucketの設定 その2
もし正常にJenkinsのジョブが動くことの確認ができたら、次はまたGitBucketの設定の続きを行います。
Require status checks to pass before merging
最初の設定時にスキップした箇所です。この設定を行うことでJenkinsでのチェックが通らないとマージできなくすることが可能になります。
プルリクエストでJenkinsのジョブが動いていたら、オレンジ色の背景のメッセージが消えて以下画像のようになっているかと思います。
選択すると下記画像のように選択肢が増えますので、defaultを選択してSave changesのボタンを押して完了です。
※Include administratorsを選択すると管理者でもマージできなくすることができます。
上記設定をすると下記画像のようにチェックが通らないとMerge pull requestのボタンが押せないようになります!
Service Hooksの設定
最後にGitBucketの操作がSlackへ通知されるように設定をします。
Payload URLには「Slackの通知設定」で追加したGitHub Enterprise ServerのWebhook URLを指定してください。
まとめ
少し長くなりましたが、以上で設定は終わりになります。
プルリクエストのレビュー前にテストやLintのチェックを通すことで、レビューで本来見るべき箇所に集中できるのでおすすめです!
また、コードレビューの方法に関してはまだ模索中なので、まとまったら記事にしていきたいと思います。