TeamCity: управление зависимостями развертывания для приемочных тестов?

Я пытаюсь настроить набор конфигураций сборки в 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, а затем устанавливать флаг при запуске развертывания и очищать его после выполнения тестов.


person Ruben Bartelink    schedule 11.04.2011    source источник
comment
Похоже, это было описано в JB JIRA и devnet   -  person Ruben Bartelink    schedule 11.04.2011


Ответы (1)


Кажется, вы посмотрите на Jetbrains Devnet и трекер YouTrack и не забудьте использовать в поиске волшебное слово clobber.

Затем вы устанавливаете groovy-plug и используете средство StartBuildPrecondition

Чтобы использовать эту функцию, добавьте system.locks.readLock. или system.locks.writeLock. свойство конфигурации сборки. Сборка с writeLock запустится только в том случае, если нет запущенных сборок с блокировками чтения или записи с тем же именем. Сборка с readLock запустится только в том случае, если нет запущенных сборок с блокировкой записи с таким же именем.

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

(Это не полностью готовое решение, поэтому элемент трекера остается открытым)

РЕДАКТИРОВАТЬ: И я до сих пор не знаю, должна ли блокировка находиться в разделе Параметры сборки|Свойства системы и каким должен быть точный формат имени, это locks.writeLock.MYLOCKNAME (т.е. отображаться в config со ссылочным синтаксисом %system.locks.writeLock.MYLOCKNAME%) ?

Другие загадки: как управлять предоставлением сборок, запускаемых завершением сборки задачи writeLock, доступ для чтения - снимается ли блокировка до тех пор, пока не сработает следующая (что позволит другому писателю) - или необходимо что-то поставить в очередь? родительская и дочерняя зависимость одновременно?

person Ruben Bartelink    schedule 11.04.2011