Ответ 1
Вы можете попробовать Maven Repo Cleaner Jenkins Plugin
У нас есть менеджер локального репозитория Nexus, который обрабатывает все наши внутренние проекты (а также зеркалирование внешних репозиториев). Для наших внутренних проектов мы сохраняем только самые последние версии снимков. Например, если бы у нас были ProjectX 1.0, 1.1 и 1.2-SNAPSHOT, как только было выпущено 1.2, мы удалили бы 1.2-SNAPSHOT, а затем у нас 1.0, 1.1, 1.2 и 1.3-SNAPSHOT в нашем репозитории Nexus.
Проблема заключается в том, что наш сервер Jenkins имеет все OLD-снимки в своей локальной папке .m2/repository и продолжает успешно строить проекты с этими старыми моментальными снимками, когда на самом деле они должны быть неудачными (и наши разработчики должны исправлять их POM файлов.)
Можно ли настроить Maven (в settings.xml или pom.xml) для удаления этих нежелательных снимков, если они не присутствуют в репозитории Nexus?
Если нет, то какой лучший способ избавиться от них? Конфигурация Jenkins, работа cron, другой вариант?
Спасибо...
Вы можете попробовать Maven Repo Cleaner Jenkins Plugin
Мы используем аналогичную настройку здесь. У нас есть nexus, который автоматически удаляет моментальные снимки после выпуска артефакта (для некоторых репозиториев). Затем на нашем непрерывном сервере у нас просто есть задание cron, которое раз в день удаляет папку локального репозитория. Это хорошо работает для нас.
Сначала, если вы используете jenkins для создания лучшей практики для создания чистой сборки, что означает использование локального репозитория для каждой сборки, а не глобального сервера. Кроме того, звучит так, что вы не используете плагин release для выпуска своих артефактов, которые автоматически проверяют, содержит ли pom SNAPSHOT и не получится, если они есть. Кроме того, можно очистить локальный репозиторий с помощью maven-dependency-plugin. Основываясь на моем опыте, я просто сконфигурировал задачу, которая удаляет SNAPSHOT, которые старше месяца...
В Linux вы можете использовать эту команду:
find $HOME/.m2/repository/ \
-name "*-SNAPSHOT" \
-type d \
-mtime +60 \
-print \
-prune \
-exec rm -r "{}" \;
Пояснение:
*-SNAPSHOT
в папке $HOME/.m2/repository/
-exec
удалит папку, -prune
сообщит, что не попытается впоследствии войти в папку.-exec
удалит папку и файлы внутри.Это может быть проблема конфигурации с maven на вашем сервере jenkins.
maven может и должен настроить, чтобы периодически искать обновленные снимки, настроив значение <updatePolicy>
в <repository>
для <snapshots>
.
<updatePolicy>daily</updatePolicy>
Возможны следующие варианты: always
, daily
(по умолчанию), interval:X
(где X - целое число в минутах) или never
.
Кроме того, если версия изменяется (от 1.1-SNAPSHOT
до 1.2-SNAPSHOT
), неясно, как jenkins будет успешно строить с более старой версией (1.1-SNAPSHOT
).