Запуск последующей сборки один раз после нескольких параллельных сборок в TeamCity

У нас есть более 150 проектов, которые я собрал вместе, перенастроил и оптимизировал в несколько конфигураций TeamCity с несколькими агентами сборки, чтобы попытаться улучшить производительность нашего сервера сборки, который в настоящее время строится очень последовательным образом.

сочетание технологий (Web, dotNet, VB6 и COM+) и системной архитектуры означает, что существуют различные шаги (конфигурации), которые теперь могут выполняться параллельно, но которые должны объединяться дальше вниз дорожка.

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

A -> B -> Collate (-> Deploy)
A -> C -> Collate (-> Deploy)

проблема в том, что, если изменение будет сделано в A, это приведет к тому, что B и C оба запуска, что приведет к выполнению шагов сортировки (и развертывания) дважды, несмотря на то, что это общий триггер в A. Как я уже сказал, это упрощение реального набора почти двадцати конфигураций, и частые перестройки влияют на скорость улучшения.

может ли кто-нибудь предложить какой-либо способ, которым я могу определить тот факт, что оба B и C будут инициированы в результате A, и заставить шаг сортировки ждать завершения B и C, прежде чем запускать шаг сортировки? Очевидно, что изменение на B или C должно быть в состоянии вызвать сопоставление независимо.

1 ответов


я новичок в TeamCity, но я считаю, что это то, что вам нужно:

  • A: нет триггеров или зависимостей
  • B и C: нет триггеров, моментальный снимок зависит от A
  • Collate: ВКС триггера, снимок зависимости B и C

С этой настройкой одиночный толчок VCS приведет к:

  • ровно одна сборка A, B, C и Collate
  • A построен до B и C
  • B и C построен до Collate
  • все построено из одной точки в VCS

если вы хотите передать артефакты вниз по цепочке, вам также нужно будет определить зависимости артефактов.

если разные сборки используют разные репозитории VCS, то вы все равно не должны устанавливать триггеры VCS на A, B и C; вместо этого вы установить параметр "триггер изменений в зависимостях моментальных снимков" на триггере VCS для Collate.