Как заставить Хадсона правильно построить несколько модулей, измененных одним коммитом - PullRequest
1 голос
/ 30 сентября 2011

Рассмотрим проект Maven с несколькими взаимозависимыми модулями: скажем, три jar-модуля A, B и C, которые являются зависимостями для военного модуля Z. У меня есть отдельная сборка Hudson для каждого из этих модулей, так что только модулиизмененные заново.

Моя проблема в том, что, если я фиксирую набор изменений, который изменяет как модуль A, так и модуль Z, Z может быть собран до A и завершится неудачей, прежде чем A завершит и вызовет восстановление Zкоторый сейчас проходит.Разрешение регулярных сбоев сборок по причинам, связанным с упорядочением сборок, а не с «реальными» сбоями, снижает чувствительность к реальным сбоям;мы заканчиваем тем, что игнорируем сборки, которые законно сломались, потому что мы привыкли предполагать, что они в конечном итоге перевернутся назад.

Я управлял этим с помощью тихих периодов, блокировок, когда выполняются восходящие сборки и т. д. Но вНа практике в моей сборке больше модулей, чем в примере, который я привел, многие из которых требуют времени для сборки и тестирования.У меня также есть небольшая группа старательных разработчиков, которые часто совершают коммиты.

Это означает, что мои jar-модули постоянно собираются, и лишь изредка оставляют пробел для создания моих военных модулей.Таким образом, война строится не очень часто, то есть требуется много времени, чтобы выяснить, когда мы ее сломали, и также требуется больше времени, чтобы определить, какие изменения ее сломали.

Кроме того, постоянный запуск сборокозначает, что если я зафиксирую изменение, касающееся банок A и B, файл войны Z может быть создан один раз для баночки A (которая собирается быстро), а затем снова для банки B (которая занимает больше времени).Это затрудняет понимание результатов данного коммита.

Я рассмотрел вопрос об использовании плагина соединения, но, похоже, для этого требуется каждый раз собирать все модули.Поскольку у меня на самом деле довольно много jar-модулей, я действительно не хочу каждый раз собирать их все, я хочу создавать только те, которые были изменены для данного коммита.

Есть ли что-нибудь лучшеспособы справиться с этим?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Подход, который мы сейчас рассматриваем, заключается в объединении некоторых модулей Maven в отдельные задания Hudson, а не в сопоставлении модулей один в один с заданиями.

В частности, если зависимости модуля войны достаточно малы и их можно быстро построить самостоятельно, то их сборка в одной работе с войной гарантирует, что весь код из одного коммита будет собран вместе, по крайней мере, для данной войны файл.

Это приводит к дублированию - у нас есть несколько файлов войны, использующих одни и те же банки, поэтому банки по существу перестраиваются для каждой войны, а не только один раз. Но на практике банки быстро создаются, и это делает концептуально более чистыми файлы военных действий.

Это было бы менее привлекательно, если бы банкам потребовалось некоторое время на сборку и тестирование, поскольку комбинированная работа банок + война была бы тогда довольно долгой, что давало бы нам длинные петли обратной связи для решения проблем внутри банок. Правильный баланс важен.

Итак, мой вывод: не думайте, что одна работа Хадсона / Дженкинса на модуль является лучшим способом, и не бойтесь перестраивать один и тот же код в нескольких заданиях.

0 голосов
/ 03 октября 2011

Это всегда сложная проблема (и я переписывал этот ответ более одного раза!)

С точки зрения технического решения вам нужно что-то, что будет ждать сборки нескольких различных заданий.не бегать, прежде чем он начнет работать.Если это трудно определить количественно, это будет трудно установить.Мне будет очень интересно узнать, какие технические решения предлагаются в этой теме.

Я думаю, вам нужно посмотреть, почему выполняются ваши задания и как часто.Если в вашей WAR есть какой-либо код, требующий модульного тестирования, можете ли вы переместить его в собственный модуль?Таким образом, вы можете запускать только интеграционные тесты каждый час / 30 минут, используя войну, и не беспокоиться о том, где и когда находятся отдельные модули.

Вы также можете посмотреть, что содержат ваши модули.Они ВСЕ должны быть модулями?Можете ли вы уменьшить фрагментацию - это может помочь уменьшить сложность того, что вы пытаетесь запланировать:)

Я понимаю и приветствую ваши усилия, направленные на то, чтобы как можно скорее пройти тестирование, но иногда тест на дымвсе, что вы можете сделать, если есть постоянный отток кода.

...