Как определить, когда конвейер выпуска Azure DevOps завершен с использованием REST Api?

#azure-devops #azure-devops-rest-api

#azure-devops #azure-devops-rest-api

Вопрос:

У меня есть скрипт, который запускает сборку. За этой сборкой следует конвейер выпуска. В моем скрипте я могу выяснить, какой URL-адрес для выпуска, но я не понимаю, как сценарий может решить, когда конвейер выпуска завершен.

Предположим, интерактивных утверждений нет. Все еще:

  1. Статус выпуска, похоже, застрял на «активном», не имеет значения, если все этапы уже сошлись к некоторому окончательному статусу.
  2. Этапы могут быть «Не запущены», «незавершены», «отклонены», «отменены» или «завершены успешно».

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

Возможно ли вообще ждать в скрипте, пока какой-либо релиз не перейдет в конечное состояние, из которого никакие изменения невозможны?

РЕДАКТИРОВАТЬ 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.