Можно ли предотвратить прерывание цепочки сборки в TeamCity?

У меня есть следующие настройки в TeamCity 7.1.3:

Проект А

  • Построить и развернуть A
  • Тест А (Быстрый)
  • Тест А (Медленный)
  • Тест А (очень медленный)

Проект Б

  • Построить и развернуть B
  • Тест Б (Быстрый)
  • Тест Б (Медленный)

Все тесты для A зависят от "Build & Deploy A", а все тесты для B зависят от "Build & Deploy B". Все зависимости - это снимки со следующими настройками:

  • Не запускайте новую сборку, если есть подходящая
  • Используйте только успешные сборки из подходящих
  • Запустите build на том же агенте

Все тесты имеют триггеры VCS. Медленные тесты запускаются только при изменении определенных папок в системе контроля версий. Когда выполняется фиксация для проекта A, в очередь сборки добавляются следующие проекты:

  • Построить и развернуть A
  • Тест А (Быстрый)
  • Тест А (Медленный)
  • Тест А (очень медленный)

Предварительная фиксация выполняется с более высоким приоритетом в очереди сборки. Таким образом, если во время выполнения Build & Deploy A выполняется проверка перед фиксацией для проекта B, то очередь сборки выглядит следующим образом:

  • Построить и развернуть B
  • Тест Б (Быстрый)
  • Тест Б (Медленный)
  • Тест А (Быстрый)
  • Тест А (Медленный)
  • Тест А (очень медленный)

Проблема с этой настройкой состоит в том, что это будет означать, что тесты для A запускаются после развертывания проекта B. Это является проблемой, так как при развертывании проекта B некоторые файлы, требуемые для проекта A., перезаписываются. Файлы, которые перезаписываются в личной сборке, представляют собой развернутые файлы, которых нет в папке извлечения, поэтому они не откатываются. Есть ли способ обеспечить, чтобы цепочка сборки для тестов не прерывалась?

Если я удалю из зависимости параметр "Не запускать новую сборку, если есть подходящая", для каждого из тестов потребуется полная сборка и развертывание. Более медленные тесты не могут зависеть от других тестов, образующих линейную цепочку, так как иногда выполняется "Тест А (очень медленный)", а "Тест А (медленный)" - нет.

К сожалению, в настоящее время невозможно разделить сборку и развернуть для создания артефактов.

Есть ли способ эффективно настроить это в TeamCity?

2 ответа

Решение

Я решил проблему, заставив обе конфигурации сборки 'build & deploy' записать текстовый файл в папку развертывания, содержащий тип сборки и номер сборки. Все тесты сравнивают значения в текстовом файле с зависимостями снимка текущего построения. Если их значения различны, повторно запустите сборку (принудительно перестраивая зависимости), а затем отмените текущую сборку.

Отмените сборку, позвонив по телефону:

http://teamcity.jetbrains.com/guestAuth/ajax.html?comment=<CommentMessage>&submit=Stop&buildId=<BuildId>&kill

Как запустить сборку с зависимостями, установленными для перестроения:

Можно ли заставить сборку TeamCity перестраивать зависимости при запуске по HTTP?

Это означает, что, когда тест заканчивается без шага, развертывание будет инициировано повторно, и затем тесты будут запущены.

Вот что я собираю:

  • А и В следует считать взаимоисключающими.
  • A всегда должен иметь более низкий приоритет сборки, чем B, но
  • После запуска А не должно прерываться.

В этом может быть способ борьбы с TeamCity; Я не знаю. Если вы готовы немного изменить свой процесс, один из них может подойти вам:

  1. Клонируйте свою среду так, чтобы A а также B могут быть развернуты для разных целей. Это позволило бы им работать полностью независимо друг от друга. Используйте несколько агентов сборки (по крайней мере, один для каждого A а также B) чтобы быстрее, с более высоким приоритетом B выполнять одновременно с более медленным, более низким приоритетом A, (Это, я думаю, было бы значительным преимуществом.)
  2. Сделайте ваш процесс более атомарным. Объедините различные части сборки / развертывания / тестирования в единую конфигурацию, таким образом гарантируя, что ожидающие части A цепочка сборки не может быть смещена B,
Другие вопросы по тегам