部署批准

引入于 14.7 版本,功能标志名为 deployment_approvals。默认禁用。 功能标志移除于 14.8 版本。

在部署到某些受保护的环境(例如,生产环境)之前要求额外的批准可能很有用。部署前批准要求对于适应每次部署之前必须进行的测试、安全性或合规性流程很有用。

当受保护的环境需要一个或多个批准时,该环境的所有部署都会被阻止,并在运行前等待所需的来自 Allowed to Deploy 列表的批准。

要求

为项目配置部署批准

为项目配置部署批准:

  1. 创建部署作业
  2. 需要为受保护环境批准

创建部署作业

在所需项目的 .gitlab-ci.yml 文件中创建部署作业。这个作业不需要手动(when:manual)。

示例:

   stages:
     - deploy

   production:
     stage: deploy
     script:
       - 'echo "Deploying to ${CI_ENVIRONMENT_NAME}"'
     environment:
       name: ${CI_JOB_NAME}

需要为受保护环境批准

配置批准要求有两种方式:

  • 统一批准设置:您可以定义谁可以执行批准部署。 当组织中的执行者和批准者之间没有职责分离时。
  • 多个批准规则:您可以定义谁可以执行批准部署。 当组织中的执行者和批准者之间存在职责分离时。
note多个批准规则是比统一批准设置更灵活的选项,因此两种配置不应共存,多个批准规则优先于统一审批设置。

统一批准设置

有两种方法可以为受保护的环境配置批准:

  1. 使用 UI
    1. 所需核准 字段设置为 1 个或更多。
  2. 使用 REST API
    1. required_approval_count 字段设置为 1 或更多。

配置完成后,部署到此环境的所有作业都会自动进入阻止状态并等待批准才能运行。确保所需的批准数量少于允许部署的用户数量。

示例:

curl --header 'Content-Type: application/json' --request POST \
     --data '{"name": "production", "deploy_access_levels": [{"group_id": 9899826}], "required_approval_count": 1}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/projects/22034114/protected_environments"
note要保护、更新或取消保护环境,您必须至少具有维护者角色。

多个批准规则

引入于 14.10 版本,带有名为 deployment_approval_rules 的功能标志。默认禁用。 一般可用于 15.0 版本。功能标志 deployment_approval_rules 删除。

  1. 使用 REST API。
    1. deploy_access_levels 表示哪个实体可以执行部署作业。
    2. approval_rules 表示哪个实体可以批准部署作业。

配置完成后,部署到此环境的所有作业都会自动进入阻止状态并等待批准才能运行。确保所需的批准数量少于允许部署的用户数量。

示例:

curl --header 'Content-Type: application/json' --request POST \
     --data '{"name": "production", "deploy_access_levels": [{"group_id": 138}], "approval_rules": [{"group_id": 134}, {"group_id": 135, "required_approvals": 2}]}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/groups/128/protected_environments"

使用此设置:

  • 运维人员组(group_id: 138)有权执行部署作业到组织中的 production 环境(group_id: 128)。
  • QA 测试人员组 (group_id: 134) 和安全组 (group_id: 135) 有权批准将部署作业部署到组织中的 production 环境 (group_id: 128)。
  • 除非已经收集到两个安全组的批准和一个 QA 测试组的批准,否则运维人员组无法执行部署作业。
note要保护、更新或取消保护环境,您必须至少具有维护者角色。

批准或拒绝部署

引入于 14.9 版本

使用 GitLab UI 或 API,您可以:

  • 批准部署使其继续进行。
  • 拒绝部署来阻止它。

使用 UI 批准或拒绝部署

先决条件:

  • 部署到受保护环境的权限。

要使用 UI 批准或拒绝部署到受保护环境:

  1. 在顶部栏上,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏上,选择 部署 > 环境
  3. 选择环境的名称。
  4. 在部署行中,选择 批准选项 ()。
  5. 可选。添加评论,说明您批准或拒绝部署的原因。
  6. 选择 批准拒绝
note当配置了多个批准规则时,此功能可能无法正常工作。

使用 API 批准或拒绝部署

先决条件:

  • 部署到受保护环境的权限。

要使用 API 批准或拒绝部署到受保护的环境,请传递所需的属性。

示例:

curl --data "status=approved&comment=Looks good to me" \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/deployments/1/approval"

如何查看被阻止的部署

使用 UI

  1. 在顶部栏上,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏上,选择 部署 > 环境
  3. 选择要部署到的环境。
  4. 寻找 blocked 标签。

使用 API

使用部署 API 查看部署。status 字段指示部署是否被阻止。

  • status 字段指示部署是否被阻止。
  • 当配置了统一批准设置时:
    • pending_approval_count 字段表示还有多少批准可以运行部署。
    • approvals 字段包含部署的批准。
  • 当配置了多个批准规则时:
    • approval_summary 字段包含每个规则的当前批准状态。