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

教程:为您的项目构建受保护的工作流

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

当您的团队启动新项目时,他们需要一个能平衡效率与适当审查的工作流。在 GitLab 中,您可以创建用户组,将这些组与分支保护相结合,然后通过审批规则强制执行这些保护。

本教程将为一个名为 “Excelsior” 的示例项目设置 1.x1.x.x 发布分支的保护,并为该项目创建一个最小化的审批工作流:

  1. 创建 engineering
  2. engineering 中创建子组
  3. 向子组添加用户
  4. 创建 Excelsior 项目
  5. 添加基本的 CODEOWNERS 文件
  6. 配置审批规则
  7. 在分支上强制执行 CODEOWNER 审批
  8. 创建发布分支

开始之前

  • 您必须拥有至少 Maintainer 角色。
  • 您需要一份管理人员及其电子邮件地址的列表。
  • 您需要一份后端和前端工程师及其电子邮件地址的列表。
  • 您了解分支名称的语义化版本控制

创建 engineering

在设置 Excelsior 项目之前,您应该创建一个拥有该项目的组。在这里,您将设置 Engineering 组:

  1. 在左侧边栏顶部,选择 新建 ( plus ) 和 新建组
  2. 选择 创建组
  3. 对于 组名称,输入 Engineering
  4. 对于 组 URL,输入 engineering
  5. 可见性级别 设置为 私有
  6. 个性化您的体验,以便 GitLab 为您显示最有用的信息:
    • 对于 角色,选择 系统管理员
    • 对于 谁将使用此组? 选择 我的公司或团队
    • 对于 您将使用此组做什么? 选择 我想存储我的代码
  7. 跳过邀请组成员。您将在本教程的后续部分添加用户。
  8. 选择 创建组

接下来,您将向此 engineering 组添加子组,以实现更精细的控制。

engineering 中创建子组

engineering 组是一个良好的开端,但 Excelsior 项目的后端工程师、前端工程师和管理人员有不同的任务和不同的专业领域。

在这里,您将在 Engineering 组中创建三个更精细的子组,根据用户的工作类型进行分组:managersfrontendbackend。然后您将把这些新组作为成员添加到 engineering 组中。

首先,创建新的子组:

  1. 在左侧边栏,选择 搜索或跳转至 并搜索 engineering。选择名为 Engineering 的组:

    搜索结果中的 engineering 组

  2. engineering 组的概览页面右上角, 选择 新建子组

  3. 对于 子组名称,输入 Managers

  4. 可见性级别 设置为 私有

  5. 选择 创建子组

接下来,将子组作为成员添加到 engineering 组中:

  1. 在左侧边栏,选择 搜索或跳转至 并搜索 engineering。选择名为 Engineering 的组。
  2. 选择 管理 > 成员
  3. 在右上角,选择 邀请组
  4. 对于 选择要邀请的组,选择 Engineering / Managers
  5. 添加子组时选择 Maintainer 角色。 这配置了子组成员在访问 engineering 组及其项目时可以继承的最高角色。
  6. 可选。选择过期日期。
  7. 选择 邀请

重复此过程以创建 backendfrontend 的子组。完成后,再次搜索 engineering 组。其概览页面应显示三个子组,如下所示:

engineering 组有三个子组

向子组添加用户

在上一步中,当您将子组添加到父组(engineering)时,您限制了子组成员只能拥有 Maintainer 角色。这是他们可以继承的 engineering 拥有的项目的最高角色。因此:

  • 用户 1 以 Guest 角色添加到 manager 子组,并在 engineering 项目中获得 Guest 角色。
  • 用户 2 以 Owner 角色添加到 manager 组。此角色高于您设置的最大角色(Maintainer),因此用户 2 获得 Maintainer 角色而非 Owner。

要将用户添加到 frontend 子组:

  1. 在左侧边栏,选择 搜索或跳转至 并搜索 frontend。选择 Frontend 组。
  2. 选择 管理 > 成员
  3. 选择 邀请成员
  4. 填写字段。默认选择 Developer 角色,如果此用户审查他人的工作,则将其提升为 Maintainer
  5. 选择 邀请
  6. 重复这些步骤,直到将所有前端工程师添加到 frontend 子组中。

现在对 backendmanagers 组执行相同操作。同一用户可以是多个子组的成员。

创建 Excelsior 项目

现在您的组结构已经就位,为团队创建 excelsior 项目来工作。由于涉及前端和后端工程师,excelsior 应该属于 engineering,而不是您刚刚创建的任何较小的子组。

要创建新的 excelsior 项目:

  1. 在左侧边栏,选择 搜索或跳转至 并 搜索 engineering。选择名为 Engineering 的组。
  2. engineering 组的概览页面,在左侧边栏顶部, 选择 新建 ( plus ) 和 在此组中 > 新建项目/仓库
  3. 选择 创建空白项目
  4. 输入项目详情:
    • 项目名称 字段中,输入 Excelsior项目 slug 应 自动填充为 excelsior
    • 对于 可见性级别,选择 公开
    • 选择 使用 README 初始化仓库 以向仓库添加初始文件。
  5. 选择 创建项目

GitLab 为您创建 excelsior 项目,并将您重定向到其主页。它应该看起来像这样:

您的新、几乎为空的 excelsior 项目

您将在下一步中使用此页面上的一个功能。

添加基本的 CODEOWNERS 文件

将 CODEOWNERS 文件添加到您项目的根目录,以将审查路由到正确的子组。此示例设置了四个规则:

  • 所有更改都应由 engineering 组中的某人进行审查。
  • 管理人员应审查对 CODEOWNERS 文件本身的任何更改。
  • 前端工程师应审查对前端文件的更改。
  • 后端工程师应审查对后端文件的更改。

GitLab Free 仅支持可选审查。要使审查成为必需,您需要 GitLab Premium 或 Ultimate。

要将 CODEOWNERS 文件添加到您的 excelsior 项目中:

  1. 在左侧边栏,选择 搜索或跳转至 并 搜索 Excelsior。选择名为 Excelsior 的项目。

  2. 在分支名称旁边,选择加号图标 ( plus ),然后 新建文件 在项目中创建新文件

  3. 对于 文件名,输入 CODEOWNERS。这将在您项目的根目录中创建一个名为 CODEOWNERS 的文件。

  4. 将此示例粘贴到编辑区域,如果 @engineering/ 与您的组结构不匹配,请进行更改:

    # 所有更改都应由 engineering 组中的某人进行审查
    * @engineering
    
    # 管理人员应审查对此文件的任何更改
    CODEOWNERS @engineering/managers
    
    # 前端文件应由 FE 工程师审查
    [Frontend] @engineering/frontend
    *.scss
    *.js
    
    # 后端文件应由 BE 工程师审查
    [Backend] @engineering/backend
    *.rb
  5. 对于 提交消息,粘贴:

    添加新的 CODEOWNERS 文件
    
    创建一个小的 CODEOWNERS 文件以:
    - 将后端和前端更改路由到正确的团队
    - 将 CODEOWNERS 文件更改路由到管理人员
    - 请求所有更改都得到审查
  6. 选择 提交更改

CODEOWNERS 文件现在已位于您项目的 main 分支中,并且适用于在此项目中创建的所有未来分支。

配置审批规则

CODEOWNERS 文件描述了目录和文件类型的适当审查者。审批规则将合并请求引导到这些审查者。在这里,您将设置一个使用新 CODEOWNERS 文件信息并为发布分支添加保护的审批规则:

  1. 在左侧边栏,选择 搜索或跳转至 并 搜索 Excelsior。选择名为 Excelsior 的项目。
  2. 选择 设置 > 合并请求
  3. 合并请求审批 部分,滚动到 审批规则
  4. 选择 添加审批规则
  5. 创建一个名为 Enforce CODEOWNERS 的规则。
  6. 选择 所有受保护分支
  7. 要使规则在 GitLab Premium 和 GitLab Ultimate 中成为必需, 将 所需审批数 设置为 1
  8. managers 组添加为审批者。
  9. 选择 添加审批规则
  10. 滚动到 审批设置 并确保 防止在合并请求中编辑审批规则 已被选中。
  11. 选择 保存更改

添加后,Enforce CODEOWNERS 规则看起来像这样:

新的审批规则已就位

在分支上强制执行 CODEOWNER 审批

您已经为您的项目配置了多项保护,现在您准备将这些保护结合起来,以保护项目的重要分支:

  • 您的用户被分为逻辑组和子组。
  • 您的 CODEOWNERS 文件描述了文件类型和目录的主题专家。
  • 您的审批规则鼓励(在 GitLab Free 中)或要求(在 GitLab Premium 和 GitLab Ultimate 中) 主题专家审查更改。

您的 excelsior 项目使用语义化版本控制来命名发布分支,因此您知道发布分支遵循 1.x1.x.x 的模式。您希望添加到这些分支的所有代码都由主题专家进行审查,并由管理人员决定哪些工作合并到发布分支中。

与其一次为一个分支创建保护,不如配置通配符分支规则来保护多个分支:

  1. 在左侧边栏,选择 搜索或跳转至 并 搜索 Excelsior。选择名为 Excelsior 的项目。
  2. 选择 设置 > 仓库
  3. 展开 受保护分支
  4. 分支 下拉列表中,输入 1.*,然后选择 创建通配符 1.*
  5. 要求每个人都提交合并请求,而不是直接推送提交:
    1. 允许合并 设置为 Maintainers
    2. 允许推送和合并 设置为
    3. 保持 允许强制推送 禁用。
  6. 在 GitLab Premium 和 GitLab Ultimate 中,要求代码所有者审查他们工作的文件的更改,切换 需要代码所有者审批
  7. 选择 保护
  8. 在分支表中,找到标记为 Default 的规则。(根据 您的 GitLab 版本,此分支可能名为 mainmaster。)将此分支的值设置为与您用于 1.* 规则的设置匹配。

您的规则现在已经就位,尽管还没有 1.* 分支存在:

main 和 1.x 现在已受保护

创建发布分支

现在所有分支保护都已就位,您可以准备创建 1.0.0 发布分支了:

  1. 在左侧边栏,选择 搜索或跳转至 并 搜索 Excelsior。选择名为 Excelsior 的项目。
  2. 选择 代码 > 分支
  3. 在右上角,选择 新建分支。将其命名为 1.0.0
  4. 选择 创建分支

分支保护现在在 UI 中可见:

  • 在左侧边栏,选择 代码 > 分支。在分支列表中, 分支 1.0.0 应显示它受到保护:

    分支列表,显示 1.0.0 受到保护

  • 在左侧边栏,选择 设置 > 仓库,然后展开 分支规则 以查看有关所有受保护分支的详细信息:

    受保护分支及其保护的列表

恭喜!您的工程师可以在自己的分支中独立工作,所有提交以考虑合并到 1.0.0 发布分支的代码都将由主题专家进行审查。