群组级受保护环境 API (PREMIUM ALL)

  • 引入于极狐GitLab 14.0。部署在 group_level_protected_environments 标志后,默认禁用。

  • 功能标记 group_level_protected_environments 移除于极狐GitLab 14.3。

  • 普遍可用于极狐GitLab 14.3。

您还可以阅读群组级受保护环境

有效访问级别

ProtectedEnvironments::DeployAccessLevel::ALLOWED_ACCESS_LEVELS 中定义了访问级别。级别为:

30 => Developer access
40 => Maintainer access
60 => Admin access

列出群组级受保护环境

获取群组的受保护环境的列表。

GET /groups/:id/protected_environments
参数 类型 是否必需 描述
id integer/string yes 经过身份验证的用户维护的 ID 或 URL 编码的群组路径
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/protected_environments/"

响应示例:

[
  {
    "name":"production",
    "deploy_access_levels":[
      {
        "id": 12,
        "access_level": 40,
        "access_level_description": "Maintainers",
        "user_id": null,
        "group_id": null
      }
    ],
    "required_approval_count": 0
  }
]

获取单个受保护环境

获取单个受保护环境。

GET /groups/:id/protected_environments/:name
参数 类型 是否必需 描述
id integer/string yes 经过身份验证的用户维护的 ID 或 URL 编码的群组路径
name string yes 受保护环境的部署级别。是 productionstagingtestingdevelopmentother 之一。阅读更多关于部署级别的内容
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/protected_environments/production"

响应示例:

{
  "name":"production",
  "deploy_access_levels":[
    {
      "id": 12,
      "access_level":40,
      "access_level_description":"Maintainers",
      "user_id":null,
      "group_id":null
    }
  ],
  "required_approval_count": 0
}

保护单个环境

保护单个环境。

POST /groups/:id/protected_environments
参数 类型 是否必需 描述
id integer/string yes 经过身份验证的用户维护的 ID 或 URL 编码的群组路径
name string yes 受保护环境的部署级别。是 productionstagingtestingdevelopmentother 之一。阅读更多关于部署级别的内容
deploy_access_levels array yes 允许部署的访问级别的阵列,通过哈希描述。是 user_idgroup_idaccess_level 之一。它们各自采用 {user_id: integer}{group_id: integer}{access_level: integer} 的形式
required_approval_count integer no 部署到环境所需的批准的数量。是部署批准的一部分,暂时不可用
approval_rules array no 允许批准的访问级别的阵列,通过哈希描述。是 user_idgroup_idaccess_level 之一。它们各自采用 {user_id: integer}{group_id: integer}{access_level: integer} 的形式。您也可以使用 required_approvals 字段指定特定实体所需的批准的数量。详情请参见多个批准规则

可分配的 user_id 是属于特定群组的拥有维护者角色(及以上)的用户。 可分配的 group_id 是特定群组下面的子群组。

curl --header 'Content-Type: application/json' --request POST --data '{"name": "production", "deploy_access_levels": [{"group_id": 9899826}]}' --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/22034114/protected_environments"

响应示例:

{
  "name":"production",
  "deploy_access_levels":[
    {
      "id": 12,
      "access_level": 40,
      "access_level_description": "protected-access-group",
      "user_id": null,
      "group_id": 9899826
    }
  ],
  "required_approval_count": 0
}

更新受保护环境

引入于极狐GitLab 15.4。

更新单个环境。

PUT /groups/:id/protected_environments/:name
参数 类型 是否必需 描述
id integer/string yes 经过身份验证的用户维护的 ID 或 URL 编码的群组路径
name string yes 受保护环境的部署级别:productionstagingtestingdevelopmentother。更多内容请参见部署级别
deploy_access_levels array no 哈希描述的允许部署的访问级别阵列:user_idgroup_idaccess_level。形式为 {user_id: integer}{group_id: integer}{access_level: integer}
required_approval_count integer no 需要部署到此环境中的批准数量
approval_rules array no 哈希描述的允许批准的访问级别阵列:user_idgroup_idaccess_level。形式为 {user_id: integer}{group_id: integer}{access_level: integer}。您也可以使用 required_approvals 字段指定特定实体必需批准的数量。更多内容请参见多个批准规则

更新:

  • user_id:确保更新后的用户属于具有维护者角色(或以上)的特定群组。您还必须在相应的哈希中传递 deploy_access_levelapproval_ruleid
  • group_id:确保更新后的群组是此受保护环境所属群组的子组。您还必须在相应的哈希中传递 deploy_access_levelapproval_ruleid

删除:

  • 您必须将 _destroy 传递为 true,参见下例。

示例:创建 deploy_access_level 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"deploy_access_levels": [{"group_id": 9899829, access_level: 40}], "required_approval_count": 1}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"

响应示例:

{
   "name": "production",
   "deploy_access_levels": [
      {
         "id": 12,
         "access_level": 40,
         "access_level_description": "protected-access-group",
         "user_id": null,
         "group_id": 9899829,
         "group_inheritance_type": 1
      }
   ],
   "required_approval_count": 0
}

示例:更新 deploy_access_level 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"deploy_access_levels": [{"id": 12, "group_id": 22034120}], "required_approval_count": 2}' \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"
{
   "name": "production",
   "deploy_access_levels": [
      {
         "id": 12,
         "access_level": 40,
         "access_level_description": "protected-access-group",
         "user_id": null,
         "group_id": 22034120,
         "group_inheritance_type": 0
      }
   ],
   "required_approval_count": 2
}

示例:删除 deploy_access_level 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"deploy_access_levels": [{"id": 12, "_destroy": true}], "required_approval_count": 0}' \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"

响应示例:

{
   "name": "production",
   "deploy_access_levels": [],
   "required_approval_count": 0
}

示例:创建 approval_rule 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"approval_rules": [{"group_id": 134, "required_approvals": 1}]}' \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"

响应示例:

{
   "name": "production",
   "approval_rules": [
      {
         "id": 38,
         "user_id": null,
         "group_id": 134,
         "access_level": null,
         "access_level_description": "qa-group",
         "required_approvals": 1,
         "group_inheritance_type": 0
      }
   ]
}

示例:更新 approval_rule 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"approval_rules": [{"id": 38, "group_id": 135, "required_approvals": 2}]}' \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"
{
   "name": "production",
   "approval_rules": [
      {
         "id": 38,
         "user_id": null,
         "group_id": 135,
         "access_level": null,
         "access_level_description": "security-group",
         "required_approvals": 2,
         "group_inheritance_type": 0
      }
   ]
}

示例:删除 approval_rule 记录

curl --header 'Content-Type: application/json' --request PUT \
     --data '{"approval_rules": [{"id": 38, "_destroy": true}]}' \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/22034114/protected_environments/production"

响应示例:

{
   "name": "production",
   "approval_rules": []
}

不保护单个环境

不保护特定的受保护环境。

DELETE /groups/:id/protected_environments/:name
参数 类型 是否必需 描述
id integer/string yes 经过身份验证的用户维护的 ID 或 URL 编码的群组路径
name string yes 受保护环境的部署级别。是 productionstagingtestingdevelopmentother 之一。阅读更多关于部署级别的内容
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/5/protected_environments/staging"

响应应该返回 200。