2015-04-16 3 views
0

Я пытаюсь найти решение для следующей головоломки. У меня есть java-проекты, управляемые maven, для которых требуются некоторые собственные зависимости (запуск и интеграционные тесты). Они предоставляются в виде пакетов deb, которые необходимо установить до запуска сборки.Песочница Maven построена на Jenkins

Я использую Jenkins для CI. Родные зависимости не могут быть установлены на узлах Дженкинса из-за конфликтов с другими сборками, и они могут часто меняться. Теперь я не должен создавать тип задания Jenkins «maven», но «freestyle» и использовать pbuilder для создания чистой песочницы, установки всего необходимого и вызывать сборку maven.

Это прекрасно работает, но я теряю положительные эмоции Дженкинса, как автоматические восходящие проекты, создавать триггер при изменении зависимости и т. Д. Дженкинс просто не знает, что там maven.

И наконец, мой вопрос. Есть ли способ достижения обоих, изолировать сборку, так что установленные библиотеки не влияют на другие сборки и используют «магию» Дженкинса применительно к сборкам maven и их зависимостям?

ответ

1

Проблема может быть решена с использованием распределенных сборников Jenkins. Ведомые агенты могут быть настроены для обеспечения чистой среды (например, через виртуальные машины, докеры и т. Д.) Для каждой сборки и срывать ее после завершения сборки. Таким образом, работа Дженкинса может быть типа Maven, и любые изменения, сделанные на этапе предварительной сборки, не будут влиять на других.

Дополнительную информацию можно найти here.

1

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

  1. Создать НЕОБХОДИМЫ окружающую среду
  2. Run Maven работу
  3. Clean Up
+0

У вас есть руководство по подготовке среды, поэтому следующая работа jenkins (тип maven) может прыгать на нее и запускать «внутри»? – jojovilco

0

Рассмотрим докер. Там вы можете запускать процессы в изолированных средах так, как хотите. Докер работает так, что он легко общается с Дженкинсом.

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

+0

Да, докер пересек мой разум, однако я не смог найти лидерство в том, как это сделать. Большинство примеров просто выполняют что-то внутри контейнера докеров. Но как настроить его, чтобы Дженкинс знал, что сборка maven происходит внутри докера, и он должен делать свои трюки позже? – jojovilco

0

Даже во фристайле задание «Вызовите цели Maven верхнего уровня». Вы можете использовать это, чтобы получить «maven goodies», а также иметь возможность запускать другие шаги сборки.

Существует опция «использовать приватный репозиторий Maven», который будет обеспечивать расположение папки .m2/repository относительно рабочей области. Если вам нужно разделиться на несколько заданий, вы можете использовать «Пользовательское/общее рабочее пространство» между этими заданиями.

Даже в задании в стиле Maven существует возможность использования частного репозитория, так что одно задание не влияет на другое.

+0

Да. Но я не вижу, как это помогает. m2 не является проблемой. Мне нужно установить материал non maven/java, который будет предоставлен исполняемой сборке. Например, выполните кучу apt-get install xyz, который вносит в системные библиотеки C++, доступные через jni. – jojovilco

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