gitbucketとjenkinsをGitHubPullRequestBuilderを使って連携する


GitBucket側の公式のリファレンス[Setup Jenkins GitHub pull request builder plugin
](https://github.com/takezoe/gitbucket/wiki/Setup-Jenkins-GitHub-pull-request-builder-plugin)に従って、作業します。  
結構混乱したので、備忘録として画像付きでメモを残します。

## 前提条件
gitbucketとjenkinsはインストール済みで以下のような構成で確認しました。

| アプリケーション | バージョン | URL | 備考 |
|---------------|----------|------|-----|
| jenkins       | 1.632    | http://localhost:9090/ | `java -jar jenkins.war --httpPort=9090`で起動 |
| gitbucket     | 3.7      | http://localhost:8080/ | `java -jar gitbucket.war`で起動 |

## jenkinsとgitbucketの設定

1. **[Jenkins]**プラグインマネージャーから`GitHub Pull Request Builder`をインストールする(確認したバージョンは1.29)。
![kobito.1444233290.191151.png](https://qiita-image-store.s3.amazonaws.com/0/11214/ad17083b-2da1-72e8-1091-a6fce0943a95.png "kobito.1444233290.191151.png")
1. **[Gitbucket]**gitbucketにプロジェクトを`test`で作成する
![kobito.1444234071.947369.png](https://qiita-image-store.s3.amazonaws.com/0/11214/426178d6-9193-e34f-c64b-04817f7ee167.png "kobito.1444234071.947369.png")
1. **[Gitbucket]**gitbucketにボット用のユーザーとしてjenkinsbotを作成する
![kobito.1444234033.514404.png](https://qiita-image-store.s3.amazonaws.com/0/11214/217fa420-bbe4-a851-7f71-3cb4606c73b7.png "kobito.1444234033.514404.png")
1. **[Gitbucket]**jenkinsbotユーザーをjenkinsから実行したい対象プロジェクトに追加する。
![kobito.1444234121.323415.png](https://qiita-image-store.s3.amazonaws.com/0/11214/1e5671a1-9f49-b9a3-a39e-3ee26294f7cd.png "kobito.1444234121.323415.png")
1. **[Gitbucket]** root/testのプロジェクトのService HooksでWebHook URL、jenkinsのプラグインのURLとして`http://localhost:9090/ghprbhook/`を登録する。
![kobito.1444525500.052173.png](https://qiita-image-store.s3.amazonaws.com/0/11214/0ec0dbde-8838-9731-4a06-51ec0f2eb931.png "kobito.1444525500.052173.png")
1. **[Gitbucket]**jenkinsbotでログインして`http://localhost:8080/jenkinsbot/_application`へアクセスしアクセスキーを払い出し、アクセスキーを保存しておく。
![kobito.1444525669.477556.png](https://qiita-image-store.s3.amazonaws.com/0/11214/3ce3038e-18d2-e113-e4a3-0b09ff7674f0.png "kobito.1444525669.477556.png")
![kobito.1444525696.987532.png](https://qiita-image-store.s3.amazonaws.com/0/11214/af61950e-7022-6d56-dbcf-10a80662dd80.png "kobito.1444525696.987532.png")
1. **[Jenkins]**jenkinsの管理->システムの設定->GitHub Pull Request Builderで、`GitHub Server API URL`に`http://localhost:8080/api/v3` を設定。
1. **[Jenkins]**追加をクリックし、種類で`sercret text`を選択。secretに先ほどのgitbucketで生成したAPIキーを張りつけ。説明に適当に記入して追加をクリック。
![kobito.1444536438.553883.png](https://qiita-image-store.s3.amazonaws.com/0/11214/4bd9bd2b-b077-ad5f-50b3-cbf431df91de.png "kobito.1444536438.553883.png")
`Test Credentials...`をクリックし、`Test basic connection to GitHub`をチェック。`Repository owner/name`に検証したい`root/test`を設定し`Connect to API`で疎通確認をし以下のようなメッセージが表示される事を確認。
![kobito.1444536666.531689.png](https://qiita-image-store.s3.amazonaws.com/0/11214/b4cc9dd8-2854-f821-49fc-289b624a2ab8.png "kobito.1444536666.531689.png")

1. **[Jenkins]**任意の新規ジョブを作成し、`GitHub project`にgitbucketのURLに`http://localost:8080/root/test`を設定。
![kobito.1444315370.287737.png](https://qiita-image-store.s3.amazonaws.com/0/11214/f0414404-b026-3a4f-f9e8-82d7786b77ca.png "kobito.1444315370.287737.png")
1. **[Jenkins]**ソースコード管理でGitを選択し、以下のようにそれぞれ設定。
![kobito.1444536985.217013.png](https://qiita-image-store.s3.amazonaws.com/0/11214/1daf18f8-6ff5-559f-c897-711d65f05298.png "kobito.1444536985.217013.png")
  * Repository URL - `http://localhost:8080/git/root/test.git`
  * Credentials - `指定無し`
  * Refspec(高度な設定から遷移) - `+refs/pull/*:refs/remotes/origin/pr/*`
  * Branches to build	 - `${sha1}`
1. **[Jenkins]**ビルド・トリガの設定。`GitHub Pull Request Builder`をチェックし、以下の様に設定。
![kobito.1444537221.401225.png](https://qiita-image-store.s3.amazonaws.com/0/11214/fb3552f7-68f6-65ae-e554-0d827a951f60.png "kobito.1444537221.401225.png")
  * GitHub API credentials - Jenkinsの設定で設定した通りになっている事を確認
  * Admin list - とりあえずroot
1. 保存

## 動作確認(Jenkins単体)
GitHub Pull Request Builderは単純にビルドを実行しても動作確認する事は出来ません。

> If you want to manually build the job, in the job setting check "This build is parameterized" and add string parameter named "sha1". When starting build give the "sha1" parameter commit id you want to build or refname (eg: "origin/pr/9/head").

とあるように、`パラメーター付きビルドを利用する事で動作確認可能ですので、この方法で動作確認を取ります。

1. GitBucket側で既にPullRequest#1が存在している前提とします。
1. ジョブの設定->`ビルドのパラメーター化`をチェックし、テキストパラメーターに`sha1`を追加します。
![kobito.1444540530.424137.png](https://qiita-image-store.s3.amazonaws.com/0/11214/23b5d3e7-1239-0f3b-11e1-faac4826d226.png "kobito.1444540530.424137.png")
1. 保存後、パラメーター付きビルドをクリックし、値に`origin/pr/1/head`を設定しビルドをクリックします。
![kobito.1444540663.692366.png](https://qiita-image-store.s3.amazonaws.com/0/11214/af5095c7-cd24-69b8-9a6a-0d0d6c79f18f.png "kobito.1444540663.692366.png")
1. ログを確認すると`Finished: SUCCESS`が表示されます。

## 動作確認(Gitbucketとjenkinsの連携)
1. rootユーザーでGitbucketにログイン
1. Gitbucketで新規にブランチを作成し、Pullrequestを作成
1. PullRequestを作成したタイミングでJenkins側でビルド開始される事を確認
1. jenkinsのビルド完了後、Gitbucketにマークされる事を確認。

### 実際の画像イメージ

*※適当に取ったので雑です。*

* GitbucketのPullRequest一覧での表示され方
![kobito.1444541491.250767.png](https://qiita-image-store.s3.amazonaws.com/0/11214/bdb87602-4469-2866-6db6-285c974eb422.png "kobito.1444541491.250767.png")
* PullRequest詳細の反映結果(失敗ケース)
![kobito.1444541515.401583.png](https://qiita-image-store.s3.amazonaws.com/0/11214/15c8d86b-9f6f-1497-419e-83a534b2f26a.png "kobito.1444541515.401583.png")
* PullRequest詳細の反映結果(成功ケース)
![kobito.1444541532.923886.png](https://qiita-image-store.s3.amazonaws.com/0/11214/f734c445-6d32-ab06-37ce-b1b79d40b315.png "kobito.1444541532.923886.png")
* Jenkins側の実行ログ
![kobito.1444541590.784264.png](https://qiita-image-store.s3.amazonaws.com/0/11214/af1537d8-9016-d97e-b235-c97e93af99d1.png "kobito.1444541590.784264.png")
* Jenkins側のビルド詳細(成功ケース)
![kobito.1444541672.357503.png](https://qiita-image-store.s3.amazonaws.com/0/11214/07a76bc2-40ef-cf20-7db9-fdff8eb907b4.png "kobito.1444541672.357503.png")
* Jenkins側のビルド詳細(失敗ケース)
![kobito.1444541685.164323.png](https://qiita-image-store.s3.amazonaws.com/0/11214/f50510e5-2a7d-fd07-f0e8-093d41739a07.png "kobito.1444541685.164323.png")


## 結論
GitbucketのGithubライクな対応っぷりがすげぇ。