Как построить эффективную очередь сборки maven / jenkins - PullRequest
18 голосов
/ 21 июля 2011

Мы используем Jenkins в качестве нашей CI-системы и Maven в качестве нашего инструмента для сборки. У нас есть SVN-репозиторий для нашего кода и Artifactory для наших артефактов.

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

В настоящее время у нас есть несколько рабочих мест для:

  • быстрый набор коммит-тестов
  • более обширные интеграционные тесты
  • покрытие кода и статический анализ кода
  • развертывание в тестовой среде
  • дымовые испытания для этой тестовой среды

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

Но я не знаю, как это сделать:

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

Любая помощь, указатели или идеи приветствуются.

Ответы [ 2 ]

14 голосов
/ 28 декабря 2011

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

  • Вы можете использовать плагин блокировок и блокировок, чтобы убедиться, что все не выполняется одновременно, когда вам это нужно. https://wiki.jenkins -ci.org / дисплей / Дженкинс / Замки + и + Задвижки + плагин
  • Смешайте это с инкрементными и параллельными сборками Maven для ускорения отдельных сборок.
  • Добавьте несколько рабов Дженкинса, чтобы получить больше «исполнителей».
  • Чтобы избежать раздувания Artifactory в репозитории моментальных снимков, можно настроить Artifactory на сохранение определенного количества снимков.
  • ПРИМЕЧАНИЕ : Избегайте использования «неуникальных» репозиториев моментальных снимков в Artifactory и Maven 3. См. http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories.
  • Для ваших менее часто изменяемых модулей делайте версии выпуска. Держите тех в артефакте. Используйте плагин релиза Maven, чтобы развернуть все в Artifactory и сделать все правильные теги управления версиями (кроме случаев, когда вы используете Git, что плохо сочетается с плагином релиза).
  • Используйте Jenkins «Отключить автоматическое архивирование артефактов» для артефактов моментальных снимков, которые вы хотите распространять через локальный репозиторий в Jenkins.
  • Используйте опцию '-U' в ваших сборках Maven, чтобы убедиться, что используются последние снимки.

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

Мы пытались использовать отдельное задание для тестирования, но из-за этого было сложно отследить источник неудачи теста, а также значительно усложнило «ветвление для продукта».

0 голосов
/ 07 января 2013

Я только что нашел действительно интересную статью на эту тему: http://blog.xebia.com/2012/08/27/how-to-build-true-pipelines-with-jenkins-and-maven/

Я на самом деле не пробовал, но, похоже, это решает большинство вопросов, которые я поставил в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...