Я пытаюсь настроить набор конфигураций сборки в TeamCity 6 и пытаюсь смоделировать конкретное требование максимально чистым способом, доступным TeamCity.
У меня есть набор приемочных тестов (около 4-8 наборов тестов, сгруппированных по функциональной области системы, к которой они относятся), которые я хочу запустить параллельно (я буду моделировать их как конфигурации сборки, чтобы их можно было распределить по набор агентов).
Из моего первоначального исследования кажется, что наличие конфигурации мета-сборки AcceptanceTests
, которая извлекает набор отдельных конфигураций приемочного теста через зависимости моментальных снимков должны помочь. Тогда все, что мне нужно сделать, это сказать, что моя конфигурация сборки Commit
должна вызвать AcceptanceTests
, и все они будут задействованы. Итак, скажем, у меня также есть AcceptanceSuiteA
, AcceptanceSuiteB
и AcceptanceSuiteC
.
Пока все хорошо (я знаю, что могу повернуть все наоборот и заставить конфигурацию Commit
запускать AcceptanceSuiteA
, AcceptanceSuiteB
и AcceptanceSuiteC
- проблема в том, что мне нужно вручную агрегировать результаты, чтобы определить общий успех приемочных тестов, поскольку целое).
Сложность заключается в том, что в то время как AcceptanceSuiteC
просто нужны некоторые Commit
артефакты, чтобы затем жить самостоятельно, AcceptanceSuiteA
и AcceptanceSuiteB
необходимо:
DeploySite
(скажем, это занимает 2 минуты, и я не могу позволить себе раскрутить полностью изолированный только для этого прогона)- Запуск тестов на развернутом сайте
Проблема в том, что мне нужно убедиться, что:
- веб-сайт настраивается только один раз
- Веб-сайт не затирается, пока работают два пакета.
Если я настрою DeploySite
в качестве конфигурации сборки, а AcceptanceSuiteA
и AcceptanceSuiteB
вытащу его как зависимость моментального снимка, AFAICT:
- последующий или параллельный запуск
AcceptanceSuiteB
может вызвать другойDeploySite
, который разрушит развертывание, котороеAcceptanceSuiteA
и/илиAcceptanceSuiteB
находятся в процессе использования.
Хотя я могу сказать Ограничить количество одновременно выполняемых сборок, чтобы за один раз выполнялась только одна сборка, мне нужно иметь по одной за раз а не тогда, когда зависимые части Все еще работает.
Есть ли способ в TeamCity смоделировать такую иерархию?
РЕДАКТИРОВАТЬ: Идеи: -
Дерьмовое решение состоит в том, что DeploySite
может установить маркер «используемый флаг», а затем настроить AcceptanceTests
для очистки этого флага [после завершения AcceptanceSuiteA
и AcceptanceSuiteB
]. Затем проблема заключается в том, чтобы следующий DeploySite
вниз по конвейеру ждал, пока указанные ворота не будут снова открыты (выполнение ожидания блокировки в сборке кажется неправильным - я хочу, чтобы он был помечен как «еще не запущенный», а не выглядел как что-то долго делать). Тем не менее, этот вид вещей является флагом здесь, и я должен проверить этот бит, это своего рода запах изменчивого состояния / неустойчивости, от которого я пытаюсь уйти.
РЕДАКТИРОВАТЬ 2: если бы я мог программно изменить конфигурацию агента, я мог бы установить Требования к агенту требовать InUse=false, а затем устанавливать флаг при запуске развертывания и очищать его после выполнения тестов.