Можно ли предотвратить прерывание цепочки сборки в 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; Я не знаю. Если вы готовы немного изменить свой процесс, один из них может подойти вам:
- Клонируйте свою среду так, чтобы
A
а такжеB
могут быть развернуты для разных целей. Это позволило бы им работать полностью независимо друг от друга. Используйте несколько агентов сборки (по крайней мере, один для каждогоA
а такжеB
) чтобы быстрее, с более высоким приоритетомB
выполнять одновременно с более медленным, более низким приоритетомA
, (Это, я думаю, было бы значительным преимуществом.) - Сделайте ваш процесс более атомарным. Объедините различные части сборки / развертывания / тестирования в единую конфигурацию, таким образом гарантируя, что ожидающие части
A
цепочка сборки не может быть смещенаB
,