保護ブランチ

GitLab における権限は、基本的にリポジトリやブランチに対する読み込みや書き込みの権限という考えに基づいて定義されています。 特定のブランチに対してさらに制限を加えるために、ブランチを保護することができます。

概要

デフォルトでは、プロテクトブランチは4つの単純なことを行います:

  • メンテナー権限を持つユーザー以外は、メンテナーを作成できません。
  • 許可権限を持つユーザー以外からのプッシュを防ぎます。
  • 誰かがブランチに無理やり押し込むのを防ぎます。
  • これにより、ブランチを削除することができなくなります。
注意:GitLab 管理者は保護ブランチへのプッシュが許可されています。

経年変化についてはChangelogセクションをご覧ください。

デフォルトのブランチ保護レベルは管理エリアで設定します。

保護ブランチの設定

ブランチを保護するには、少なくともメンテナーの権限レベルが必要です。master ブランチはデフォルトで保護されていることに注意してください。

  1. プロジェクトの設定➔リポジトリに移動します。
  2. スクロールして、保護されたブランチのセクションを見つけます。
  3. ブランチのドロップダウンメニューから、保護したいブランチを選択し、保護をクリックします。 下のスクリーンショットでは、develop ブランチを選択しています。

    Protected branches page

  4. 保護されたブランチは、「保護されたブランチ」リストに表示されます。

    Protected branches list

マージ許可とプッシュ許可設定の使用

GitLab 8.11で導入されました

GitLab 8.11 以降、ブランチ保護のレイヤーが追加され、保護ブランチをより細かく管理できるようになりました。 開発者がプッシュできる」オプションは「プッシュ許可」設定に置き換えられ、メンテナーや開発者が保護ブランチにプッシュすることを許可/禁止できるようになりました。

Allowed to push” と “Allowed to merge” の設定を使うと、さまざまなロールが保護ブランチで実行できるアクションを制御することができます。 たとえば、”Allowed to push” を “No one” に設定し、”Allowed to merge” を “Developers + Maintainers” に設定すると、保護ブランチへの変更に対して_全員が_マージリクエストを送信するようになります。 これは、GitLab ワークフローのようなワークフローと互換性があります。

しかし、そのような必要がなく、強制プッシュやブランチの削除からの保護だけが有用なワークフローもあります。 そのようなワークフローでは、「プッシュ許可」を「開発者 + メンテナー」に設定することで、書き込み権限を持つすべての人に保護されたブランチへのプッシュを許可することができます。

保護されたブランチを作成するとき、あるいは作成した後で、”Already protected” エリアのドロップダウンリストから必要なオプションを選択することで、”Allowed to push” や “Allowed to merge” オプションを設定することができます。

Developers can push

保護ブランチを作成する際にこれらのオプションを選択しなかった場合、デフォルトで「メンテナー」に設定されます。

特定のユーザーへのプッシュおよびマージアクセスの制限

GitLab Starter8.11で導入されました

GitLab Enterprise Editionでは、ロール(メンテナー、開発者)や特定のユーザーを選択することで、保護されたブランチへのアクセスを制限することができます。 ドロップダウンメニューから、ロールやマージまたはプッシュアクセスさせたいユーザーを選択してください。

Select roles and users

保護」をクリックすると、ブランチが「保護されたブランチ」リストに表示されます。

Roles and users list

ワイルドカード保護ブランチ

GitLab 8.10 で導入されました

ワイルドカードで保護ブランチを指定すると、ワイルドカードにマッチするすべてのブランチが保護されます。 たとえば、以下のようになります:

ワイルドカードプロテクトブランチ ブランチのマッチング
*-stable production-stable,staging-stable
production/* production/app-server,production/load-balancer
*gitlab* gitlabgitlab/stagingmaster/gitlab/production

保護されたブランチの設定 (「開発者がプッシュできる」など) は、マッチするブランチすべてに適用されます。

たとえば、*-stableproduction-* はどちらもブランチにマッチしますproduction-stable 。この場合、保護された_ブランチに_“Allowed to push” (プッシュを許可する) のような設定が production-stableあれば、その設定も継承されます。

保護されているブランチの名前をクリックすると、一致するすべてのブランチのリストが表示されます:

Protected branch matches

保護ブランチの作成

GitLab 11.9 で導入されました

保護ブランチやワイルドカード保護ブランチが「誰も プッシュを許可しない」に設定されている場合、開発者 (およびより高い権限レベルを持つユーザー) は、以下の条件を満たしていれば新しい保護ブランチを作成することができます。マージ許可これは UI あるいは API でのみ可能です (コマンドラインや Git クライアントアプリケーションから誤って保護ブランチを作成してしまうことを防ぐためです)。

ユーザーインターフェイスから新しいブランチを作成するには:

  1. リポジトリ>ブランチにアクセスしてください。
  2. 新規ブランチをクリックしてください。
  3. ブランチ名を入力し、既存のブランチやタグ、コミットを選択します。 すでに保護されているブランチやコミットのみが対象となります。

保護ブランチの削除

GitLab 9.3 で導入されました

時折、保護されているブランチを削除したり、クリーンアップすることが必要になることがあります。

メンテナー権限以上のユーザーは、GitLab のウェブインターフェイスから手動で保護ブランチを削除することができます:

  1. リポジトリ>ブランチにアクセス
  2. 削除したいブランチの横にある削除アイコンをクリックしてください。
  3. 誤って削除されることを防ぐため、追加の確認が必要です。

    Delete protected branches

保護されたブランチの削除は、Git 経由ではなくウェブインターフェイス経由でのみ許可されています。 つまり、コマンドラインや Git クライアントアプリケーションから誤って保護されたブランチを削除することはできません。

コードオーナーによるブランチの承認

GitLab Premium12.4から導入されました

マージリクエストによって変更されたファイルに対して、コードオーナーの承認を最低 1 つ要求することができます。 コードオーナーの承認は、新しいブランチを保護するときに設定するか、またはすでに保護されているブランチに設定することができます。

新しいブランチを保護し、コードオーナーの承認を可能にします:

  1. プロジェクトの設定 >リポジトリに移動し、保護ブランチを展開します。
  2. ブランチの保護までスクロールし、保護したいブランチかワイルドカードを選択し、マージ許可者とプッシュ許可者を選択し、コードオーナーからの承認を必要とするスライダーを切り替えます。
  3. 保護」をクリックします。

Code Owners approval - new protected branch

すでに保護されているブランチに対してコードオーナーの承認を可能にするため:

  1. プロジェクトの設定 >リポジトリに移動し、保護ブランチを展開します。
  2. 保護ブランチまでスクロールダウンし、選択したブランチのコードオーナー承認者スライダーを切り替えます。

Code Owners approval - branch already protected

有効にすると、これらのブランチを対象としたマージリクエストはすべて、マッチしたルールごとにコードオーナーの承認が必要になります。 さらに、保護されたブランチへの直接のプッシュは、ルールがマッチした場合に拒否されます。

保護ブランチでのパイプラインの実行

保護されたブランチへのマージまたはプッシュの権限は、ユーザーがCI/CDパイプラインを実行し、それらのブランチに関連するジョブのアクションを実行できるかどうかを定義するために使用されます。

パイプラインのセキュリティモデルの詳細については、保護されたブランチのセキュリティを参照してください。

変更履歴

11.9

9.2

  • 保護されたブランチをウェブインターフェイスから削除できるようになりました(issue #21393)。

8.11

8.10