Лучший способ обработать старые снимки в локальном хранилище? - PullRequest
13 голосов
/ 16 марта 2012

У нас есть менеджер локальных репозиториев 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 имеет все старые снимки в своей локальной папке .m2 / repository и продолжает успешно строить проекты на основе этих старых снимков, когда в действительности они должны давать сбои (а наши разработчики должны исправить их POM файлы.)

Можно ли настроить Maven (в settings.xml или pom.xml) для удаления этих нежелательных снимков, если они отсутствуют в репозитории Nexus?

Если нет, как лучше от них избавиться? Конфигурация Jenkins, работа cron, другой вариант?

Спасибо ...

Ответы [ 5 ]

3 голосов
/ 10 июля 2013

Вы можете попробовать плагин Maven Repo Cleaner Jenkins

2 голосов
/ 09 ноября 2017

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

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

Пояснение:

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

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

0 голосов
/ 16 марта 2012

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

0 голосов
/ 16 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...