如何在Azure DevOps管道ManualValidation@0任务中获取审批人操作详情
如何在Azure DevOps的ManualValidation@0任务中获取操作用户详情
ManualValidation@0任务本身不会直接输出审批操作的用户信息,你可以通过调用Azure DevOps REST API在后续任务中查询对应审批步骤的用户详情,具体实现如下:
实现步骤
在你的ManualValidation任务之后添加一个PowerShell任务,利用系统访问令牌调用API获取审批记录并提取用户信息:
- task: ManualValidation@0 displayName: 'Waiting for approval' condition: eq(variables.Test_Result_Status, 'Red') timeoutInMinutes: 1400 # 任务24小时后超时 inputs: notifyUsers: | XYZ@abc.com instructions: | 恢复/拒绝流水线。 onTimeout: 'reject' - task: PowerShell@2 displayName: '获取审批用户详情' condition: succeededOrFailed() # 无论审批通过或拒绝都执行 inputs: targetType: 'inline' script: | $orgUri = "$(System.TeamFoundationCollectionUri)" $projectName = "$(System.TeamProject)" $runId = "$(System.RunId)" $accessToken = "$(System.AccessToken)" # 将令牌转换为Base64编码 $base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$accessToken")) # 构造API请求地址 $apiUrl = "$orgUri$projectName/_apis/pipelines/runs/$runId/approvals?api-version=7.1-preview.1" # 调用API获取审批记录 $approvalResponse = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization = "Basic $base64Auth"} -Method Get -ContentType "application/json" # 筛选出当前ManualValidation任务对应的审批记录 $targetApproval = $approvalResponse.value | Where-Object { $_.stepName -eq "Waiting for approval" } if ($targetApproval) { # 提取审批用户信息 $approver = $targetApproval.approver Write-Host "审批用户ID: $($approver.id)" Write-Host "审批用户名称: $($approver.displayName)" Write-Host "审批用户邮箱: $($approver.uniqueName)" Write-Host "审批操作结果: $($targetApproval.status)" # 将用户信息存入管道变量,供后续任务使用 Write-Host "##vso[task.setvariable variable=ApprovalUserId;]$($approver.id)" Write-Host "##vso[task.setvariable variable=ApprovalUserName;]$($approver.displayName)" Write-Host "##vso[task.setvariable variable=ApprovalUserEmail;]$($approver.uniqueName)" Write-Host "##vso[task.setvariable variable=ApprovalStatus;]$($targetApproval.status)" } else { Write-Warning "未找到匹配的审批记录" }
注意事项
- 确保项目的
Project Collection Build Service账户拥有读取审批记录的权限,默认权限通常足够,若遇权限问题需在项目设置中调整。 - API版本
7.1-preview.1可根据你的Azure DevOps版本调整为对应可用版本。 - 筛选条件
$_.stepName -eq "Waiting for approval"必须与ManualValidation任务的displayName完全一致,否则无法匹配到目标审批记录。
内容的提问来源于stack exchange,提问作者Abhishek bagur
相关产品推荐
相关产品推荐

