Как запускать дорогие шаги сборки только тогда, когда это необходимо?
У меня есть проект TeamCity со следующими конфигурациями сборки:
- Соберите зависимости (дорого)
- Построить
- Тест
- Deploy
Скажите, что я знаю, нужно ли мне это делать с помощью изменений в файле deps.txt
.
Вот что я хочу сделать:
- Я хочу запускать сборку всех изменений в управлении версиями.
- Если
deps.txt
изменилось, я хочу запустить сборки 1, затем 2, затем 3, затем 4.
- Если
deps.txt
не изменилось, я хочу запустить сборки 2, затем 3, затем 4.
Я попытался установить триггеры в конфигурациях сборки следующим образом:
- Триггер VCS без проверок, если
+:deps.txt
- VCS тигр во всех сеансах, если
-:deps.txt
- Зависимость от моментального снимка от 2, запуск при завершении построения 2
- Зависимость от моментального снимка от 3, триггер, когда 3 заканчивает строительство
но если коммит включает изменения deps.txt и другие файлы, тогда триггеры конфигурации 1 и 2 одновременно, что означает, что конфигурация 2 не будет выполнена.
Есть ли простой способ сделать это в TeamCity?
Ответы
Ответ 1
Я хотел бы предложить другой подход:
а. Создание конфигурации дубликатов сборки
б. Запуск всей цепочки сборки из последней сборки.
Первая цепочка конфигураций сборки:
-
Соберите зависимости: нет триггера
-
Сборка: привязка моментальных снимков и артефактов к 1 в одной цепочке сборки, триггер
-
Тест: зависимость моментальных снимков и артефактов от 2 в одной цепочке сборки, триггер
-
Развертывание: зависимость моментальных снимков и артефактов от 3 в одной цепочке, триггер VCS на +: deps.txt
Вторая цепочка конфигураций сборки:
-
Сборка: привязка моментальных снимков и артефактов по 1 на последней успешной сборке, без триггера
-
Тест: зависимость моментальных снимков и артефактов от 5 в одной цепочке, триггер
-
Развертывание: зависимость моментальных снимков и артефактов от 6 в одной цепочке, триггер VCS при любом изменении -: deps.txt
Чтобы уменьшить дубликаты, вы можете использовать шаблоны для 2 и 5, 3 и 6, 4 и 7.
Ответ 2
Вы можете объединить 1 в 2, а затем для этапа сборки 1, который собирает зависимости, напишите пользовательский script, который использует свойство teamcity.build.changedFiles.file
(см. Документы TeamCity), чтобы проверить, действительно ли deps.txt изменился или нет, а затем либо собирать зависимости, либо нет. Остальные шаги сборки из 2 будут действовать как обычно.