如何通过REST API为Azure DevOps环境添加/更新审批人

环境审批人配置不在Environments接口范围内,这类审批/门禁规则属于Azure DevOps Pipelines的统一检查(Checks)能力,走专门的检查配置接口实现,具体操作步骤如下:
前置准备
- 先拿到批量创建好的环境的唯一ID,创建环境的接口返回体里的
id字段就是该值,提前留存即可 - 准备好要配置的审批人/审批组的Descriptor标识,可通过Graph相关接口提前批量查询获取
- 接口鉴权沿用现有脚本的PAT或者服务主体权限即可,确保账号有环境的管理权限
接口调用说明
1. 新增审批配置
调用POST请求新增审批,接口地址格式:
POST https://dev.azure.com/{你的组织名}/{你的项目名}/_apis/pipelines/checks/configurations?api-version=7.1-preview.1
请求体结构参考:
{ "type": { "id": "8C6F20B1-D673-4F19-82B0-DB37E4358A2B", "name": "Approval" }, "settings": { "approvers": [ { "descriptor": "替换为审批人/审批组的descriptor" } ], "executionOrder": "anyOrder", "minRequiredApprovers": 1, "blockedApprovers": [], "allowCreatorToApprove": false, "timeout": 43200 }, "resource": { "type": "environment", "id": "替换为目标环境的ID", "name": "替换为目标环境名称" } }
核心字段说明:
type.id是审批检查的固定类型ID,直接使用给定值即可,无需修改executionOrder可选anyOrder(任意审批人通过即可)、inOrder(按列表顺序依次审批)minRequiredApprovers设置最少需要通过审批的人数allowCreatorToApprove控制是否允许流水线发起者自批自部署timeout是审批超时时间,单位为分钟,默认43200即30天
2. 更新已有审批配置
如果目标环境已经配置过审批,需要先调用GET接口查询现有配置的ID:
GET https://dev.azure.com/{你的组织名}/{你的项目名}/_apis/pipelines/checks/configurations?resourceType=environment&resourceId={目标环境ID}&api-version=7.1-preview.1
拿到返回结果里对应审批配置的id后,用和新增一致的请求体发送PUT请求即可,接口地址:
PUT https://dev.azure.com/{你的组织名}/{你的项目名}/_apis/pipelines/checks/configurations/{配置ID}?api-version=7.1-preview.1
PowerShell参考代码
# 配置基础参数 $orgName = "你的组织名" $projectName = "你的项目名" $pat = "你的个人访问令牌" $envId = "目标环境ID" $envName = "目标环境名" $approverDescriptors = @("审批人1的descriptor", "审批人2的descriptor") # 构造鉴权头 $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)")) $header = @{Authorization = "Basic $base64AuthInfo"} # 构造请求体 $requestBody = @{ type = @{ id = "8C6F20B1-D673-4F19-82B0-DB37E4358A2B" name = "Approval" } settings = @{ approvers = $approverDescriptors | ForEach-Object { @{descriptor = $_} } executionOrder = "anyOrder" minRequiredApprovers = 1 blockedApprovers = @() allowCreatorToApprove = $false timeout = 43200 } resource = @{ type = "environment" id = $envId name = $envName } } | ConvertTo-Json -Depth 10 # 发送请求 $apiUri = "https://dev.azure.com/$orgName/$projectName/_apis/pipelines/checks/configurations?api-version=7.1-preview.1" Invoke-RestMethod -Uri $apiUri -Method Post -Headers $header -Body $requestBody -ContentType "application/json"
注意事项
- 不要使用6.0版本的API,检查配置接口在7.1及以上版本的参数结构更稳定,6.0版本存在字段不一致的问题
- 如果要配置服务连接、变量组等其他资源的审批,只需要把
resource.type改成对应资源类型、替换资源ID即可,接口逻辑完全一致 - 审批人支持用户和Azure AD组,直接传入对应对象的descriptor即可,不需要额外区分类型
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

