Как запускать дорогие шаги сборки только тогда, когда это необходимо?

У меня есть проект 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. Сборка: привязка моментальных снимков и артефактов по 1 на последней успешной сборке, без триггера

  2. Тест: зависимость моментальных снимков и артефактов от 5 в одной цепочке, триггер

  3. Развертывание: зависимость моментальных снимков и артефактов от 6 в одной цепочке, триггер VCS при любом изменении -: deps.txt

Чтобы уменьшить дубликаты, вы можете использовать шаблоны для 2 и 5, 3 и 6, 4 и 7.

Ответ 2

Вы можете объединить 1 в 2, а затем для этапа сборки 1, который собирает зависимости, напишите пользовательский script, который использует свойство teamcity.build.changedFiles.file (см. Документы TeamCity), чтобы проверить, действительно ли deps.txt изменился или нет, а затем либо собирать зависимости, либо нет. Остальные шаги сборки из 2 будут действовать как обычно.