Можно ли сделать так, чтобы релиз Azure DevOps публиковал только последние изменения из конвейера сборки? - PullRequest
2 голосов
/ 07 октября 2019

У меня есть ситуация, когда два коммита были объединены с мастером (например, ПЕРВЫЙ и ВТОРОЙ) очень близко друг к другу (с интервалом в несколько секунд). Оба запускали конвейер сборки: FIRST сначала запускал конвейер, а SECOND запускал его второй (сборки выполнялись параллельно). По какой-то причине конвейер сборки для коммита SECOND завершается первым, а спустя 30 секунд сборка для коммита FIRST завершается.

Мой конвейер автоматического выпуска настроен на получение «самого последнего» артефакта из конвейера сборки. Последовательность событий, описанная выше, привела к тому, что ВТОРОЕ изменение было развернуто первым, а затем ПЕРВОЕ изменение было развернуто следующим (поскольку его конвейер закончился вторым) и растоптано в предыдущем выпуске, эффективно развернув старые биты в службе.

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

РЕДАКТИРОВАТЬ: Спасибо тем, кто предложил / поддержал идеюпакетные сборки, но это не вариант, который я хочу включить. Я все еще хочу, чтобы каждый коммит запускал свою собственную сборку (чтобы облегчить назначение причины прерывания сборки). Я просто ищу релизы для запуска в порядке коммитов, а не в порядке завершения сборок.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Вы можете установить batch в значение true в триггерах, поэтому система будет ждать завершения сборки. Установите для параметра «Пакетные изменения во время сборки» значение true в «Триггерах для конвейера сборки» в DevOps Azure или в YAML:

trigger:
  batch: true

Если вы используете запрос на извлечение, проблем не должно быть, поскольку новый push-запрос долженотменить текущий процесс. Проверьте autoCancel в PR триггеров

1 голос
/ 09 октября 2019

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

Вы можете выполнить следующие шаги, чтобы ограничить ваш конвейер одним агентом. 1. Добавьте пользовательскую возможность агенту, для которого вы хотите запустить конвейер ( настройки проекта -> пулы агентов (выберите пул агентов) -> агенты (выберите агента) -> возможности ) enter image description here

2, добавьте требование к вашему конвейеру: # это работает как для агентов, размещенных в Microsoft, так и дляразмещенные агенты

enter image description here

Я протестировал и обнаружил, что пул агентов, размещенный в Microsoft, не поддерживает требования к настраиваемым возможностям в конвейере yaml.

Ниже yamlконвейер работает только для автономного пула агентов.

pool:
  name: Default
  demands: Tag -equals Agent1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...