Как правильно выполнить непрерывную интеграцию с Hudson для многомодульных проектов Maven 3?

У меня сложилось впечатление, что выполнить CI для многомодульного проекта Maven 3 ну с помощью Hudson (или Jenkins) невозможно.

Ситуация, похоже, такова, что у вас есть 2 реалистичных варианта создания многомодульного проекта Maven 3 с Hudson:

  1. Фристайл-проект также может создавать проекты Maven, и с опцией инкрементного / рекурсивного он, очевидно, должен иметь возможность строить только необходимые поддеревья полного дерева проекта.

  2. Устаревшая, сильно устаревшая, с множеством предупреждений, устаревшая сборка Maven2 / 3.

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

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

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

Я считаю, что мои требования довольно консервативны, но я полностью заблокирован отсутствием поддержки Maven в Hudson / Jenkins. Вот чего я ожидал:

  • способность распознавать многомодульные проекты и создавать их с помощью Maven 3
  • возможность иметь "инкрементальные" сборки такого многомодульного проекта (т.е. только измененные модули и их зависимости)
  • возможность видеть текущий статус многомодульного проекта и какой субмодуль не удался / успешно / нестабилен

Рассматриваемый проект Maven состоит из около 84 модулей Maven в многомодульной конфигурации с общим родителем и разделен на разные подсистемы. Мы используем Hudson 3.1.0.

Есть ли у меня шансы на это?


person Boris Terzic    schedule 14.01.2014    source источник
comment
Какую версию Jenkins / Hudson вы используете?   -  person Nathaniel Waisbrot    schedule 14.01.2014
comment
Мы используем Hudson 3.1.0, добавили в пост.   -  person Boris Terzic    schedule 15.01.2014


Ответы (2)


Да, это невозможно сделать хорошо с текущим типом проекта Maven 2/3.

Я сделал это достаточно хорошо, используя тип проекта "матрица / мультиконфигурация" и добавляя ось "Модуль" вручную. Конфигурация матричного задания является сложной задачей, и вы должны не забывать обновлять свою ось каждый раз, когда вы добавляете, удаляете или переименовываете модуль. Но после завершения настройки это решение хорошо подходит для сборки. Вы можете увидеть результаты сборки и тестирования для каждого модуля отдельно или интегрировать в матричное задание.

person Paul Hicks    schedule 14.01.2014
comment
Спасибо за подтверждение моего вменяемости. :) Ручная настройка модулей - вот что я надеялся предотвратить. Вы знаете какие-либо инструменты для создания соответствующей конфигурации? - person Boris Terzic; 15.01.2014
comment
Нет. Я также не знаю никого, кто бы это делал, так что такого инструмента может и не быть. Возможно, вы сможете создать задание, которое создает или обновляет задание матрицы для вас, и быстро просмотреть API предполагает, что это возможно, но я никогда не пробовал. Я только что нашел плагин DynamicAxis; объединить это с параметризованным плагином триггера может быть проще. - person Paul Hicks; 15.01.2014

Мой коллега работал над реализацией многомодульной функциональности Maven 3 в Jenkins.

https://github.com/adamcin/maven-plugin

Не уверен, каков статус принятия восходящего потока.

person Electrawn    schedule 20.01.2014