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