Я связался с инженером поддержки Azure, который подтвердил, что действие Delay until
должно работать так, как я намеревался его использовать, однако свойство FinishTime
не будет содержать значение, которое я Можно использовать.
Тем временем я нашел обходной путь, где я использую некоторые логики c и довольно много дополнительных шагов. Неудобно, но, по крайней мере, он делает то, что я хочу.
Вот наиболее важные шаги, которые выполняются после запуска рабочего процесса из webhook (docker обновление базового образа в Azure Registry Registry).
По сути, я инициализирую следующие переменные и помещаю в очередь новую сборку:
buildStatusCompleted
: строковое значение, содержащее целевое значение completed
jarsBuildStatus
: Строковое значение, содержащее начальное значение notStarted
jarsBuildResult
: Строковое значение, содержащее значение по умолчанию failed
Затем я использую действие Until
для отслеживать, когда значение jarsBuildStatus
переключается на completed
.
В действии Until
я повторяю следующие шаги, пока jarsBuildStatus
не изменит свое значение на buildStatusCompleted
:
Delay
на 15 секунд HTTP
запрос к Azure сборке DevOps, аутентификация с токеном личного доступа
Parse JSON
тело предыдущего необработанного
HTTP
вывода для
status
и
result
ключевых слов Set
jarsBuildStatus = status
После выхода из Until
action (l oop), jarsBuildResult
устанавливается на проанализированный result
.
Все эти шаги являются частью большого рабочего процесса оркестровки сборки, где я повторяю данные шаги несколько раз для несколько различных Azure DevOps строят конвейеры. Последним действием в рабочем процессе является отправка всех status
, result
и других соответствующих данных в виде сводки сборки на Azure DevOps.
Для меня это только обходной путь, и я оставлю этот вопрос открыт, чтобы узнать, есть ли у других предложения или если инженеры службы поддержки Azure могут дать более полное представление о действии Delay until
.
Вот изображение окончательного рабочего процесса (по крайней мере, часть где я реализовал действие Delay until
):
edit: Оказывается, я могу упростить рабочий процесс, потому что в Logi c есть выделенное действие Azure DevOps Приложение называется Send an HTTP request to Azure DevOps
, что исключает необходимость ручной аутентификации (инженер поддержки Azure указал на это). Рабочий процесс теперь выглядит следующим образом:
То есть я могу напрямую запросить состояние сборки и установить jarsBuildStatus
как
@{body('Send_an_HTTP_request_to_Azure_DevOps:_jar''s')['status']}
Приведенный выше фрагмент кода автоматически преобразуется в значение для действия Set variable
. Таким образом, нет необходимости использовать дополнительное действие Parse JSON
.