Это должен быть скорее комментарий (поскольку это скорее идея, чем реальное рабочее решение), чем ответ, но я боюсь, что я увеличу лимит.
На мой взгляд, это невозможно, но позвольте мне объясните это подробно. Потому что вам действительно нужен контроллер конвейера с потоком фиксации. Что вам нужно, так это ворота / подтверждение на основе появления фиксации в определенной ветке. Такое одобрение возможно.
Представьте, что вы сделали фиксацию в ветке Dev
. Ваш конвейер запускается, развертывание в среде Dev
завершается, и время для Preprod
не наступает, но перед этим выполняется утверждение с вызовом функции Azure. Вы передадите эти заголовки
{
"Content-Type":"application/json",
"PlanUrl": "$(system.CollectionUri)",
"ProjectId": "$(system.TeamProjectId)",
"HubName": "$(system.HostType)",
"PlanId": "$(system.PlanId)",
"JobId": "$(system.JobId)",
"TimelineId": "$(system.TimelineId)",
"TaskInstanceId": "$(system.TaskInstanceId)",
"AuthToken": "$(system.AccessToken)",
"BuildId":"$(Build.BuildId)",
"StageName":"$(System.StageName)"
}
В Azure Function вы получите идентификатор сборки и имя стадии. С идентификатором сборки вы можете вызвать REST API, чтобы получить изменения и проверить, уже ли они находятся в ветке stageName
(в данном случае это Preprod
. Поскольку их там нет, этап завершится ошибкой.
После перемещения эту фиксацию в ветке PreProd
вы должны запустить ранее неудачную сборку, чтобы снова проверить условие и забрать уже созданный артефакт. Вероятно, вам нужно сделать какой-то веб-крючок, и, что еще хуже, это невозможно в настоящий момент. конкретный этап c (проверьте документацию ). Вы можете попытаться получить сборку с ошибкой этапа и снова поставить их в очередь, но в этом случае вы снова выполните развертывание на Dev
.
Итак, вы видите, что этого чрезвычайно сложно достичь. Но, возможно, кто-то придет к лучшему.