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

当您的项目开始一个新项目时,他们需要一个工作流程,平衡效率和适当的审查。 在极狐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. 在左侧边栏,顶部,选择 创建新的 ( ),然后选择 新群组

    The engineering group in search results

  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 组重复此过程。 完成后,再次搜索 engineering 群组。 相同用户可以是多个子群组的成员。

创建Excelsior 项目

现在您的群组结构已经到位,您可以创建 excelsior 项目,供团队在此工作。 由于前端和后端工程师都参与其中,因此 excelsior 应该属于 engineering 而不是您刚刚创建的较小子群组之一。

要创建新的 excelsior 项目:

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

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

Your new, almost-empty excelsior project

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

添加基本的 CODEOWNERS 文件

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

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

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

  1. 在左侧边栏,选择 搜索或前往,然后搜索 Excelsior。 选择名为 Excelsior 的项目。
  2. 在分支名称旁边,选择加号图标 ( ),然后选择 新建文件在项目中创建新文件
  3. 对于 文件名,输入 CODEOWNERS。 这将在您的项目根目录中创建一个名为 CODEOWNERS 的文件。
  4. 将此示例粘贴到编辑区域,如果 @engineering/ 与您的组结构不匹配,则进行更改:

    # All changes should be reviewed by someone in the engineering group
    * @engineering
    
    # A manager should review any changes to this file
    CODEOWNERS @engineering/managers
    
    # Frontend files should be reviewed by FE engineers
    [Frontend] @engineering/frontend
    *.scss
    *.js
    
    # Backend files should be reviewed by BE engineers
    [Backend] @engineering/backend
    *.rb
    
  5. 对于 提交消息,粘贴:

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

CODEONWERS 文件现在已放置在您的项目 main 分支中,并可供此项目中创建的所有未来分支使用。

配置审批规则

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

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

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

New approval rule in place

在分枝上强制 CODEOWNER 审批

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

  • 您的用户被分成逻辑群组和子尊组。
  • 您的 CODEOWNERS 文件描述了文件类型和目录的领域专家。
  • 您的审批规则鼓励 (在极狐GitLab Free 中) 或要求 (在极狐GitLab 专业版和极狐GitLab 旗舰版中) 领域专家审查更改。

您的 excelsior 项目使用 语义版本 作为发布分支名称,因此您知道发布分支遵循 1.x1.x.x 的模式。 您希望将所有代码添加到这些分支,由领域专家审查,并由经理做出最终决定,以将哪些工作合并到发布分支中。

与其为每个分支创建保护,配置通配符分支规则以保护多个分支:

  1. 在左侧导航栏,选择 搜索或前往,然后搜索 Excelsior。 选择名为 Excelsior 的项目。
  2. 选择 设置 > 存储库
  3. 展开 保护分支
  4. 分支 下拉菜单中,输入 1.*,然后选择 创建通配符 1.*
  5. 要要求每个人提交合并请求,而不是直接推送提交:
    1. 允许合并 设置为 维护者
    2. 允许推送和合并 设置为
    3. 保留 允许强制推送 未选中。
  6. 在极狐GitLab 专业版和极狐GitLab 旗舰版中,要要求代码所有者审查他们工作的文件,请切换 要求代码所有者批准
  7. 选择 保护
  8. 在分支表中,找到标记为 Default 的规则。 (根据您使用的 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 发布分支的代码都将由领域专家审查。