当有新版本可用时,如何自动取消正在等待 POST-DEPLOYMENT 批准的版本?

How do I automatically cancel a release that is waiting on a POST-DEPLOYMENT approval when there is a new release available?

我了解如何为有待批准的预部署批准的版本执行此操作。它在部署前条件>部署队列设置>后续发布>部署最新并取消其他。并且有很多现有的 Whosebug post 询问如何为预部署批准执行此操作。但是似乎没有 POST-DEPLOYMENT.

我们当前的工作流程包括将发布部署到我们的 QA 环境,然后在发布移至 PROD 环境之前等待 QA 团队的 post 部署批准。

但随着 QA 团队发现错误并得到解决,QA 中的版本需要更换。目前唯一的方法是手动取消当前正在等待 post 部署批准的版本,以便可以部署最新版本。

这变得非常乏味,因为我必须自己跟踪并手动完成所有操作。没有办法自动化吗?

你可以参考这张工单:

选项:Deploy latest and cancel others 仅支持 PRE-DEPLOYMENT approval pending。

Is there no way to automate this?

您可以将发布管道阶段的 PowerShell 任务添加到 运行 以下 Rest API 到 get the Release (Pending on POST-DEPLOYMENT Approval) and cancel the release

这是 PowerShell 示例:

$token = "PAT"

$url=" https://vsrm.dev.azure.com/{ORG}/{PROJECT}/_apis/release/deployments?api-version=6.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json



Foreach($status in $response.value.postDeployApprovals)
{

  echo $status.status
  $compare = "pending"

  if($status.status -eq $compare )
  {
 
    echo $status.release.id
    $releaseid = $status.release.id

    echo $status.releaseEnvironment.id
    $environmentid = $status.releaseEnvironment.id

    $url1="https://vsrm.dev.azure.com/{org}/{project}/_apis/Release/releases/$($releaseid)/environments/$($environmentid)?api-version=6.0-preview.6"
    echo $url1

    $JSON = @'
    {
      
        "status": "canceled",
        "scheduledDeploymentTime": null,
        "comment": null,
        "variables": {}
      
    }  
'@
$response = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method PATCH -Body $JSON -ContentType application/json
}

}

当您创建一个新的 Release 时,新阶段将 运行 Powershell 任务取消所有阶段(等待 POST-DEPLOYMENT 批准)。

注意:您需要将最大并行部署数设置为至少 2。