LoginSignup
29
27

More than 5 years have passed since last update.

Gitlab Merge Request Builderを適用する

Last updated at Posted at 2015-08-26

Gitlab Merge Request Builder Pluginは、GitlabにMergeRequestが作られたことを検出してジョブを実行するJenkinsプラグインです。

MRがマージされた後のソースコードをワークスペースに作成してからビルド(テスト)を実行できるため、マージ元ブランチだけに行うよりも精度の高いCIができます。

また、該当のMRのコメント欄に結果を投稿してくれる機能もあります。(このへんの魅力は後述のくりにっきさんを見るとわかりやすいです)

Reference

この記事で説明しないこと

くりにっきさんで説明されていることは極力説明しません。

本記事では、くりにっきさんと本家のドキュメントを見比べながら試行した内容について説明します。

書き終わってから気づいたこと

中途半端に日本語化されたJenkinsを元に書いたので、フル英語のJenkinsをお使いの皆様は適宜読み替えてください。ごめんなさい。

対象システム

JenkinsとGitLab両方に設定を行います。

このドキュメント内では

  • Jenkins内でMR処理のために作成したジョブのことを「ジョブX」
  • GitLab内でMRを作成するプロジェクトのことを「プロジェクトX」
    • GroupX/ProjectXの場合も

と呼称します。

バージョン

  • Jenkins 1.626
  • Gitlab: 7.13.4
  • Gitlab Merge Request Builder: 1.2.2

前提条件

  1. プロジェクトXのVisibility LevelがInternalまたはPublicになっていること
    • Privateなリポジトリが相手だと動き出しませんでした。
  2. ジョブXでGitLabからソースコードをフェッチしてくるときの認証は、GitLabのDeployKeyの仕組みを使って行われていること
    • まあセキュアならなんでもいいとは思います
  3. JenkinsへのGitlab Merge Request Builder Pluginの導入は済んでいること
  4. Jenkinsのシステム設定画面で、Gitlabのホスト名の指定やアカウントやAPIキーの登録が済んでいること

プロジェクトXの設定

  1. ジョブXで使っているDeployKeyを、プロジェクトXでEnableにする
  2. Jenkinsのシステム設定で入力したGitLabアカウントを、プロジェクトXのメンバーに入れる
    • このとき、権限はGuestで構わない

以上。

ジョブXの設定

ソースコード管理

  • Git
  • Repositories
    • Repository URL: ${gitlabSourceRepository}
    • Credentials: プロジェクトAでEnableにしたやつ
    • Name: ${gitlabSourceName}
  • Branches to Build
    • Branch Specifier: refs/remotes/${gitlabSourceName}/${gitlabSourceBranch}
  • Additional Behaviors: Merge Before Build
    • Name of repository: origin
    • Branch to merge to: ${gitlabTargetBranch}
    • Merge Strategy: default
    • Fast-forward mode: --no-ff(筆者の好みです。お好きにどうぞ。)

ビルド・トリガ

  • Gitlab Merge Requests Builder
    • Gitlab Project Path: GroupX/ProjectX
    • Crontab line: H/2 * * * *(筆者の好みです。お好きにどうぞ。)

ビルド

お好きにどうぞ。

ビルド後の処理

お好きにどうぞ。

ジョブを実行する

  1. プロジェクトXにMergeRequestを作成する
  2. 最大2分待つ
  3. 1で作ったMergeRequestにビルド状況のコメントが付く
  4. ☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ

オマケ: ジョブ単体の動作確認をしたい

通常、マージリクエストを検出した上で実行されたジョブの中では、${gitlabSourceBranch}${gitlabTargetBranch}などの変数はマージリクエストから得られた情報によって解決されます。一方、任意のタイミングでビルドを実行したい場合には変数の解決ができません。

そんな場合は、「ビルドのパラメータ化」で下記の値を設定することで、任意のタイミングでのビルド実行ができます。

  • gitlabSourceRepository: マージ元リポジトリ(フォークしている場合)
  • gitlabSourceName: マージ元リポジトリのリモート名(originみたいなやつ)
  • gitlabSourceBranch: マージ元ブランチ
  • gitlabTargetBranch: マージ先ブランチ
  • gitlabMergeRequestId: マージリクエストのID(!999の数字部分)

gitlabSourceNameは1つのリポジトリ内でMRを作っている場合はoriginですが、フォークしたブランチからマージリクエストを作成した場合にどんな名前になるのか追いきれませんでした。(誰か教えて)

まとめ

ほぼ本家のREADMEのつまみ食いみたいな感じになりました。プロジェクトのVisibility LevelがInternalまたはPublicじゃないと動かないのはしばらくハマりましたね。。。

それにしても、botがMergeRequestのコメント欄で動き出すと楽しいですね! Let's自動化!!!

29
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
27