Задержка до окончания sh времени 'Очередь новой сборки' не работает в приложении Azure Logi c - PullRequest
1 голос
/ 31 марта 2020

Я запускаю приложение Azure Logi c из веб-крючка https для docker изображения в Azure Реестре контейнеров.

Рабочий процесс примерно равен:

  • When a HTTP request is received
  • Queue a new build
  • Delay until
    • FinishTime из Queue a new build

См .: Изображение рабочего процесса

Действие Delay until не работает, поскольку в очереди FinishTime есть 0001-01-01T00:00:00.

Он жалуется на неправильный формат, поэтому я вручную добавил Z после ключевого слова FinishTime.

Теперь отметка времени имеет правильный формат, однако отметка времени 0001-01-01T00:00:00Z, очевидно, не имеет смысла, и последующие шаги выполняется без задержки.

Что-то, чего мне не хватает?

edit: Queue a new build ставит в очередь Azure конвейерную сборку. Т.е. свойство FinishTime исходит из конвейера.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Я связался с инженером поддержки Azure, который подтвердил, что действие Delay until должно работать так, как я намеревался его использовать, однако свойство FinishTime не будет содержать значение, которое я Можно использовать.

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

Вот наиболее важные шаги, которые выполняются после запуска рабочего процесса из webhook (docker обновление базового образа в Azure Registry Registry).

По сути, я инициализирую следующие переменные и помещаю в очередь новую сборку:

  • buildStatusCompleted: строковое значение, содержащее целевое значение completed
  • jarsBuildStatus : Строковое значение, содержащее начальное значение notStarted
  • jarsBuildResult: Строковое значение, содержащее значение по умолчанию failed

Затем я использую действие Until для отслеживать, когда значение jarsBuildStatus переключается на completed.

В действии Until я повторяю следующие шаги, пока jarsBuildStatus не изменит свое значение на buildStatusCompleted:

  1. Delay на 15 секунд
  2. HTTP запрос к Azure сборке DevOps, аутентификация с токеном личного доступа

http request

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): enter image description here

edit: Оказывается, я могу упростить рабочий процесс, потому что в Logi c есть выделенное действие Azure DevOps Приложение называется Send an HTTP request to Azure DevOps, что исключает необходимость ручной аутентификации (инженер поддержки Azure указал на это). Рабочий процесс теперь выглядит следующим образом:

enter image description here

То есть я могу напрямую запросить состояние сборки и установить jarsBuildStatus как

@{body('Send_an_HTTP_request_to_Azure_DevOps:_jar''s')['status']}

Приведенный выше фрагмент кода автоматически преобразуется в значение для действия Set variable. Таким образом, нет необходимости использовать дополнительное действие Parse JSON.

0 голосов
/ 01 апреля 2020

Вам необходимо установить метку времени в будущем, а метку времени 0001-01-01T00:00:00Z, установленную для действия «Задержка до», не будет временем будущего. Если вы установите метку времени как 2020-04-02T07:30:00Z, то будет действовать действие «Задержка до».

Обновление:

Я не думаю, что «Задержка до» может делать то, что вы ожидаете, но, возможно, вы можете сослаться на операции ниже. Просто добавьте действие «Условие», чтобы определить, больше ли FinishTime, чем текущее время.

enter image description here

Выражение в «Условии»:

sub(ticks(variables('FinishTime')), ticks(utcNow()))

Одним словом, если FinishTime больше текущего времени -> выполните действие «Задержка до». Если FinishTime меньше текущего времени -> делайте что-либо еще, что вы хотите. ( Кстати, вам нужно обратить внимание на часовой пояс вашей временной метки, возможно, вам нужно преобразовать весь часовой пояс до UT C)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...