GitBucket側の公式のリファレンス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の設定
-
**[Jenkins]**プラグインマネージャーから
GitHub Pull Request Builder
をインストールする(確認したバージョンは1.29)。
-
[Gitbucket] root/testのプロジェクトのService HooksでWebHook URL、jenkinsのプラグインのURLとして
http://localhost:9090/ghprbhook/
を登録する。
-
**[Gitbucket]**jenkinsbotでログインして
http://localhost:8080/jenkinsbot/_application
へアクセスしアクセスキーを払い出し、アクセスキーを保存しておく。
-
**[Jenkins]**jenkinsの管理->システムの設定->GitHub Pull Request Builderで、
GitHub Server API URL
にhttp://localhost:8080/api/v3
を設定。 -
**[Jenkins]**追加をクリックし、種類で
sercret text
を選択。secretに先ほどのgitbucketで生成したAPIキーを張りつけ。説明に適当に記入して追加をクリック。
Test Credentials...
をクリックし、Test basic connection to GitHub
をチェック。Repository owner/name
に検証したいroot/test
を設定しConnect to API
で疎通確認をし以下のようなメッセージが表示される事を確認。
-
**[Jenkins]**任意の新規ジョブを作成し、
GitHub project
にgitbucketのURLにhttp://localost:8080/root/test
を設定。
- Repository URL -
http://localhost:8080/git/root/test.git
- Credentials -
指定無し
- Refspec(高度な設定から遷移) -
+refs/pull/*:refs/remotes/origin/pr/*
- Branches to build -
${sha1}
- GitHub API credentials - Jenkinsの設定で設定した通りになっている事を確認
- Admin list - とりあえずroot
- 保存
動作確認(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").
とあるように、`パラメーター付きビルドを利用する事で動作確認可能ですので、この方法で動作確認を取ります。
- GitBucket側で既にPullRequest#1が存在している前提とします。
- ジョブの設定->
ビルドのパラメーター化
をチェックし、テキストパラメーターにsha1
を追加します。
- 保存後、パラメーター付きビルドをクリックし、値に
origin/pr/1/head
を設定しビルドをクリックします。
- ログを確認すると
Finished: SUCCESS
が表示されます。
動作確認(Gitbucketとjenkinsの連携)
- rootユーザーでGitbucketにログイン
- Gitbucketで新規にブランチを作成し、Pullrequestを作成
- PullRequestを作成したタイミングでJenkins側でビルド開始される事を確認
- jenkinsのビルド完了後、Gitbucketにマークされる事を確認。
実際の画像イメージ
※適当に取ったので雑です。
- GitbucketのPullRequest一覧での表示され方
- PullRequest詳細の反映結果(失敗ケース)
- PullRequest詳細の反映結果(成功ケース)
- Jenkins側の実行ログ
- Jenkins側のビルド詳細(成功ケース)
- Jenkins側のビルド詳細(失敗ケース)
結論
GitbucketのGithubライクな対応っぷりがすげぇ。