マージリクエスト承認ルール

承認ルールは、マージリクエストがマージされるまでにいくつの承認を受けなければならないか、またどのユーザーが承認を行うべきかを定義します。コードオーナーと組み合わせて使用することで、その機能をメンテナーするグループと、特定の監視領域を担当するグループの両方で変更がレビューされるようにすることができます。

承認者ルールを定義することができます:

デフォルトの承認ルールを定義しない場合、どのユーザーでもマージリクエストを承認できます。ルールを定義しない場合でも、プロジェクトの設定で必要な承認者の最小数を強制できます。

利用可能なルールの中からマージリクエストを承認する単一のルールを定義することも、複数の承認ル ールを選択することもできます。

フォークからアップストリームプロジェクトへのマージなど、異なるプロジェクトを対象とするマージリクエストには、ソース(フォーク)ではなくターゲット(アップストリーム)プロジェクトのデフォルト承認ルールが使用されます。

承認者の追加

マージリクエストの承認ルールを追加します:

  1. プロジェクトに移動し、設定 > マージリクエストを選択します。
  2. マージリクエスト承認者セクションで、承認ルールまでスクロールします。
  3. 承認ルールの追加を選択します。
  4. 読みやすいルール名を追加します。
  5. 対象ブランチを選択します:
    • すべてのブランチにルールを適用するには、[すべてのブランチ] を選択します。
    • 保護されたブランチすべてにルールを適用するには、すべての保護されたブランチを選択します(GitLab 15.3以降)。
    • 特定のブランチにルールを適用するには、リストから選択します。
  6. 必要な承認者数] に必要な承認者数を設定します。を0 超えると 0必須0 ルールに0なります。必要な承認者の最大数は100です。
  7. ユーザーやグループを承認者として追加するには、承認する資格があるユーザーやグループを検索し、[Add] を選択します。GitLab は、マージリクエストによって変更されたファイルの以前の作成者に基づいて承認者を提案します。

    note
    GitLab.comでは、あなたがそのグループのメンバーであるか、グループが公開されていれば、グループを承認者として追加することができます。
  8. 承認ルールの追加を選択します。

GitLabのPremiumとUltimateのユーザーは、追加の承認ルールを作成することができます。

承認ルールのオーバーライドの設定によって、新しいルールが既存のマージリクエストに適用されるかどうかが決まります:

  • 承認ルールのオーバーライドが許可されている場合、これらのデフォルトルールへの変更は、ルールのターゲットブランチへの変更を除き、既存のマージリクエストには適用されません。
  • 承認ルールのオーバーライドが許可されていない場合、デフォルト ルールのすべての変更が既存のマージ リクエストに適用されます。承認ルールのオーバーライドが許可されている期間中に手動でオーバーライドされた承認ルールは変更されません。

承認ルールの編集

マージリクエスト承認ルールを編集します:

  1. プロジェクトに移動し、設定 > マージリクエストを選択します。
  2. マージリクエスト承認者セクションで、承認ルールまでスクロールします。
  3. 編集するルールの横にある [編集] を選択します。
  4. オプション。ルール名を変更します。
  5. 必要な承認者数]に必要な承認者数を設定します。最小値は0です。
  6. 必要に応じて、資格のある承認者を追加または削除します:
    • 承認者としてユーザーまたはグループを追加するには承認資格のあるユーザーまたはグループを検索し、[追加] を選択します。

      note
      GitLab.comでは、あなたがそのグループのメンバーであるか、グループが公開されていれば、グループを承認者として追加することができます。
    • ユーザーやグループを削除するには、削除するグループやユーザーを特定し、{remove}を選択します。選択します。

  7. 承認ルールの更新] を選択します。

複数の承認ルールの追加

GitLab 11.10で導入されました

GitLab Premium と Ultimate ティアでは、マージリクエストに複数の承認ルールを適用したり、プロジェクトに複数のデフォルト承認ルールを適用することができます。ティアが複数のデフォルトルールをサポートしている場合:

  • プロジェクトの承認ルールを追加または編集する際、ルールが定義された後でもGitLabは承認ルールの追加ボタンを表示します。
  • マージリクエストで複数の承認ルールを編集または上書きする場合、GitLabはルールが定義された後でも承認ルールの追加ボタンを表示します。

資格のある承認者がマージリクエストを承認すると、その承認者が所属する全てのルールの残り承認数(Approvals列)が減ります:

Approvals premium merge request widget

概要については、複数の承認者を参照してください。

承認者

GitLab 13.3 で導入された、適格な承認者がマージリクエストにコメントすると、承認ウィジェットのCommented by列に表示されます。

プロジェクトの承認者として適格であるためには、ユーザーはこれらの一つ以上のメンバーである必要があります:

以下のユーザーは、開発者以上の権限を持っている場合、マージリクエストを承認できます:

  • プロジェクト レベルまたはマージ リクエスト レベルで承認者として追加されたユーザー。
  • マージリクエストで変更されたファイルのコードオーナーであるユーザー。

誰がマージ リクエスト レビューに参加したかを表示するために、マージ リクエストの 承認者 ウィジェット にはコメント欄 が表示されます。この列には、マージ リクエストにコメントした資格のある承認者が一覧表示されます。作成者やレビュアーがマージリクエストの内容に関する質問の連絡先を特定するのに役立ちます。

必要な承認者数が割り当てられた承認者数よりも多い場合、プロジェクトで少なくとも開発者ロールを持つ他のユーザーからの承認は、そのユーザーが承認ルールで明示的にリストされていなくても、必要な承認者数を満たすためにカウントされます。

グループ承認者

承認者としてユーザーグループを追加することができますが、承認者としてカウントされるのは、そのグループに直接所属しているユーザーのみです。継承されたメンバーはカウントされません。グループ承認者は、プロジェクトへの共有アクセス権を持つグループのみに制限されます。

承認者グループに所属しているユーザーは、次のような方法で承認することができます:

  • グループ承認者の一員であったユーザーが、後に個人承認者として追加された場合、承認者は2名ではなく1名とカウントされます。
  • デフォルトでは、マージリクエスト作成者は自身のマージリクエストの承認者としてカウントされません。この動作を変更するには 作成者の承認を防ぐプロジェクト設定を無効にします。
  • マージリクエストのコミッターはマージリクエストを承認することができます。このふるまいを変更するには コミッターの承認を防ぐプロジェクト設定を有効にします。

承認者としてのコードオーナー

13.9でGitLab Premiumに移行しました。

リポジトリにコードオーナーを追加すると、ファイルのオーナーがプロジェクトの承認者となります。このマージリクエスト承認ルールを有効にするには:

  1. プロジェクトに移動し、設定 > マージリクエストを選択します。
  2. マージリクエスト承認者セクションで、承認ルールまでスクロールします。
  3. すべての対象ユーザールールを探し、必要な承認者数を選択します:

    MR approvals by Code Owners

保護されたブランチに対して、コードオーナーの承認を必要とすることもできます。

マージリクエストの承認者の職務分掌

保護ブランチにマージする前に、レポーターロールを持つユーザーにマージリクエストを承認する権限を与える必要があるかもしれません。マネージャーなどの)一部のユーザーは、コードのプッシュやマージに権限を必要としませんが、提案された作業を監視する必要があります。このようなユーザーにプッシュ権限を与えずに承認権限を与えるには、次のようにします:

  1. 保護ブランチの作成
  2. 新しいグループを作成します。
  3. ユーザーをグループに追加し、そのユーザーのレポーターロールを選択します。
  4. レポーターのロールに基づいて、プロジェクトをグループで共有します。
  5. プロジェクトに移動し、設定 > マージリクエストを選択します。
  6. マージリクエストの承認者セクションで、承認ルールまでスクロールし、どちらかを選択します:
    • 新規ルールの場合は、承認者の追加を選択し、保護されたブランチを対象とします。
    • 既存のルールの場合は、[編集] を選択し、保護されたブランチを対象にします。
  7. 権限リストにグループを追加します。

    Update approval rule

マージリクエスト承認ルールの編集または上書き

デフォルトでは、マージリクエスト作成者 (または十分な権限を持つユーザー) は、マージリクエストに記載されている承認ルールを編集できます。マージリクエストの承認ルールを編集する場合、承認者を追加または削除することができます:

  1. マージリクエストで、承認ルール セクションを見つけます。
  2. 新しいマージリクエストを作成する場合、承認ルールセクションまでスクロールし、マージリクエストの作成を選択する前に、必要な承認ルールを追加または削除します。
  3. 既存のマージリクエストを表示する場合:
    1. 編集]を選択します。
    2. 承認規則セクションまでスクロールします。
    3. 必要な承認ルールを追加または削除します。
    4. 変更を保存を選択します。

管理者は、ユーザーがマージリクエストの承認ルールを上書きできないように、マージリクエストの承認設定を変更できます。

ルールに複数の承認を要求

複数の承認を必要とする承認ルールを作成するには、次の手順に従います:

オプションの承認者ルールの設定

マージリクエストの承認は、承認者はありがたいが必須ではないプロジェクトのためにオプションにすることができます。承認ルールをオプションにするには、次の手順を実行します:

保護ブランチの承認者

すべての保護ブランチは、GitLab 15.3で導入されたブランチオプションを対象としています。

承認ルールは、デフォルトブランチのような特定のブランチに対してのみ適用されます。特定のブランチに対して承認ルールを設定するには、次のようにします:

  1. 承認ルールを作成します。
  2. プロジェクトに移動し、設定 > マージリクエストを選択します。
  3. マージリクエスト承認者セクションで、承認ルールまでスクロールします。
  4. 対象ブランチ
    • 保護されたブランチすべてにルールを適用するには、すべての保護されたブランチを選択します(GitLab 15.3以降)。
    • 特定のブランチにルールを適用するには、リストから選択します。
  5. この設定を有効にするには、保護されたブランチに対するコードオーナーの承認者をお読みください。

コードカバレッジチェックの承認者

マージリクエストによってコードテストカバレッジが低下する場合に、特定の承認者を要求できます。

詳細については、カバレッジチェック承認ルールを参照してください。

セキュリティ承認者

フラグ: セルフマネジメントのGitLabでは、承認者のためのボットコメントはデフォルトで利用可能です。この機能を非表示にするには、管理者はsecurity_policy_approval_notificationという機能フラグを無効にすることができます。GitLab.comでは、承認者のボットコメントは利用可能です。

スキャン結果ポリシーを使って、マージリクエストとデフォルトブランチの脆弱性の状態に基づいたセキュリティ承認を定義することができます。各セキュリティポリシーの詳細は、マージリクエスト設定のセキュリティ承認セクションに表示されます。

セキュリティ承認ルールはパイプラインが完了するまですべてのマージリクエストに適用されます。セキュリティ承認ルールの適用により、ユーザーはセキュリティ スキャンが実行される前にコードをマージすることができなくなります。パイプラインが完了すると、セキュリティ承認ルールがチェックされ、セキュリティ承認者がまだ必要であるかどうかが判断されます。パイプラインのスキャナがイシューを特定し、セキュリティ承認者が必要な場合は、マージリクエストにボットコメントが生成され、処理を進めるために必要な手順が示されます。

Security Approvals

これらのポリシーは、セキュリティポリシーエディタで作成および編集されます。

トラブルシューティング

承認ルール名を空白にできません。

この検証エラーの回避策として、APIを通じて承認ルールを削除することができます。

  1. プロジェクトレベルのルールを取得します。
  2. ルールを削除します。

この検証エラーの詳細については、イシュー285129を参照してください。

グループに明示的あるいは継承された開発者ロールが必要です。

承認を処理するために作成されたグループは、レビューを必要とするプロジェクトとは異なるプロジェクト階層に作成されることがあります。この場合、承認グループはプロジェクトの有効なコードオーナーとして認識されず、プロジェクトの承認リストにも表示されません。この問題を解決するには、共有階層の上位に承認グループを共有グループとして追加し、レビューが必要なプロジェクトがこのユーザーグループを継承するようにします。