今回はGitLabのProtected branchという機能を試しました。
背景
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 merge
をDevelopers + Maintainers
に、Allowed to push and merge
をNo one
に設定します。 - 全員に直接Pushを許可する :
Allowed to push and merge
をDevelopers + 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を追加できます。