Конвейер выпуска Azure Devops - ставить новый выпуск в очередь, когда выполняется предыдущий
Наши конвейеры выпуска настроены в несколько этапов. Для каждого запроса на вытягивание, который объединяется в мастер, автоматически создается новый выпуск. У нас естьDEV => TST => REL => PRD
.
Теперь мы также используем эти этапы для выполнения автоматических тестов. Итак, после DEV есть этап для проведения базового автоматизированного тестирования (AT). Итак, мы получаемDEV => AT => TST => REL => PRD
.
AT имеет зависимость от DEV, чтобы работать без сбоев.
Скриншот нашего релизного конвейера
Наша проблема в следующем. Когда Release X выполняет AT и тем временем объединяется запрос на вытягивание, что приводит к развертыванию в DEV для Release X+1, это вызывает сбой AT для Release X. Есть ли способ заставить Release X+1 ждать в очереди, пока AT не будет завершена для Release X?
Мы, возможно, также можем решить эту проблему, избегая простоев на DEV во время развертывания, или изолировать тесты в среде, на которую не влияют автоматические развертывания и т. Д. Но на основе того, что у нас есть, и времени, которое у нас есть для улучшения, мы хотели бы знать, есть ли способ сделать экземпляры конвейера более осведомленными друг о друге...
1 ответ
Но исходя из того, что у нас есть, и времени, которое у нас есть для улучшения, мы хотели бы знать, есть ли способ сделать экземпляры конвейера более осведомленными друг о друге...
Извините, но я боюсь, что у нас сейчас нет такой готовой функции.
Вот одно обсуждение аналогичной темы, вы можете отслеживать его и оставлять комментарии, чтобы поделиться своим мнением. (Поскольку он предназначен для конвейера сборки, а не для выпуска, вы можете опубликовать запрос новой функции для конвейера выпуска)
И как временный обходной путь:
Вы можете переместить шаги из стадии AT в стадию DEV. Создать вакансию агентаAT
и переместите содержимое этапа AT в задание AT на этапе DEV и убедитесь, что вы отключили параллельное развертывание этапа в Deployment queue settings
под Pre-deployment conditions
:
Этот параметр может работать на уровне стадии, но не на уровне выпуска. Таким образом, это работает только тогда, когда вы перемещаете контент со стадии AT в стадию DEV. (Вы также можете получить подсказки по этой аналогичной проблеме)
Чтобы вызвать api azure DevOps rest в Gates:
1. создать Generic service connection
:
URL: https://vsrm.dev.azure.com/OrgName/ProjectName/_apis/release/releases/3?api-version=5.1
Оставьте поле имени пользователя и пароля пустыми.
2. изменить настройки по умолчанию "AuthToken": "$(system.AccessToken)"
к "Authorization": "Bearer $(System.AccessToken)"
.
Затем остальной api будет выполнен с токеном из текущего контекста.