You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:17:44