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

Лучший способ обработки старых снимков в локальном репозитории?

У нас есть менеджер локального репозитория 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, другой вариант?

Спасибо...

4b9b3361

Ответ 2

Мы используем аналогичную настройку здесь. У нас есть nexus, который автоматически удаляет моментальные снимки после выпуска артефакта (для некоторых репозиториев). Затем на нашем непрерывном сервере у нас просто есть задание cron, которое раз в день удаляет папку локального репозитория. Это хорошо работает для нас.

Ответ 3

Сначала, если вы используете jenkins для создания лучшей практики для создания чистой сборки, что означает использование локального репозитория для каждой сборки, а не глобального сервера. Кроме того, звучит так, что вы не используете плагин release для выпуска своих артефактов, которые автоматически проверяют, содержит ли pom SNAPSHOT и не получится, если они есть. Кроме того, можно очистить локальный репозиторий с помощью maven-dependency-plugin. Основываясь на моем опыте, я просто сконфигурировал задачу, которая удаляет SNAPSHOT, которые старше месяца...

Ответ 4

В Linux вы можете использовать эту команду:

find $HOME/.m2/repository/ \
   -name "*-SNAPSHOT" \
   -type d \
   -mtime +60 \
   -print \
   -prune \
   -exec rm -r "{}" \;

Пояснение:

  • Найти что-нибудь с именем *-SNAPSHOT в папке $HOME/.m2/repository/
  • И это должен быть каталог
  • И он не должен был быть изменен за последние 60 дней.
  • Распечатайте найденное. Если вы хотите проверить команду, остановитесь здесь.
  • -exec удалит папку, -prune сообщит, что не попытается впоследствии войти в папку.
  • -exec удалит папку и файлы внутри.

Ответ 5

Это может быть проблема конфигурации с 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).