#azure-devops #azure-devops-rest-api
#azure-devops #azure-devops-rest-api
Вопрос:
У меня есть скрипт, который запускает сборку. За этой сборкой следует конвейер выпуска. В моем скрипте я могу выяснить, какой URL-адрес для выпуска, но я не понимаю, как сценарий может решить, когда конвейер выпуска завершен.
Предположим, интерактивных утверждений нет. Все еще:
- Статус выпуска, похоже, застрял на «активном», не имеет значения, если все этапы уже сошлись к некоторому окончательному статусу.
- Этапы могут быть «Не запущены», «незавершены», «отклонены», «отменены» или «завершены успешно».
Я полагаю, что можно разобраться, проведя некоторый анализ состояния всех этапов с учетом топологии конвейера, но это кажется слишком сложным.
Возможно ли вообще ждать в скрипте, пока какой-либо релиз не перейдет в конечное состояние, из которого никакие изменения невозможны?
РЕДАКТИРОВАТЬ 1
Я в порядке, когда пишу цикл опроса. Это то, что я делаю, чтобы выяснить, когда сборка завершена. Но для релизов у меня проблема с условием остановки — я просто не знаю, что это такое.
РЕДАКТИРОВАТЬ 2
Рассмотрим следующий конвейер:
---> A
/
Start -[Promoted only if (*) is true]-> C ---> D
/
---> B
(никаких утверждений вручную)
Теперь предположим, что сборка не удовлетворяет условию (*), и поэтому выпуск фактически останавливается после запуска на A и B, но не C. Статусы в средах будут:
- A = успешно или отклонено
- B = успешно или отклонено
- C = Не запущен
- D = Не запущен
Итак, каково условие остановки для цикла ожидания, которое остановит его в этой ситуации? Возможно ли это сделать, не обнаруживая топологию конвейера выпуска?
Ответ №1:
К сожалению, нет никаких блокирующих вызовов API. Вам нужно будет написать цикл (например, PowerShell), чтобы проверить наличие изменений в статусе.
В выпуске есть два поля «статус».
Первый — это общий статус выпуска, например, он был развернут в двух средах, прежде чем он был помечен как «заброшенный» и больше не является кандидатом на выпуск для производства. Вы можете установить этот статус в пользовательском интерфейсе, выбрав выпуск и выбрав «Отказаться».
Второй статус относится к каждой развертываемой среде. У каждого ReleaseEnvironment есть EnvironmentStatus. Удивительно, но там нет состояния «сбой», но вас интересует все, что не является «не запущенным» и «успешным». (Возможно, partiallySucceeded — это показатель того, что что-то не удалось, не помечая всю среду как сбой?).
Существует третий статус, который может потребоваться учитывать, если у вас включены утверждения перед развертыванием или после развертывания. Они находятся в узлах состояния предварительного развертывания (ApprovalStatus) и после развертывания. утверждения.
Комментарии:
1. Пожалуйста, смотрите РЕДАКТИРОВАНИЕ 2.