TeamCity: Управление зависимостями развертывания для приемочных тестов? - PullRequest
6 голосов
/ 11 апреля 2011

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

1 Ответ

3 голосов
/ 11 апреля 2011

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

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

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

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

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

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

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

...