GitLabのMerge Requestを少し制御してみる
GitLabではMergeRequestの受入に幾つか設定があります。
今回は簡単に制御出来る3つの方法について確認します。
- Merge When Build Succeeds(ビルドが通らなければMergeを許可しない)
- Merge Request discussion resolution(discussionが解決しなければMergeを許可しない)
-
"Work In Progress" Merge Requests(
WIP:
をタイトルから消さないかぎり許可しない)
1.Merge When Build Succeeds
名前の通りビルドが成功しない限りMergeの許可を出来ないようにする方法です。
プロジェクトの設定ページ(Edit Project
)からOnly allow merge requests to be merged if the build succeeds
のチェックボックスを入れ、保存(Save changes
)するだけです。
確認してみましょう。
Hello worldが書いていれば成功する.gitlab-ci.yml
を書きます
Hello worldがないdelworldというブランチを作成します。
この状態のビルドの状態はdelworldというブランチはfailed
になっています。
masterへのMerge Request
を作ると赤くはなっていますがAccept Merge Request
を押せますね。
ここでEdit Project
-> Only allow merge requests to be merged if the build succeeds
のチェックボックスを入れ、Save changes
します。
Merge Requestの画面に戻るとThe build for this merge request failed
になり、Mergeの許可を制御しています。
2.Merge Request discussion resolution
名前の通りディスカッションが解決しない限りMergeの許可を出来ないようにする方法です。
プロジェクトの設定ページ(Edit Project
)からOnly allow merge requests to be merged if all discussions are resolved
のチェックボックスを入れ、保存(Save changes
)するだけです。
デフォルトの状態だとコメントがあってもAccept Merge Request
は押せます。
ここでEdit Project -> Only allow merge requests to be merged if all discussions are resolved
のチェックボックスを入れ、Save changes
するとThis merge request has unresolved discussions
になり、Mergeの許可を制御しています。
Mergeをできるようにするには各コメントにたいしてすべて丸チェックを押下します。
すべてチェックを入れるとx/x discussion resoloved
のチェックがされます。
そして画面をリロードするとMerge Request
をすることができます。
3."Work In Progress" Merge Requests
[WIP]
またはWIP:
をMerge Request
のタイトルに入力するだけです。
Merge Request
のタイトルにWIP:
または[WIP]
を入れます。
This merge request is currently a Work In Progress
というメッセージが表示されMergeを制御しています。

Mergeをさせるには先程のタイトルに先頭に入力したWIP:
または[WIP]
を削除します。
タイトルを変更したらMerge Request
をすることができます。
最後
いかがだったでしょうか、これらの機能はGitLab上での話ですので、いくら制御してもローカルでMergeしてPushは可能です。確認はローカルで行い、Merge自体はGitLabのMerge Request上で行うと、ルール作りも楽になるのではないでしょうか?
非常に簡単な説明ですが以上です。
追記
Protected BranchesでbranchごとにMerge Requestの制御ができるみたいです。
hiroponzさんありがとうございます。