В Azure конвейере выпуска DevOps можно условно запросить утверждение? - PullRequest
0 голосов
/ 16 февраля 2020

Мы используем Azure DevOps Server 2019 (предварительно). Т.е. нет унифицированных конвейеров, нет конвейера выпуска YAML.

Сценарий таков:

Теперь просить человека не имеет смысла одобрение всегда. Мы можем проверять план автоматически и запрашивать утверждение только в том случае, если план содержит уничтожение ресурсов с сохранением состояния. Код сценария не является проблемой, но как запросить утверждение условно?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Как отмечалось в другом ответе, первоклассного способа сделать это не существует, но я могу предложить способ сделать это с помощью Rest API и PowerShell. Он включает в себя условный набор для задания без агента с шагом ручного вмешательства.

Таким образом, переменные деблокирования не могут проходить через задания агента или Этапы , но вы можете обновить переменную деблокирования, путем обновления экземпляра самой версии с помощью вызова API Rest. Затем вы можете использовать эту переменную в последующих заданиях или этапах.

В работе, в которой вы получаете выходные данные плана Terraform, при условии, что вы захватываете, когда есть операция Add, Change или Destroy, вы можете затем выполнить маршал вернитесь обратно в релиз и используйте его дальше по линии.

Так что пример заимствован из этого поста Stefan Stranger . Смотрите также этот пост Донаван Браун .

Предполагается, что приведенный ниже сценарий powerShell выполняется на первом этапе агента и имеет доступ к результатам вашего плана. Я предопределил переменную в определении выпуска с именем TerraformPlanResult.

$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )

Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

#update the predefined $TerraformPlanResult variable
$Release.variables.TerraformPlanResult.value = $YourPlanResult


Write-Output ('Updating Release Definition Instance')
$json = @($Release) | ConvertTo-Json -Depth 99
Invoke-RestMethod -Uri $releaseurl -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }

Теперь, когда переменная $TerraformPlanResult доступна на уровне выпуска, вы определяете задание без агента с этим условным условием.

and(succeeded(), in(variables['TerraformPlanResult'], 'Add', 'Change','Destroy'))

Conditional Manual Intervention

Теперь шаг ручного вмешательства будет выполняться только при соблюдении условия.

Несколько других замечаний:

  • Вы также хотите убедиться, что у вашего Project Collection Build Service есть права на обновление определений версий.
  • Вы хотите убедиться, что Первое задание агента имеет возможность доступа к токену OAuth, чтобы вы могли делать остальные вызовы.

    enter image description here

0 голосов
/ 17 февраля 2020

В настоящее время нет такой функции, чтобы утверждать этапы условно. Я не думаю, что мы сможем добиться этого на основе текущих возможностей.

Здесь уже представлен тикет с предложением: Условные разрешения на развертывание , вы можете go и проголосовать за него, чтобы помочь достичь в следующем выпуске.

Однако мы можем расширить условие на , используя разрешения и шлюзы для управления развертыванием , пожалуйста, проверьте его. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...