如何在VSTS部署前获取预部署审批人的名称?
获取VSTS/Azure DevOps预部署审批人名称的方法
很遗憾,目前Azure DevOps(原VSTS)的预定义发布变量里并没有直接提供预部署审批人的名称,官方文档里确实没提到这个变量。不过你可以通过以下几种方式来获取这个信息:
方法1:调用Azure DevOps REST API
你可以在部署阶段的脚本任务中调用Release Approval API来获取审批记录,从中提取审批人信息。具体步骤如下:
- 首先,使用预定义变量
$(Release.ReleaseId)获取当前发布的ID - 调用API:
GET https://dev.azure.com/{你的组织名}/{项目名}/_apis/release/releases/$(Release.ReleaseId)/approvals?api-version=7.1-preview.1 - 解析返回的JSON响应,找到对应预部署环境的审批项,提取
approvedBy字段里的名称
举个PowerShell脚本的例子:
$orgName = "你的组织名" $projectName = "你的项目名" $releaseId = "$(Release.ReleaseId)" $patToken = "$(System.AccessToken)" # 使用系统提供的访问令牌,需要在任务中启用"允许脚本访问OAuth令牌" $headers = @{ Authorization = "Bearer $patToken" } $apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/release/releases/$releaseId/approvals?api-version=7.1-preview.1" $approvals = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get # 筛选出预部署环境的审批记录(替换为你的环境名称) $preDeploymentApproval = $approvals.value | Where-Object { $_.releaseEnvironment.name -eq "预部署环境名" -and $_.status -eq "approved" } # 获取审批人名称 $approverName = $preDeploymentApproval.approvedBy.displayName # 可以将这个值设置为自定义变量,供后续任务使用 Write-Host "##vso[task.setvariable variable=PreDeploymentApprover;]$approverName"
注意:需要在脚本任务的"代理作业设置"里勾选"允许脚本访问OAuth令牌",这样才能使用$(System.AccessToken)调用API。
方法2:使用第三方扩展
Azure DevOps Marketplace上有一些扩展可以帮助你捕获审批人信息并设置为发布变量,比如类似"Approval Tracker"这类扩展,安装后可以在审批完成后自动将审批人信息存入自定义变量,供后续部署任务使用。不过选择扩展时要注意选择可信的、维护良好的版本。
方法3:通过工作流自定义记录
如果你的需求只是记录审批人,也可以在审批完成后的部署阶段添加一个日志任务,将通过API获取到的审批人信息输出到部署日志中,方便后续查看。
总结一下,虽然没有原生变量直接获取审批人,但通过API或者扩展的方式完全可以实现你的需求。
内容的提问来源于stack exchange,提问作者user3417479
相关产品推荐
相关产品推荐

