如何通过Azure获取Azure管道挂起状态

a11xaf1n  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个Azure管道,它需要手动批准才能进入最后阶段,我想做的事情如下:
1.取流水线状态
1.当状态为“等待”或“挂起”时,使用API批准
我尝试了一些命令,如以下命令来获取管道状态:
az pipelines build list --organization <org> --project <project>
az pipelines runs show --id <run id> --organization <org> --project <project>但对于输出,它们都带有**“status”:“inProgress”而不是预期的“pending/waiting”**
问题将是,是否有其他方法可以通过状态或其他可扩展性输出或任何建议来判断管道是否正在等待批准?

pn9klfpd

pn9klfpd1#

找不到用于检索挂起状态的Azure CLI命令。但是,我们可以通过调用Approvals - Query REST API获取挂起状态。

然后调用Approvals - Update REST API来批准挂起。

我们可以在脚本中调用REST API,只需首先获取所有待定的批准,然后在循环中批准它们。以下PowerShell脚本供您参考:

Param(
   [string]$orgnurl = "https://dev.azure.com/{org}",
   [string]$projectName = "0424Test",
   [string]$user = "",
   [string]$token = "PAT"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

#Get all the pending approvals

$approvalsurl = "$orgnurl/$projectName/_apis/pipelines/approvals?api-version=7.1-preview.1"

$approvals = ((Invoke-RestMethod -Uri $approvalsurl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}).value | Where {$_.status -eq 'pending'}).id

cls
write-host "Pending approvals:"$approvals

#Approve the pendings in a loop

foreach ($approvalId in $approvals){

function CreateJsonBody
{

    $value = @"   
    [
      {
        "approvalId": "$approvalId",
        "comment": "Approving",
        "status": "approved"
      }
    ]  
"@

 return $value
}

$json = CreateJsonBody

$approveurl = "$orgnurl/$projectName/_apis/pipelines/approvals?api-version=7.1-preview.1" 
$result = Invoke-RestMethod -Uri $approveurl -Method PATCH -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Write-Host ($result | ConvertTo-Json -Depth 20)
}

截图供您参考:
待批准:

批准:

相关问题