教程:为您的项目构建受保护的工作流
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
当您的团队启动新项目时,他们需要一个能平衡效率与适当审查的工作流。在 GitLab 中,您可以创建用户组,将这些组与分支保护相结合,然后通过审批规则强制执行这些保护。
本教程将为一个名为 “Excelsior” 的示例项目设置 1.x 和 1.x.x 发布分支的保护,并为该项目创建一个最小化的审批工作流:
- 创建
engineering组 - 在
engineering中创建子组 - 向子组添加用户
- 创建 Excelsior 项目
- 添加基本的 CODEOWNERS 文件
- 配置审批规则
- 在分支上强制执行 CODEOWNER 审批
- 创建发布分支
开始之前
- 您必须拥有至少 Maintainer 角色。
- 您需要一份管理人员及其电子邮件地址的列表。
- 您需要一份后端和前端工程师及其电子邮件地址的列表。
- 您了解分支名称的语义化版本控制。
创建 engineering 组
在设置 Excelsior 项目之前,您应该创建一个拥有该项目的组。在这里,您将设置 Engineering 组:
- 在左侧边栏顶部,选择 新建 ( ) 和 新建组。
- 选择 创建组。
- 对于 组名称,输入
Engineering。 - 对于 组 URL,输入
engineering。 - 将 可见性级别 设置为 私有。
- 个性化您的体验,以便 GitLab 为您显示最有用的信息:
- 对于 角色,选择 系统管理员。
- 对于 谁将使用此组? 选择 我的公司或团队。
- 对于 您将使用此组做什么? 选择 我想存储我的代码。
- 跳过邀请组成员。您将在本教程的后续部分添加用户。
- 选择 创建组。
接下来,您将向此 engineering 组添加子组,以实现更精细的控制。
在 engineering 中创建子组
engineering 组是一个良好的开端,但 Excelsior 项目的后端工程师、前端工程师和管理人员有不同的任务和不同的专业领域。
在这里,您将在 Engineering 组中创建三个更精细的子组,根据用户的工作类型进行分组:managers、frontend 和 backend。然后您将把这些新组作为成员添加到 engineering 组中。
首先,创建新的子组:
-
在左侧边栏,选择 搜索或跳转至 并搜索
engineering。选择名为Engineering的组: -
在
engineering组的概览页面右上角, 选择 新建子组。 -
对于 子组名称,输入
Managers。 -
将 可见性级别 设置为 私有。
-
选择 创建子组。
接下来,将子组作为成员添加到 engineering 组中:
- 在左侧边栏,选择 搜索或跳转至
并搜索
engineering。选择名为Engineering的组。 - 选择 管理 > 成员。
- 在右上角,选择 邀请组。
- 对于 选择要邀请的组,选择
Engineering / Managers。 - 添加子组时选择 Maintainer 角色。
这配置了子组成员在访问
engineering组及其项目时可以继承的最高角色。 - 可选。选择过期日期。
- 选择 邀请。
重复此过程以创建 backend 和 frontend 的子组。完成后,再次搜索 engineering 组。其概览页面应显示三个子组,如下所示:
向子组添加用户
在上一步中,当您将子组添加到父组(engineering)时,您限制了子组成员只能拥有 Maintainer 角色。这是他们可以继承的 engineering 拥有的项目的最高角色。因此:
- 用户 1 以 Guest 角色添加到
manager子组,并在engineering项目中获得 Guest 角色。 - 用户 2 以 Owner 角色添加到
manager组。此角色高于您设置的最大角色(Maintainer),因此用户 2 获得 Maintainer 角色而非 Owner。
要将用户添加到 frontend 子组:
- 在左侧边栏,选择 搜索或跳转至
并搜索
frontend。选择Frontend组。 - 选择 管理 > 成员。
- 选择 邀请成员。
- 填写字段。默认选择 Developer 角色,如果此用户审查他人的工作,则将其提升为 Maintainer。
- 选择 邀请。
- 重复这些步骤,直到将所有前端工程师添加到
frontend子组中。
现在对 backend 和 managers 组执行相同操作。同一用户可以是多个子组的成员。
创建 Excelsior 项目
现在您的组结构已经就位,为团队创建 excelsior 项目来工作。由于涉及前端和后端工程师,excelsior 应该属于 engineering,而不是您刚刚创建的任何较小的子组。
要创建新的 excelsior 项目:
- 在左侧边栏,选择 搜索或跳转至 并
搜索
engineering。选择名为Engineering的组。 - 在
engineering组的概览页面,在左侧边栏顶部, 选择 新建 ( ) 和 在此组中 > 新建项目/仓库。 - 选择 创建空白项目。
- 输入项目详情:
- 在 项目名称 字段中,输入
Excelsior。项目 slug 应 自动填充为excelsior。 - 对于 可见性级别,选择 公开。
- 选择 使用 README 初始化仓库 以向仓库添加初始文件。
- 在 项目名称 字段中,输入
- 选择 创建项目。
GitLab 为您创建 excelsior 项目,并将您重定向到其主页。它应该看起来像这样:
您将在下一步中使用此页面上的一个功能。
添加基本的 CODEOWNERS 文件
将 CODEOWNERS 文件添加到您项目的根目录,以将审查路由到正确的子组。此示例设置了四个规则:
- 所有更改都应由
engineering组中的某人进行审查。 - 管理人员应审查对 CODEOWNERS 文件本身的任何更改。
- 前端工程师应审查对前端文件的更改。
- 后端工程师应审查对后端文件的更改。
GitLab Free 仅支持可选审查。要使审查成为必需,您需要 GitLab Premium 或 Ultimate。
要将 CODEOWNERS 文件添加到您的 excelsior 项目中:
-
在左侧边栏,选择 搜索或跳转至 并 搜索
Excelsior。选择名为Excelsior的项目。 -
对于 文件名,输入
CODEOWNERS。这将在您项目的根目录中创建一个名为CODEOWNERS的文件。 -
将此示例粘贴到编辑区域,如果
@engineering/与您的组结构不匹配,请进行更改:# 所有更改都应由 engineering 组中的某人进行审查 * @engineering # 管理人员应审查对此文件的任何更改 CODEOWNERS @engineering/managers # 前端文件应由 FE 工程师审查 [Frontend] @engineering/frontend *.scss *.js # 后端文件应由 BE 工程师审查 [Backend] @engineering/backend *.rb -
对于 提交消息,粘贴:
添加新的 CODEOWNERS 文件 创建一个小的 CODEOWNERS 文件以: - 将后端和前端更改路由到正确的团队 - 将 CODEOWNERS 文件更改路由到管理人员 - 请求所有更改都得到审查 -
选择 提交更改。
CODEOWNERS 文件现在已位于您项目的 main 分支中,并且适用于在此项目中创建的所有未来分支。
配置审批规则
CODEOWNERS 文件描述了目录和文件类型的适当审查者。审批规则将合并请求引导到这些审查者。在这里,您将设置一个使用新 CODEOWNERS 文件信息并为发布分支添加保护的审批规则:
- 在左侧边栏,选择 搜索或跳转至 并
搜索
Excelsior。选择名为Excelsior的项目。 - 选择 设置 > 合并请求。
- 在 合并请求审批 部分,滚动到 审批规则。
- 选择 添加审批规则。
- 创建一个名为
Enforce CODEOWNERS的规则。 - 选择 所有受保护分支。
- 要使规则在 GitLab Premium 和 GitLab Ultimate 中成为必需,
将 所需审批数 设置为
1。 - 将
managers组添加为审批者。 - 选择 添加审批规则。
- 滚动到 审批设置 并确保 防止在合并请求中编辑审批规则 已被选中。
- 选择 保存更改。
添加后,Enforce CODEOWNERS 规则看起来像这样:
在分支上强制执行 CODEOWNER 审批
您已经为您的项目配置了多项保护,现在您准备将这些保护结合起来,以保护项目的重要分支:
- 您的用户被分为逻辑组和子组。
- 您的 CODEOWNERS 文件描述了文件类型和目录的主题专家。
- 您的审批规则鼓励(在 GitLab Free 中)或要求(在 GitLab Premium 和 GitLab Ultimate 中) 主题专家审查更改。
您的 excelsior 项目使用语义化版本控制来命名发布分支,因此您知道发布分支遵循 1.x 和 1.x.x 的模式。您希望添加到这些分支的所有代码都由主题专家进行审查,并由管理人员决定哪些工作合并到发布分支中。
与其一次为一个分支创建保护,不如配置通配符分支规则来保护多个分支:
- 在左侧边栏,选择 搜索或跳转至 并
搜索
Excelsior。选择名为Excelsior的项目。 - 选择 设置 > 仓库。
- 展开 受保护分支。
- 从 分支 下拉列表中,输入
1.*,然后选择 创建通配符1.*。 - 要求每个人都提交合并请求,而不是直接推送提交:
- 将 允许合并 设置为 Maintainers。
- 将 允许推送和合并 设置为 无。
- 保持 允许强制推送 禁用。
- 在 GitLab Premium 和 GitLab Ultimate 中,要求代码所有者审查他们工作的文件的更改,切换 需要代码所有者审批。
- 选择 保护。
- 在分支表中,找到标记为
Default的规则。(根据 您的 GitLab 版本,此分支可能名为main或master。)将此分支的值设置为与您用于1.*规则的设置匹配。
您的规则现在已经就位,尽管还没有 1.* 分支存在:
创建发布分支
现在所有分支保护都已就位,您可以准备创建 1.0.0 发布分支了:
- 在左侧边栏,选择 搜索或跳转至 并
搜索
Excelsior。选择名为Excelsior的项目。 - 选择 代码 > 分支。
- 在右上角,选择 新建分支。将其命名为
1.0.0。 - 选择 创建分支。
分支保护现在在 UI 中可见:
恭喜!您的工程师可以在自己的分支中独立工作,所有提交以考虑合并到 1.0.0 发布分支的代码都将由主题专家进行审查。