Запретить установке Jenkins артефакт в локальный репозиторий Maven - PullRequest
2 голосов
/ 28 сентября 2011

Jenkins устанавливает последний созданный артефакт в локальный репозиторий Maven, даже если задание выполняется с целью только clean package.

. Это вызвало проблему, когда кто-то случайно зафиксировал обновленную версию.общей библиотеки без увеличения номера версии в POM библиотеки.Дженкинс построил jar, установил его в локальный репозиторий Maven, а затем (в соответствии с настройкой) развернул артефакт в нашем общем репозитории Nexus.Nexus совершенно справедливо отказывается принять новый артефакт, поскольку у него уже есть выпуск с заданным номером версии.

Через некоторое время Jenkins создает проект, который зависит от этой библиотеки, и использует копию библиотеки из своей библиотеки. локальный Репозиторий Maven, а не Nexus.Таким образом, проект был создан с неверной версией кода.

Кажется, есть два возможных решения:

  1. Остановить Jenkins от ошибочной установки .jar в локальный репозиторий
  2. Запретить использование локального репозитория при создании проектов, зависящих от библиотеки

Ответы [ 4 ]

3 голосов
/ 28 сентября 2011

Это цель install , которая публикуется в локальном хранилище ... Так что я не могу ответить на первую проблему.

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

mvn -s settings.xml compile package

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

<settings>
  <localRepository>/data/job1/repository</localRepository>
  ..

И, вероятно, будет хорошей идеей периодически очищать локальные репозитории, вызывая чистые сборки.

0 голосов
/ 30 марта 2014

Вы можете предотвратить повторное использование артефактов в Nexus. Каждый артефакт должен иметь добавленный номер сборки, чтобы избежать путаницы. Избегайте версий SNAPSHOT, так как они вызывают головные боли.

0 голосов
/ 16 июля 2013

Интересно, есть ли возможность на самом деле использовать (общий) локальный репозиторий, но отключить запись в него (т. Е. Развернуть артефакты только в удаленном репозитории).Это должно уменьшить количество одновременных обновлений (но все же сохранить разумное использование диска:)

0 голосов
/ 29 сентября 2011

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

...