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

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

当你的团队开始一个新项目时,他们需要一种能够在效率和适当审查之间取得平衡的工作流。在极狐GitLab中,你可以创建用户群组,将这些群组与分支保护相结合,然后通过审批规则来实施这些保护。

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

  1. 创建 engineering 群组
  2. engineering 中创建子群组
  3. 将用户添加到子群组
  4. 创建 Excelsior 项目
  5. 添加一个基本的 CODEOWNERS 文件
  6. 配置审批规则
  7. 在分支上实施 CODEOWNER 审批
  8. 创建发布分支

在你开始之前#

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

创建 engineering 群组#

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

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

接下来,你将为该 engineering 群组添加子群组,以实现更细粒度的控制。

engineering 中创建子群组#

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

在这里,你将在 Engineering 群组中创建三个更细化的子群组,以根据他们的工作类型对用户进行分段:managersfrontendbackend。然后你将这些新群组添加为 engineering 群组的成员。

首先,创建新子群组:

  1. 在左侧边栏,选择 搜索或前往 并搜索 engineering。选择名为 Engineering 的群组:

    搜索结果中的工程群组

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

  3. 子群组名称 中输入 Managers

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

  5. 选择 创建子群组

接下来,将子群组添加为 engineering 群组的成员:

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

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

The engineering group has three subgroups

将用户添加到子群组#

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

  • 用户 1 被添加到 manager 子群组中,拥有访客角色,并在 engineering 项目中获得访客角色。
  • 用户 2 被添加到 manager 群组中,拥有所有者角色。这个角色高于你设置的最高角色(维护者),所以用户 2 获得维护者角色而不是所有者。

要将用户添加到 frontend 子群组:

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

现在对 backendmanagers 群组做同样的事情。同一用户可以是多个子群组的成员。

创建 Excelsior 项目#

现在你的群组结构已经到位,为团队创建 excelsior 项目进行工作。因为涉及到前端和后端工程师,所以 excelsior 应该属于 engineering 而不是你刚创建的任何较小的子群组。

要创建新的 excelsior 项目:

  1. 在左侧边栏,选择 搜索或前往 并搜索 engineering。选择名为 Engineering 的群组。
  2. engineering 群组的概览页面上,在左侧边栏顶部,选择 新建 () 和 在此群组中 > 新建项目/仓库
  3. 选择 创建空白项目
  4. 输入项目详细信息:
    • 项目名称 字段中输入 Excelsior项目短链接 应自动填充为 excelsior
    • 对于 可见性级别,选择 公开
    • 选择 使用README初始化仓库 以在存储库中添加一个初始文件。
  5. 选择 创建项目

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

Your new, almost-empty excelsior project

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

添加一个基本的 CODEOWNERS 文件#

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

  • 所有更改都应由 engineering 群组中的某人审查。
  • 经理应审查对 CODEOWNERS 文件本身的任何更改。
  • 前端工程师应审查对前端文件的更改。
  • 后端工程师应审查对后端文件的更改。
极狐GitLab 基础版仅支持可选审查。要使审查成为必需,你需要极狐GitLab 专业版或旗舰版。

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

  1. 在左侧边栏,选择 Search or go to 并搜索 Excelsior。选择名为 Excelsior 的项目。

  2. 在分支名称旁边,选择加号图标 (

    ),然后选择 New file: Create a new file in the project

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

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

    plaintext
    1# All changes should be reviewed by someone in the engineering group 2* @engineering 3 4# A manager should review any changes to this file 5CODEOWNERS @engineering/managers 6 7# Frontend files should be reviewed by FE engineers 8[Frontend] @engineering/frontend 9*.scss 10*.js 11 12# Backend files should be reviewed by BE engineers 13[Backend] @engineering/backend 14*.rb
  5. 对于 提交信息,粘贴:

    plaintext
    1Adds a new CODEOWNERS file 2 3Creates a small CODEOWNERS file to: 4- Route backend and frontend changes to the right teams 5- Route CODEOWNERS file changes to managers 6- Request all changes be reviewed
  6. 选择 提交变更

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

配置审批规则#

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

  1. 在左侧边栏,选择 搜索或前往 并搜索 Excelsior。选择名为 Excelsior 的项目。
  2. 选择 设置 > 合并请求
  3. 合并请求审批 部分,滚动到 审批规则
  4. 选择 添加审批规则
  5. 创建一个名为 强制 CODEOWNERS 的规则。
  6. 选择 所有受保护分支
  7. 要在极狐GitLab 专业版和极狐GitLab 旗舰版中使规则成为必需,请将 所需审批数 设置为 1
  8. 添加 managers 群组作为审查者。
  9. 选择 添加审批规则
  10. 滚动到 审批设置 并确保选择了 防止在合并请求中编辑审批规则
  11. 选择 保存更改

添加后,Enforce CODEOWNERS 规则如下所示:

New approval rule in place

在分支上实施 CODEOWNER 审批#

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

  • 你的用户已被分类到逻辑的群组和子群组中。
  • 你的 CODEOWNERS 文件描述了文件类型和目录的主题专家。
  • 你的审批规则在极狐GitLab 基础版中鼓励(或在极狐GitLab 专业版和极狐GitLab 旗舰版中要求)主题专家审查更改。

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

而不是为单个分支创建保护,配置通配符分支规则以保护多个分支:

  1. 在左侧边栏,选择 搜索或前往 并搜索 Excelsior。选择名为 Excelsior 的项目。
  2. 选择 设置 > 仓库
  3. 展开 受保护分支
  4. 分支 下拉列表中,输入 1.*,然后选择 创建通配符 1.*
  5. 要求每个人提交合并请求,而不是直接推送提交:
    1. 允许合并 设置为 维护者
    2. 允许推送和合并 设置为 无人
    3. 保持 允许强制推送 禁用。
  6. 在极狐GitLab 专业版和极狐GitLab 旗舰版中,要要求代码所有者审查他们所处理文件的更改,请切换 需要代码所有者批准
  7. 选择 保护
  8. 在分支表中,找到标记为 默认 的规则。(根据你使用的极狐GitLab 版本,这个分支可能命名为 mainmaster。)将该分支的值设置为与你为 1.* 规则使用的设置相匹配。

你的规则现在已就位,即使尚不存在 1.* 分支:

main and 1.x are now protected

创建发布分支#

现在所有分支保护措施已就位,你准备创建你的 1.0.0 发布分支:

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

现在 UI 中可见分支保护:

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

    List of branches, showing 1.0.0 is protected

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

    List of protected branches and their protections

恭喜!你的工程师可以在他们的分支中独立工作,并且所有提交给 1.0.0 发布分支的代码都将由主题专家审查。