合并请求批准规则

批准规则定义合并请求在合并之前必须接收多少核准,以及哪些用户应该进行批准。它们可以与代码所有者一起使用,以确保维护该功能的群组和负责特定监督领域的任何群组都评审更改。

您可以按以下定义批准规则:

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

您可以定义单个规则来,也可以选择多个批准规则

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

添加批准规则

先决条件:

  • 您必须至少具有项目的维护者角色。
  • 在 JihuLab.com 中,要想将群组添加为审批人,您必须是该群组的成员或群组必须是公开的。

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

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并请求审核 部分,在 审核规则 部分,选择 添加审核规则
  4. 在右侧导航栏,完成对应的字段:
    • 审核必须 中,0 表示可选,大于 0 表示必须。所需审核人的最大值是 100
    • 添加审核人 中,选择符合资格的用户或群组。
  5. 选择 保存变更。您可以添加多个审核规则

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

  • 如果允许批准规则覆盖,则对这些默认规则的更改不会应用于现有合并请求,但对规则中,目标分支的更改除外
  • 如果不允许批准规则覆盖,则对默认规则的所有更改都将应用于现有合并请求。在批准规则覆盖允许的情况下,之前手动覆盖的任何批准规则都不会被修改。

编辑批准规则

先决条件:

  • 您必须至少具有项目的维护者角色。
  • 在 JihuLab.com 中,要想将群组添加为审批人,您必须是该群组的成员或群组必须是公开的。

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

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并请求批准 部分,在 审核规则 部分,找到您想要编辑的规则,然后选择 编辑
  4. 在右侧边栏中,编辑字段:
    • 审核必须 中,0 表示可选,大于 0 表示必须。所需审核人的最大值是 100
    • 要移除用户或群组,识别出要移除的群组或用户,然后选择 移除
  5. 选择 保存变更

添加多个批准规则

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

符合条件的审批人核准合并请求时,核准人所属的所有规则的剩余核准数量(核准 列)会减少:

Merge request approvals widget

合资格的核准人

要成为项目的核准人,用户必须是以下一项或多项的成员:

如果以下用户拥有开发者或更高权限,他们可以核准合并请求:

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

为了显示谁参与了合并请求审核,合并请求中的核准部件会显示 已评论 列,此列列出了对合并请求发表评论的合资格核准人,可以帮助作者和审核者确定与合并请求内容相关的问题联系谁。

如果所需的核准数大于分配的核准人数,则项目中具有开发者权限或更高级别的其他用户的核准计入满足所需的核准数,即使用户未明确列在批准规则中。

群组核准人

您可以将一组用户添加为核准人,但这些用户仅当拥有该群组的直接成员资格时才算作核准人。继承的成员不计算在内。群组核准人仅限于对项目具有共享访问权限的群组。

用户在核准人群组中的成员资格会通过以下方式影响他们的个人核准能力:

  • 继承的成员不能被认定为审批人。仅有直接成员可以审核合并请求。
  • 已经是群组核准人的一部分,后来作为个人核准人添加的用户算作一个核准人,而不是两个。
  • 默认情况下,合并请求作者在他们自己的合并请求中不计为合资格的核准人。要更改,请禁用 阻止作者批准 项目设置。
  • 合并请求的提交者可以批准合并请求。要更改,请启用 阻止添加提交的用户批准 项目设置。

代码所有者作为合资格的核准人

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

  1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  2. 选择 设置 > 合并请求
  3. 合并请求审批 部分,在 审核规则 部分,定位至 所有符合条件的用户 规则。
  4. 找到 所有符合条件的用户 规则,并选择所需的批准数量:

您还可以为受保护的分支要求代码所有者核准

为具有报告者角色的用户启用审批权限

在具有报告者角色的用户可以合并到受保护分支前,您可能需要授予他们核准合并请求的权限。有些用户(比如经理)可能不需要推送或合并代码的权限,但仍需要对提议的工作进行监督。

先决条件:

  • 您必须选择一个指定分支,因此此方法 不能够All BranchesAll protected branches 设置一起工作。
  • 您必须将共享群组添加到审批规则中,而不是单个用户,即使添加的用户是群组的一部分。

要为那些没有授予推送访问权限的用户启用审批权限:

  1. 创建一个受保护分支
  2. 创建一个新群组
  3. 将用户添加到群组,并为用户选择报告者角色。不要分配高于报告者权限的角色,因为这可能会导致意外行为
  4. 与您的群组共享项目,至少是报告者角色
  5. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
  6. 选择 设置 > 合并请求
  7. 合并请求审批 部分,滚动到 审核规则 部分:
    • 对于新规则,选择 添加批准规则 并定位受保护的分支。
    • 对于现有规则,选择 编辑 并定位受保护的分支。
  8. 添加审批人 部分,选择您创建的群组。
  9. 选择 保存更改

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

您可以通过如下方式(其中一种)来覆盖项目的合并请求审核规则:

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

先决条件:

  • 您必须具有管理员访问权限或满足以下所有条件:
    • 您必须至少具有报告者角色或项目必须要能够从外部成员接受贡献。
    • 您必须是合并请求的作者。
    • 禁用了项目设置阻止编辑审批规则

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

  1. 创建新的合并请求时,滚动到 审批规则 部分,添加或删除您想要的审批人,然后选择 创建合并请求
  2. 当查看一个已有的合并请求时:
    1. 在左侧导航栏,选择 搜索或前往 并找到您的项目。
    2. 选择 代码 > 合并请求,然后找到您想要编辑的合并请求。
    3. 选择 编辑
    4. 滚动到 审批规则 部分。
    5. 添加或删除您想要的审批人。
    6. 选择 保存更改

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

单个规则需要多个审核

要创建需要多个审批的审核规则:

要为单个负责设置多个审批,您还可以使用合并请求核准 APIapprovals_required 属性设置为 2 或更多。

配置可选批准规则

对于非必需核准的项目,合并请求核准可以是可选的。要将批准规则设为可选:

要将审批规则变为可选,您还可以使用合并请求核准 APIapprovals_required 属性设置为 0

受保护分支的批准

  • 所有受保护分支的目标分支选项引入于 15.3 版本。

批准规则通常仅与特定分支相关,例如您的默认分支。 配置一个 部分分行审批规则:

  1. 创建审批规则
  2. 转到您的项目并选择 设置 > 合并请求
  3. 合并请求批准 部分,滚动到 批准规则
  4. 选择一个 目标分支
    • 要将规则应用于所有分支,请选择 所有分支
    • 要将规则应用于特定分支,请从列表中选择它。
  5. 要启用此配置,遵循在受保护分支上要求代码所有者批准

安全批准

  • 将安全审批移动至合并请求审核设置引入于极狐GitLab 15.0。
  • 针对审核的机器人注释引入于极狐GitLab 16.2,使用名为 security_policy_approval_notification 的功能标志。默认启用。
  • 针对审核的机器人注释一般可用性引入于极狐GitLab 16.3。功能标志 security_policy_approval_notification 被移除。

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

安全批准规则适用于所有合并请求,直到流水线完成。安全批准规则的应用可防止用户在安全扫描运行之前合并代码。流水线完成后,将检查安全批准规则,确定是否仍需要安全批准。

Security Approvals

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

故障排查

审核规则名称不能为空

对于此明确错误的处理,您可以通过 API 删除审核规则。

  1. 获取项目级别的规则
  2. 删除规则

群组需要显式或继承的开发角色

为处理审批而创建的群组,其在项目层级结构中所处的位置,可能与需要接受审核的项目所在的位置不同。 如果发生这种情况,群组成员将无法批准合并请求,因为他们无法访问合并请求。

比如:

在如下的群组结构中,项目 1 属于子群 1,而子群 4 包含用户。

Example scenario - project and group hierarchy

项目 1 有一条项目级别的审批规则,该规则指定子群组 4 为审批者。当创建一个合并请求时,来自子群组 4 的审批者会出现在符合条件的审批者列表中。然而,由于子群组 4 的用户没有权限查看该合并请求,系统会返回 404 错误。为了赋予成员资格,必须邀请该群组成为项目成员。现在子群组 4 的用户就能够进行审批了。

Project members page showing subgroup 4 as a member