Ответ
В проектах мы всегда использовали несколько репозиториев в Nexus, организованных по типу артефакта и этапу жизненного цикла. Это основа надёжной артефакторики.
Типичная структура, которую я настраивал:
-
По типу артефакта (hosted):
maven-releases– для финальных релизных артефактов (версии без-SNAPSHOT). Политика: redeploy запрещено, что гарантирует иммутабельность.maven-snapshots– для SNAPSHOT-версий при разработке. Политика: разрешено перезаписывать один и тот же артефакт.docker-private– для собственных Docker-образов.npm-private– для приватных npm-пакетов.
-
Прокси-репозитории (proxy) для кэширования внешних источников:
maven-central– прокси до Maven Central.docker-hub– прокси до Docker Hub (для ускорения и соблюдения лимитов).
-
Групповые репозитории (group), которые объединяют hosted и proxy репозитории для удобства клиентов:
maven-public– группа, включающая[maven-releases, maven-snapshots, maven-central]. Вpom.xmlилиsettings.xmlразработчики указывают только URL этого группового репозитория.docker-all– группа[docker-private, docker-hub].
Пример настройки в Maven (settings.xml):
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.company.com/repository/maven-public/</url>
</mirror>
Преимущества такого подхода:
- Изоляция: SNAPSHOT никогда не смешаются с релизами.
- Контроль доступа: Можно выдать разным командам права только на определённые репозитории (например, деплой-команда может пушить в
maven-releases, а разработчики только вmaven-snapshots). - Политики хранения: Для
snapshotsможно настроить короткий срок жизни (удалять старые), а дляreleases– хранить вечно. - Надёжность и скорость: Прокси-репозитории кэшируют зависимости, ускоряя сборки и обеспечивая доступность при проблемах с внешним интернетом.