受保护的环境 API
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
使用此 API 与 受保护的环境 进行交互。
对于群组级别的受保护环境,请参阅 群组级别受保护环境 API
有效的访问级别
访问级别在 ProtectedEnvironments::DeployAccessLevel::ALLOWED_ACCESS_LEVELS 方法中定义。
目前,这些级别被识别为:
30 => 开发者访问权限
40 => 维护者访问权限
60 => 管理员访问权限群组继承类型
群组继承允许部署访问级别和访问规则考虑继承的群组成员资格。群组继承类型由 ProtectedEnvironments::Authorizable::GROUP_INHERITANCE_TYPE 定义。
以下类型被识别为:
0 => 仅直接群组成员资格(默认)
1 => 所有继承的群组列出受保护的环境
从项目中获取受保护环境的列表:
GET /projects/:id/protected_environments| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
integer/string | 是 | 项目的 ID 或 URL 编码路径。 |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/protected_environments/"示例响应:
[
{
"name":"production",
"deploy_access_levels":[
{
"id": 12,
"access_level":40,
"access_level_description":"维护者",
"user_id":null,
"group_id":null,
"group_inheritance_type": 0
}
],
"required_approval_count": 0
}
]获取单个受保护的环境
获取单个受保护的环境:
GET /projects/:id/protected_environments/:name| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
integer/string | 是 | 项目的 ID 或 URL 编码路径 |
name |
string | 是 | 受保护环境的名称 |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/protected_environments/production"示例响应:
{
"name":"production",
"deploy_access_levels":[
{
"id": 12,
"access_level": 40,
"access_level_description": "维护者",
"user_id": null,
"group_id": null,
"group_inheritance_type": 0
}
],
"required_approval_count": 0
}保护单个环境
保护单个环境:
POST /projects/:id/protected_environments| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
integer/string | 是 | 项目的 ID 或 URL 编码路径。 |
name |
string | 是 | 环境的名称。 |
deploy_access_levels |
array | 是 | 允许部署的访问级别数组,每个由一个哈希值描述。 |
approval_rules |
array | 否 | 允许批准的访问级别数组,每个由一个哈希值描述。请参阅 多重审批规则。 |
deploy_access_levels 和 approval_rules 数组中的元素应该是 user_id、group_id 或 access_level 之一,并采用 {user_id: integer}、{group_id: integer} 或 {access_level: integer} 的形式。可选地,您可以将每个的 group_inheritance_type 指定为 有效的群组继承类型 之一。
每个用户必须有权访问项目,每个群组必须 共享此项目。
curl --header 'Content-Type: application/json' \
--request POST \
--data '{"name": "production", "deploy_access_levels": [{"group_id": 9899826}], "approval_rules": [{"group_id": 134}, {"group_id": 135, "required_approvals": 2}]}' \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/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,
"group_inheritance_type": 0
}
],
"required_approval_count": 0,
"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
},
{
"id": 39,
"user_id": null,
"group_id": 135,
"access_level": null,
"access_level_description": "security-group",
"required_approvals": 2,
"group_inheritance_type": 0
}
]
}更新受保护的环境
更新单个环境。
PUT /projects/:id/protected_environments/:name| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
integer/string | 是 | 项目的 ID 或 URL 编码路径。 |
name |
string | 是 | 环境的名称。 |
deploy_access_levels |
array | 否 | 允许部署的访问级别数组,每个由一个哈希值描述。 |
approval_rules |
array | 否 | 允许批准的访问级别数组,每个由一个哈希值描述。有关更多信息,请参阅 多重审批规则。 |
deploy_access_levels 和 approval_rules 数组中的元素应该是 user_id、group_id 或 access_level 之一,并采用 {user_id: integer}、{group_id: integer} 或 {access_level: integer} 的形式。可选地,您可以将每个的 group_inheritance_type 指定为 有效的群组继承类型 之一。
要更新:
user_id:确保更新的用户有权访问项目。您还必须在相应的哈希值中传递deploy_access_level或approval_rule的id。group_id:确保更新的群组 共享此项目。您还必须在相应的哈希值中传递deploy_access_level或approval_rule的id。
要删除:
- 您必须传递
_destroy设置为true。请参阅以下示例。
示例:创建 deploy_access_level 记录
curl --header 'Content-Type: application/json' \
--request PUT \
--data '{"deploy_access_levels": [{"group_id": 9899829, access_level: 40}]' \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/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}]}' \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/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}]}' \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/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>" \
--url "https://gitlab.example.com/api/v4/projects/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>" \
--url "https://gitlab.example.com/api/v4/projects/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>" \
--url "https://gitlab.example.com/api/v4/projects/22034114/protected_environments/production"示例响应:
{
"name": "production",
"approval_rules": []
}取消保护单个环境
取消给定的受保护环境:
DELETE /projects/:id/protected_environments/:name| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
id |
integer/string | 是 | 项目的 ID 或 URL 编码路径。 |
name |
string | 是 | 受保护环境的名称。 |
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/protected_environments/staging"