TECHSTEP

ITインフラ関連の記事を公開してます。

GitLab Protected branchを試す

今回はGitLabのProtected branchという機能を試しました。

docs.gitlab.com

背景

GitLabに限らず、ブランチに対する操作権限をコントロールすることは、リポジトリを安全に運用することにつながります。GitLabでは Protected branch という機能でブランチの保護を実現しており、この機能を使うと、例えばあるリポジトリへの変更はすべてMerge requestを経由しないとできない、といったコントロールが可能になります。どういったコントロールが可能かというと、大まかにいえば 誰が どのブランチに対して どんな操作を 許可するかを設定します。

検証

今回はGitLab Self-managed版 (Freeプラン) で protected-branch-test というProjectを作成し検証しています。また検証のため test というユーザーに Developer Roleを付与、 feature というブランチを事前に作成します。

Protected branchを設定するにはProjectの settings から Repository を選択し、Protected branches という項目があるので選択します。

Add protected branch を選択します。

遷移先の画面でProtected branchの設定を行います。設定項目は以下の通りです。設定後は Protect を選択します。

  • Branch : 対象のブランチを指定します。ワイルドカードを使って複数ブランチの指定も可能です。
  • Allowed to merge : mergeを許可するRoleを指定します。
  • Allowed to push and merge : push/mergeを許可するRoleを指定します。
  • Allowed to force push : 全てのユーザーにForce pushを許可するか選択します。

GitLabのドキュメントでは、以下の3つのパターンについて紹介しています。

  • 全員にMerge requestを要求する : Allowed to mergeDevelopers + Maintainers に、 Allowed to push and mergeNo one に設定します。
  • 全員に直接Pushを許可する : Allowed to push and mergeDevelopers + Maintainers に設定します。
  • 全員にForce pushを許可する : Allowed to force push を有効にします。

ここでは以下のようなProtected branchを設定します。

設定後は以下のように表示されます。なお設定を削除するには該当のブランチの Unprotect を選択します。

ここでは試しに test ユーザーで feature ブランチから main ブランチにMerge requestを作成します。この時は main ブランチに対するマージ権限は Maintainers にしか付与されていないので、 Developer Roleである test ユーザーにはマージはできないはずです。

Merge request作成後の画面を見ると Merge ボタンが見当たらず、 test ユーザーに割り当てられた Developer Roleではマージが許可されていないことを確認できます。

なおAdministratorユーザーに切り替えてMerge requestを見ると Merge ボタンを確認できます。

また、 test ユーザーで main ブランチ宛に新規ファイルを作成しようとしても、以下のようにエラーが表示されます。これは main ブランチに対する Allowed to push and merge の権限が Maintainer にしか付与されていないからです。

次にブランチ指定時にワイルドカードを使った場合を試します。事前に以下のように feature で始まるブランチを複数用意します。

Protected branch設定時は以下のようにワイルドカードを使用します。

すると以下のように 3 matching branches という記載が見えます。

これを選択すると以下の画面に遷移し、3つの feature* ブランチに適用されているのを確認できます。

さて、Protected branchを適用されたブランチに対し、以下のように削除をしようとします。

すると以下のように警告画面が表示され、削除するにはブランチ名を入力する必要があります。このようにProtected branchを有効にしたブランチは、誤って削除されることのないよう、削除時にチェック項目が追加されます。

なおprotectされていない場合は以下のような画面です

その他

Premium/Ultimateプランでは以下の機能も利用できます。

  • Protected branchに対し、最低1件のCode Ownerからの承認を要求できます。
  • Group/Userを Allowed to merge / Allowed to push and merge に追加できます。
  • Group内の全てのProjectに共通のProtected branchを追加できます。