Как мне автоматически отменить выпуск, ожидающий утверждения ПОСЛЕ РАЗВЕРТЫВАНИЯ, когда доступен новый выпуск?

Я понимаю, как это сделать для выпусков, ожидающих утверждения ПРЕДВАРИТЕЛЬНОГО РАЗВЕРТЫВАНИЯ. Это в Условиях перед развертыванием> Параметры очереди развертывания> Последующие выпуски> Развернуть последние и отменить другие. И есть много существующих сообщений StackOverflow, в которых спрашивается, как это сделать для утверждения ПРЕДВАРИТЕЛЬНОГО РАЗВЕРТЫВАНИЯ. Но для ПОСЛЕ РАЗВЕРТЫВАНИЯ, похоже, нет.

Наш текущий рабочий процесс включает развертывание выпуска в нашей среде контроля качества, а затем ожидание утверждения после развертывания от группы контроля качества, прежде чем выпуск перейдет в среду PROD.

Но по мере того, как команда QA находит ошибки и устраняет их, выпуск в QA необходимо заменить. Единственный способ сделать это на данный момент - вручную отменить выпуск, который в настоящее время ожидает утверждения после развертывания, чтобы можно было развернуть последний выпуск.

Это становится довольно утомительно, так как я должен следить за этим сам и делать все вручную. Нет возможности автоматизировать это?

1 ответ

Решение

Вы можете обратиться к этому билету: Невозможно утвердить последний выпуск Azure devOps

Опция : Deploy latest and cancel others поддерживает только ожидаемое одобрение ПРЕДВАРИТЕЛЬНОГО РАЗВЕРТЫВАНИЯ.

Нет возможности автоматизировать это?

Вы можете добавить задачу PowerShell на этапе конвейера выпуска, чтобы запустить следующие API-интерфейсы Rest, чтобы получить выпуск (ожидает утверждения POST-DEPLOYMENT) и отменить выпуск .

Вот пример 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
}

}

Когда вы создаете новый выпуск, новый этап запускает задачу Powershell для отмены всех этапов (ожидающих утверждения POST-DEPLOYMENT).

Примечание: вам необходимо установить максимальное количество параллельных развертываний как минимум на 2.

Другие вопросы по тегам