Gitlab Merge Request Builder PluginはGitlabのMergeRequest(以降MR)をビルドして結果をレスしてくれるJenkinsプラグインです
Travis CIとかCircle CIのGitlab + Jenkins版
以前社内で発表したことを社内Gitlabでやりたいなぁと思って探したら見つかりました
- Gitlab Merge Request Builder Plugin - Jenkins - Jenkins Wiki
- timols/jenkins-gitlab-merge-request-builder-plugin
- Jenkins/Gitlab Merge Request Builder PluginのREADME訳 - 自由課題
便利そうなんだけど図入りの説明がなかったので(主に社内用に)導入方法まとめています。
forkされたリポジトリからのMRは設定手順増えるので割愛。(だいたいアプリのリポジトリ内にfeatureブランチ作ってるMRやり取りすることが多いので)
1. インストール
Jenkinsの管理 -> プラグインの管理 -> 利用可能で検索
2. プラグイン全般の設定
Jenkinsの管理 -> システムの設定
説明
- Jenkins Username, Jenkins API Token
- MRにコメントするアカウント
- このアカウントが実際にプロジェクトにJOINしていないとダメ
- ボットアカウントをJOINさせる場合はGuestでOK
- MRにコメントするアカウント
- Crontab line
- Default success message, Default unstable message, Default failure message
- ビルド終了後Gitlabに通知される時のメッセージのフォーマット
- markdownや絵文字使えるんだけどデカイ画像を貼り付けるとフィードを圧迫するので自重した方がいいと思うw
悪い例
良い例
:broken_heart:
でテストが落ちた様子を、 :green_heart:
でテストが通った様子を表しています。
Jenkinsの管理 -> グローバルセキュリティの設定
マークアップ記法をSafe HTMLにする
公式だと「Raw HTML.」のままだったので分からずちょっとハマった
3. ジョブごとの設定(MRをビルドするためのジョブを追加)
このプラグインを使うと
- 既存のジョブに設定追加
- MRをビルドするためのジョブを追加
の2通りのやり方があるけど2でいきます。(MRをビルドするブランチは途中がレッドでも最終的にグリーンになっていればいいけど、masterやdevelopをビルドするジョブは常にグリーンになっててほしいので)
既存ジョブをコピー
MRビルドに不要な処理があれば削除する(ドキュメント生成やデプロイなど)
ジョブ設定
ソースコードの管理
「Branches to build」(mergeする時の元branch)を origin/${gitlabSourceBranch}
にする
「Additional Behaviours」で 「Merge before build」を追加して
- Name of repository:
origin
- Branch to merge to
${gitlabTargetBranch}
(mergeする時のマージ対象のbranch)
にする
ビルド・トリガ
Gitlab Merge Requests BuilderにGitlab上のパスを追加 (Host URL以降)
その他
チャットに通知するメッセージにビルドしたbranch名を含めたければ $GIT_BRANCH
を使う
Building a software project - Jenkins - Jenkins Wiki
注意点
- 1つのジョブで複数のbranchをテストするため、前のビルドの影響をうけないようにする必要がある
- 例)誰かがMRでカラム削除してると同時進行しているMRでカラムがなくてエラーになるので毎回
rake db:migrate:reset
するのがいいと思う
- 例)誰かがMRでカラム削除してると同時進行しているMRでカラムがなくてエラーになるので毎回
- 1つのジョブで順番に複数のMRをビルドするため、1つの辺りのビルド時間とMRの量が多くなると捌ききれなくなる
カーチャン J( 'ー`)し 連携
弊社のGitlabにはカーチャン J( 'ー`)し がいるので連携してみた
カーチャン J( 'ー`)しの由来はこちら
https://twitter.com/chiastolite/status/448026802099736576
カーチャン連携してみたらこんな感じ
1週間運用してみたけど、テストが通ってることを確認してmergeすると安心感があります。
「Build triggered.」でもカーチャンからメールが飛んでちょっとうざかったので後でOFFにしています。(最初に動作確認してしまえばいらない気がする)
Github + Jenkinsは?
GitHub Pull Request Builder Plugin があるっぽい
説明見る感じ使い方はだいたい同じ? *2