Предотвратить установку Jenkins Artifact в локальный репозиторий Maven

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

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

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

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

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

person EngineerBetter_DJ    schedule 28.09.2011    source источник


Ответы (4)


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

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

mvn -s settings.xml compile package

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

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

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

person Mark O'Connor    schedule 28.09.2011

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

person pushy    schedule 29.09.2011
comment
Я пробовал это, и, к сожалению, это не имеет значения. У меня нет под рукой ссылки JIRA, но я считаю, что это известная проблема в Дженкинсе. - person EngineerBetter_DJ; 30.09.2011

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

person eckes    schedule 16.07.2013

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

person user924272    schedule 29.03.2014
comment
Спасибо, но этот вопрос относится к локальному репозиторию, а не к удаленному. - person EngineerBetter_DJ; 30.03.2014
comment
Прошу прощения - немного быстро прочитал. В этом случае изоляция локальных репозиториев maven для каждой сборки кажется более разумным подходом. Каждая сборка должна быть настроена на извлечение только полностью протестированных артефактов из репозитория выпуска. Это означает хорошее планирование/общение при выпуске общих библиотек для потребителей. - person user924272; 31.03.2014