Определите, стоит ли другая сборка в очереди в TFS перед выполнением задачи сборки

Мы запускаем среду, в которой несколько функций разделены на ветви. Эти ветви настроены на канал в Octopus Deploy.

Я хотел бы видеть, есть ли способ проверить в определении сборки, если другая ветвь поставлена ​​в очередь для ветви.

Для контекста - у меня шаг Octopus Deploy в качестве последнего шага в нашем определении сборки. Развертывание приложения - это займет около 10 минут. Наш процесс сборки также занимает около 10 минут (это большое приложение).

Когда команда, работающая над одной функцией, регистрируется - мы получаем 2 и 3 сборки в очереди и ожидаем завершения каждой регистрации и сборки.

То, что я хотел бы сделать, это запустить задачу развертывания, только если нет другой сборки, поставленной в очередь для той же ветви. Это гарантирует, что мы не будем тратить 30 минут ненужных развертываний, а только развернем последний код.

2 ответа

Решение

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

Задача создания выпуска Octopus для TFS и VSTS имеет параметр "Показать ход развертывания". Проверка этого заставляет определение сборки ждать - периодически получать отзывы от Octopus через инструмент Octo.exe.

Развертывание для этого на самом деле является оберткой для нескольких развертываний (15 отдельных проектов) - так что это займет много времени.

Если снять этот флажок, TFS не будет ждать, а отправит команду create release / deploy в Octopus.

Теперь это не решило мой первоначальный вопрос - но Tingting0929-MFST помог мне в этом, я исследовал с помощью TFS Rest API. Я написал сценарий PS, который эффективно выполнил то, что я просил - не развертывать, если для той же ветви была поставлена ​​другая сборка. Я получил его на работу - но он представил другую проблему в том, что заметки о выпуске из TFS и связанные изменения / рабочие элементы проглатывались между выпусками.

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

Для тех, кто использует Octopus Deploy в настройке ветви компонента (один проект развертывается на нескольких каналах) - это вариант, чтобы получить непрерывное развертывание для каждого канала (ветви).

Какой тип сборки вы используете? Сборка XAML или Vnext. Кажется, что вы используете триггер CI в своем определении сборки, поэтому он будет запускать сборку каждый раз, когда вы выполняете регистрацию.

VNext build:

Вы можете установить флажок Пакетные изменения. Согласно этому документу,

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

Это объединит изменения в одну сборку, когда у вас в очереди будет много сборок.

XAML build:

В определении сборки вы можете использовать триггер Rolling builds. Это имеет ту же функцию, что и пакетные изменения, упомянутые выше.

Замечания:

Вы также можете использовать этот REST API для получения, если есть сборки определений, которые находятся в очереди.

Http method: Get  
http://servername:8080/tfs/DefaultCollection/TeamprojectName/_apis/build/builds?definitions=10&statusFilter=notStarted&api-version=2.0
Другие вопросы по тегам