Help us learn about your current experience with the documentation. Take the survey.

合并请求审批规则

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

审批规则定义了合并请求在合并前需要获得多少次审批,以及哪些用户应该进行审批。它们可以与代码所有者结合使用,确保变更既由维护该功能的组审查,也由负责特定监督领域的任何组审查。

您可以定义审批规则:

您可以配置审批规则:

如果您没有定义默认审批规则,任何用户都可以批准合并请求。即使没有定义规则,您仍然可以在项目设置中强制执行最少必需审批者数量

针对不同项目的合并请求(例如从 fork 到上游项目),使用目标(上游)项目的默认审批规则,而不是源(fork)项目的规则。

合并请求审批可以全局配置,通过策略应用于所有(或部分)项目。合并请求审批策略也提供更多灵活性和更细粒度的配置选项。

添加审批规则

先决条件:

  • 您必须拥有项目的 Maintainer 角色。
  • 在 GitLab.com 中添加组作为审批者,您必须是该组成员或该组必须是公开的。

要添加合并请求审批规则:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Settings > Merge requests
  3. Merge request approvals 部分,在 Approval rules 部分,选择 Add approval rule
  4. 在右侧边栏,填写字段:
    • Approvals required 中,值为 0 会使该规则变为可选,任何大于 0 的值都会创建必需规则。 必需审批的最大数量为 100
    • Add approvers 中,选择有资格审批的用户或组。 GitLab 基于合并请求所更改文件的先前作者推荐审批者。
  5. 选择 Save changes。您可以添加多个审批规则

您的审批规则覆盖配置决定了新规则是否应用于现有合并请求:

  • 如果允许审批规则覆盖,对这些默认规则的更改不会应用于现有合并请求,除非是对规则的目标分支的更改。
  • 如果不允许审批规则覆盖,所有对默认规则的更改都会应用于现有合并请求。任何在允许审批规则覆盖期间手动覆盖的审批规则都不会被修改。

编辑审批规则

先决条件:

  • 您必须拥有项目的 Maintainer 角色。
  • 在 GitLab.com 中添加组作为审批者,您必须是该组成员或该组必须是公开的。

要编辑合并请求审批规则:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Settings > Merge requests
  3. Merge request approvals 部分,在 Approval rules 部分,在要编辑的规则旁边,选择 Edit
  4. 在右侧边栏,编辑字段:
    • Approvals required 中,值为 0 会使该规则变为可选,任何大于 0 的值都会创建必需规则。 必需审批的最大数量为 100
    • 要删除用户或组,识别要删除的组或用户,然后选择 Remove remove )。
  5. 选择 Save changes

删除审批规则

先决条件:

  • 您必须拥有项目的 Maintainer 角色。

要删除合并请求审批规则:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Settings > Merge requests
  3. Merge request approvals 部分,在要删除的规则旁边,选择垃圾桶图标( remove )。
  4. 选择 Remove approvers

多个审批规则

要在合并请求上强制执行多个审批规则,为项目添加多个默认审批规则。

有资格的审批者批准合并请求时,会减少该审批者所属的所有规则中剩余的审批次数(Approvals 列):

Merge request approvals widget

概述请参见 Multiple Approvers

获取所有您可以批准的合并请求通知

要每次有您有资格批准的合并请求创建时都收到电子邮件通知:

  • 将您的通知级别设置为 Custom 并选择 Merge request you’re eligible to approve is created 事件。

编辑或覆盖合并请求审批规则

您可以通过以下方式覆盖项目的合并请求审批规则:

  • 编辑现有合并请求。
  • 创建新合并请求。

先决条件:

  • 您必须拥有管理员权限,或满足以下所有条件:
    • 您必须拥有至少 Developer 角色,或项目必须接受外部成员的贡献。
    • 您必须是合并请求的作者。
    • 项目设置 Prevent editing approval rules 已禁用。

要覆盖合并请求的审批者:

  1. 创建新合并请求时,滚动到 Approval Rules 部分, 在选择 Create merge request 之前添加或删除您想要的审批规则。
  2. 当查看现有合并请求时:
    1. 在左侧边栏,选择 Search or go to 并找到您的项目。
    2. 选择 Code > Merge requests 并找到您的合并请求。
    3. 选择 Edit
    4. 滚动到 Approval Rules 部分。
    5. 添加或删除您想要的审批规则。
    6. 选择 Save changes

管理员可以更改合并请求审批设置 以防止用户覆盖合并请求的审批规则。

要求规则需要多次审批

要创建需要多次审批的审批规则:

  • 当您创建编辑规则时,将 Approvals required 设置为 2 或更高。

要要求规则需要多次审批,您也可以 使用 APIapprovals_required 属性设置为 2 或更高。

配置可选审批规则

在审批受到欢迎但非必需的项目中,合并请求审批可以是可选的。要使审批规则变为可选:

要使审批规则变为可选,您也可以使用 API 更新项目的审批规则, 并将 approvals_required 属性设置为 0

受保护分支的审批

审批规则通常只与特定分支相关,如您的默认分支。要为某些分支配置审批规则:

  1. 创建审批规则
  2. 转到您的项目并选择 Settings > Merge requests
  3. Merge request approvals 部分,滚动到 Approval rules
  4. 对于 Target branch
    • 要将规则应用于所有受保护分支,选择 All protected branches
    • 要将规则应用于特定分支,从列表中选择它。
  5. 要启用此配置,请遵循 在受保护分支上要求代码所有者审批

为 Reporter 角色用户启用审批权限

在 Reporter 角色用户可以合并到受保护分支之前,您可能需要授予他们批准合并请求的权限。 某些用户(如管理员)可能不需要推送或合并代码的权限,但仍需要对提议的工作进行监督。

Reporter 角色用户只能通过常规审批规则批准合并请求。 代码所有者审批规则要求用户至少拥有 Developer 角色。更多信息,请参见有资格的审批者

先决条件:

  • 您必须选择特定分支,因为此方法不适用于 All BranchesAll protected branches 设置。
  • 共享组必须添加到审批规则中,而不是单独用户,即使添加的用户是该组成员。

要为这些用户启用审批权限而不授予他们推送访问权限:

  1. 创建受保护分支
  2. 创建新组
  3. 将用户添加到组, 并为用户选择 Reporter 角色。由于已知问题, 不要分配比 Reporter 更高权限的角色。 分配更高角色可能导致意外行为。
  4. 将项目与您的组共享, 至少授予 Reporter 角色。
  5. 在左侧边栏,选择 Search or go to 并找到您的项目。
  6. 选择 Settings > Merge requests
  7. Merge request approvals 部分,在 Approval rules 部分:
    • 对于新规则,选择 Add approval rule 并定位到受保护分支。
    • 对于现有规则,选择 Edit 并定位到受保护分支。
  8. 在右侧边栏的 Add approvers 中,选择您创建的组。
  9. 选择 Save changes

安全审批

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

您可以使用合并请求审批策略基于合并请求和默认分支中的漏洞状态定义安全审批。 每个安全策略的详细信息显示在合并请求配置的安全审批部分。

安全审批规则应用于所有合并请求,直到流水线完成。应用安全审批规则可防止用户在安全扫描运行前合并代码。流水线完成后,会检查安全审批规则以确定是否仍需要安全审批。 如果流水线中的扫描程序发现问题且需要安全审批,则会在合并请求上生成机器人评论,指示继续所需的步骤。

Security Approvals

这些策略都在安全策略编辑器中创建和编辑。

有资格的审批者

要成为您项目的有资格审批者,用户必须是以下至少之一的直接成员:

拥有 Developer 角色的用户可以在以下任一情况下批准合并请求:

  • 在项目或合并请求级别添加为审批者的用户。
  • 是合并请求中更改文件的代码所有者的用户。

拥有 Reporter 角色的用户只有在满足以下所有条件时才能批准:

  • 用户是已共享给该项目的组成员。 该组必须至少具有 Reporter 角色。
  • 该组已添加为合并请求审批者。
  • Reporter 角色用户的审批权限已启用

为了显示谁参与了合并请求审查,合并请求中的审批小部件显示 Commented by 列。此列列出了对合并请求发表评论的有资格审批者。它有助于作者和审查者确定就合并请求内容联系谁。

如果必需审批数量大于分配的审批者数量,项目中至少具有 Developer 角色的其他用户的审批也会计入必需审批数量,即使这些用户未在审批规则中明确列出。

代码所有者作为审批者

如果您将代码所有者添加到您的仓库,文件的所有者将成为项目中有资格的审批者。要启用此合并请求审批规则:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Settings > Merge requests
  3. Merge request approvals 部分,在 Approval rules 部分,找到 All eligible users 规则。
  4. Approvals required 列中,输入所需的审批数量。

您还可以 要求代码所有者审批 受保护分支。

按成员类型确定审批者

下表显示了成员类型如何影响审批规则和代码所有者的资格。

用户资格

当您将个别用户指定为审批规则的审批者或在 CODEOWNERS 文件中引用用户(如 @username)时:

成员类型 审批规则 代码所有者
项目的直接成员 check-circle-filled check-circle-filled
项目组的直接成员 check-circle-filled check-circle-filled
项目组的继承成员 check-circle-filled check-circle-filled
被邀请到项目的组的直接成员 check-circle-filled check-circle-filled
被邀请到项目的组的继承成员 dash-circle dash-circle
被邀请到项目组的组的直接成员 check-circle-filled check-circle-filled
被邀请到项目组的组的继承成员 dash-circle dash-circle
被邀请到项目组父组的组的直接成员 check-circle-filled check-circle-filled
被邀请到项目组父组的组的继承成员 dash-circle dash-circle

组资格

当您将组指定为审批规则的审批者或在 CODEOWNERS 文件中引用组(如 @group-name)时,只有合格组的直接成员可以提供审批:

组类型 审批规则 代码所有者
被邀请到项目的组 check-circle-filled check-circle-filled
被邀请到项目组的组 check-circle-filled dash-circle
被邀请到项目组父级的组 check-circle-filled dash-circle
项目组 check-circle-filled check-circle-filled
项目组的父级 check-circle-filled check-circle-filled

对于基于组的审批,只有组的直接成员可以批准合并请求。 合格组的继承成员不能提供审批。

组审批者

您可以添加一组用户作为审批者。该组的所有直接成员 都可以批准该规则。继承成员不能批准该规则。

通常该组是您顶级命名空间中的子组,除非您正在与外部组协作。如果您正在与另一个组协作并希望使用该组成员作为审批者,您可以:

用户在审批者组中的成员资格通过以下方式确定其个人审批权限:

  • 继承成员不被视为审批者。只有直接成员可以批准合并请求。
  • 后来也作为个人审批者添加的组审批者用户 计为一个审批者,而不是两个。
  • 合并请求作者默认不将其自己的合并请求计为有资格的审批者。 要更改此行为,请禁用 Prevent author approval 项目设置。
  • 默认情况下,合并请求的提交者可以批准合并请求。要更改此行为,请启用 Prevent committers approval 项目设置。

故障排除

审批规则名称不能为空

作为此验证错误的解决方法,您可以通过 API 删除审批规则。

  1. 列出项目的所有审批规则
  2. DELETE 该规则

有关此验证错误的更多信息,请阅读 issue 285129

组需要在项目上有显式或继承的 Developer 角色

为处理审批而创建的组可能在项目层次结构的不同区域创建,而不是在需要审查的项目中。如果发生这种情况,该组成员可能没有权限批准合并请求,因为他们没有访问权限。

例如:

在下组结构中,项目 1 属于子组 1,子组 4 有用户。

Example scenario - project and group hierarchy

项目 1 已为项目配置了审批规则,将子组 4 指定为审批者。 当创建合并请求时,子组 4 的审批者出现在有资格的审批者列表中。 然而,由于子组 4 的用户没有权限查看合并请求,返回 404 错误。 要授予成员资格,必须将该组邀请为项目成员。现在子组 4 的用户可以批准了。

Project members page showing subgroup 4 as a member