Как создать эффективную очередь сборки maven/jenkins
Мы используем Jenkins как нашу систему CI и Maven как наш инструмент построения. У нас есть SVN-репозиторий для нашего кода и Artifactory для наших артефактов.
Исходный код организован как мультимодульный проект maven. Большинство модулей вносят вклад в реальное приложение, но некоторые модули являются приложениями, которые необходимы во время процесса сборки и тестирования.
У нас есть несколько заданий для:
- быстрый набор тестов фиксации
- более обширные интеграционные тесты
- охват кода и анализ статического кода
- развертывание в тестовой среде
- тесты дыма для этой тестовой среды
Одной из слабых сторон нашего процесса сборки является то, что мы собираем разные части проекта на разных рабочих местах, причем некоторые части снова и снова. Вместо этого я предпочел бы построить все, как только вы разместите его до искусственного, и просто используйте эти артефакты для всего остального.
Но я не знаю, как убедиться, что:
- Размер artifactory не взрывается, потому что каждый день мы сбрасываем сотни банок.
- В строках ниже по потоку используется точный набор артефактов, созданных последним заданием сборки вверх, а не какая-то странная смесь версии, потому что он работает одновременно с следующим заданием сборки, которое могло бы использовать новую версию артефакта a, но не артефакта б.
Любая помощь, указатели или идеи оценены.
Ответы
Ответ 1
Я только что нашел действительно интересную статью по этой теме: http://blog.xebia.com/2012/08/27/how-to-build-true-pipelines-with-jenkins-and-maven/
Я на самом деле не пробовал, но, похоже, решает большинство проблем, которые я задал в вопросе.
Ответ 2
Есть много способов ответить на этот вопрос. В настоящее время я использую ту же настройку в своей среде разработки.
- Вы можете использовать плагин locks и latches, чтобы убедиться, что все не выполняется одновременно, когда вам это нужно. https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin
- Смешайте это с инкрементальными и параллельными сборками Maven, чтобы ускорить отдельные сборки.
- Добавьте некоторых рабов Дженкинса, чтобы получить больше "исполнителей".
- Чтобы избежать раздувания Artifactory в репозитории снимков - Artifactory может быть настроен на сохранение определенного количества снимков.
- ПРИМЕЧАНИЕ. Избегайте использования "неповторимых" репозиториев снимков в Artifactory и Maven 3. См. http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories.
- Для менее часто изменяемых модулей создайте версии выпуска. Храните их в искусстве. Используйте плагин релиза Maven для развертывания всего в Artifactory и создания всех правильных тегов управления версиями (кроме случаев, когда вы используете Git, который не играет хорошо с плагином выпуска).
- Используйте Jenkins "Отключить автоматическое архивирование артефактов" для артефактов моментальных снимков, которые вы хотите распространять через локальный репозиторий в Jenkins.
- Используйте опцию -U на своих сборках Maven, чтобы убедиться, что используются последние снимки.
Мое личное предпочтение состоит в том, чтобы сохранить его просто: я создаю один модуль maven, который выполняет все приложение, где только редко меняющийся код помещается в совершенно отдельный модуль/задание модуля. Для простоты я минимизирую количество заданий.
Мы попытались использовать отдельное задание для тестирования, но это затруднило отслеживание источника ошибки при тестировании, а также сделало "разветвление для prod" намного сложнее.