Подтвердить что ты не робот

Как создать эффективную очередь сборки maven/jenkins

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

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

У нас есть несколько заданий для:

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

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

Но я не знаю, как убедиться, что:

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

Любая помощь, указатели или идеи оценены.

4b9b3361

Ответ 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" намного сложнее.