Ответ
Nexus Repository Manager (от Sonatype) — это артефактный репозиторий, который я использовал как центральный хаб для всех бинарных зависимостей и результатов сборки в CI/CD-пайплайне. Его основное назначение — управление артефактами.
Ключевые функции, которые я применял на практике:
- Прокси-репозиторий: Кеширование артефактов из публичных репозиториев (Maven Central, npmjs, Docker Hub, PyPI). Это ускоряет сборки и обеспечивает независимость от внешних сбоев.
- Хостед-репозиторий: Внутреннее хранение собственных артефактов: JAR/WAR-файлы (Maven), пакеты npm, Docker-образы, Python-пакеты (pip), RPM/DEB-пакеты.
- Контроль версий и хранение снапшотов/релизов: Чёткое разделение между нестабильными версиями (
-SNAPSHOT) и финальными релизами. - Управление доступом (RBAC): Настройка прав для разных команд (разработчики — на чтение/запись, CI-сервер — на запись, продакшен — только на чтение релизов).
- Интеграция с CI/CD: В пайплайне Jenkins/GitLab CI этапы сборки публикуют артефакт в Nexus, а этапы деплоя — забирают его оттуда. Это обеспечивает воспроизводимость и контроль.
Пример настройки Maven (~/.m2/settings.xml) для работы с Nexus:
<settings>
<mirrors>
<mirror>
<id>nexus-central</id>
<name>Nexus Central Mirror</name>
<url>http://nexus.internal:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
Пример команды для публикации Docker-образа в Nexus:
docker tag my-app:latest nexus.internal:8083/my-docker-repo/my-app:1.0.0
docker push nexus.internal:8083/my-docker-repo/my-app:1.0.0
Использование Nexus — это best practice для создания надёжной и управляемой цепочки поставки ПО (Supply Chain).