Как выяснить, когда конвейер выпуска Azure DevOps закончился с использованием REST Api? - PullRequest
1 голос
/ 16 апреля 2019

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

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

  1. Кажется, что статус релиза застрял на «активном», не имеет значения, все ли стадии уже достигли какого-то окончательного статуса.
  2. Этапы могут быть "notStarted", "inProgress", "rejected", "отменен" или "успешно".

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

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

РЕДАКТИРОВАТЬ 1

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

РЕДАКТИРОВАТЬ 2

Рассмотрим следующий конвейер:

       +---> A
      /       \
Start          + -[Promoted only if (*) is true]-> C ---> D
      \       /
       +---> B

(нет ручных утверждений) Теперь предположим, что сборка не удовлетворяет условию (*), и поэтому выпуск эффективно останавливается после выполнения на A и B, но не на C. Состояния в средах будут такими:

  • A = успешно или отклонено
  • B = успешно или отклонено
  • C = notStarted
  • D = notStarted

Итак, каково условие остановки для цикла ожидания, которое остановит его в этой ситуации? Возможно ли это сделать без определения топологии конвейера выпуска?

1 Ответ

0 голосов
/ 17 апреля 2019

К сожалению, нет никаких блокирующих вызовов API. Вам нужно написать цикл в (например, PowerShell), чтобы проверить изменения в статусе.

В Release есть два поля статуса.

Первый - это общее состояние Релиза, например, он был развернут в двух средах, прежде чем он был помечен как «заброшенный» и больше не является кандидатом на выпуск для производства. Вы можете установить этот статус в пользовательском интерфейсе, выбрав Release и выбрав «Abandon».

Второй статус для каждой развертываемой среды. Каждый ReleaseEnvironment имеет EnvironmentStatus . Удивительно, но там нет «провального» состояния, но вы заинтересованы в том, что не «не запущено» и «успешно». (Возможно, частичноSucceeded - это показатель того, что что-то не удалось, не пометив всю среду как неудачную?).

Существует третий статус, который вам может потребоваться учитывать, если у вас включены разрешения до развертывания или после развертывания. Они находятся в узлах preDeployApprovals (ApprovalStatus) и postDeployApprovals.

...