2015-02-27 3 views
2

На большом сервере Linux я хочу запустить 8 независимых экземпляров Jenkins на разных портах. Тем не менее, все экземпляры будут выполняться как пользовательские «jenkins», а пользователь jenkins имеет свой репозиторий maven в /home/jenkins/.m2/repository.Как Maven избегает условий гонки в локальном репозитории?

Мое понимание maven заключается в том, что оно предназначено для одного пользователя; другими словами, у maven нет концепции одновременных сборок maven. Так как эти 8 примеров jenkins отбрасывают проекты maven и читают/записывают в /home/jenkins/.m2/repository, как maven защищает себя от условий гонки?

Спасибо.

+0

Почему вы не хотите запускать отдельный экземпляр jenkins с несколькими строителями? Это общий способ использования дженкинсов на моем уме. –

+1

Есть опция «использовать частный репозиторий Maven» в конфигурации сборки в Jenkins, это поможет? – pvytykac

+1

Почему 8 отдельных экземпляров Jenkins вместо одного экземпляра и 8 заданий? Тогда я думаю, что вы можете сделать одно задание зависимым от завершения другого, чтобы они работали в правильном порядке. – kuporific

ответ

1

В Jenkins вы можете определить исполнителей, которые более или менее эквивалентны ядрам, которые у вас есть на машине. Кроме того, вы можете определить каждое задание, имеющее свой собственный репозиторий, путем активации опции use private Maven repository, которая по умолчанию будет разделять эти задания друг от друга. Это сделает локальный репозиторий maven локальным в соответствующем рабочем пространстве. Таким образом, каждая работа имеет собственное рабочее пространство, у вас есть отдельные репозитории для каждой работы. Результат. Без проблем.

Update:

Если используется единое хранилище для нескольких сборок (не имеет значения, если в Jenkins или в командной строке) те строит больше не независимым. Не имеет значения, синхронизирована ли функциональность каким-либо образом.

+0

Спасибо. У нас есть 8 крупных команд разработчиков, которые в настоящее время используют 1 экземпляр Jenkins, поэтому у нас есть 1200 jenkins на 1 jenkins. Мы хотим разбить это на 1 экземпляр Jenkins для каждой команды. Итак, 8 Jenkinses, все с разумными 100-150 рабочими местами каждый. Но мы не хотим частных репозиториев в каждой рабочей области каждой работы. Это будет от 100 до 150 местных репозиториев maven. –

+0

Вы можете очистить рабочее пространство после каждой сборки с помощью задачи пост-сборки, если пространство hdd является причиной того, что вам не нужны частные репозитории. – pvytykac

+0

@pvytykac Спасибо. Игнорируйте Дженкинса на данный момент. Первоначальный вопрос: есть ли у maven условия гонки, если они выполняются одновременно, и я использую Jenkins в качестве инициатора. Но maven также можно запускать одновременно в командной строке Linux. Если maven не имеет условий гонки, то запуск нескольких Jenkinses в качестве одного пользователя будет в порядке. Главный вопрос - вопрос maven. –

0

Обмен локальным репо между несколькими заданиями Дженкинса небезопасен. Параллельные сборки с использованием одних и тех же артефактов часто выходят из строя со случайными исключениями NullPointer/IO.

Эти 2 номера содержат некоторую дополнительную информацию, и, кажется, из комментариев, что его не то, что они будут фиксировать:

Параллельно строит

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

Начиная с версии 3, есть экспериментальная «Параллельный создает» функцию в мавена, так что должен быть какой-то синхронизации. Но я предполагаю, что он синхронизирует доступ к файлу maven-metadata-local.xml в JVM не глобально. Кроме того, он заботится только о создании подмодулей родительского помпа параллельно.

Workarround:

Насколько мне известно, единственный способ предотвратить это, чтобы иметь частный местный репо за Дженкинс строить. Если его нежелание иметь локальные репозитории, хранящиеся на hdd, вы можете очистить их после сборки с помощью задачи пост-сборки.

+0

Функция параллельной сборки не является «экспериментальной» и никогда не была. Это была новая функция, которая была введена с Maven 3. Maven 3 начался в 2010 году, пока мы не достигнем 2015 года. Кроме того, это доказало, что я отлично работаю. Кроме того, если вы используете такой репозиторий, результат состоит в том, что ваши сборки больше не независимы друг от друга. – khmarbaise

Смежные вопросы