Для чего используется Nexus Repository Manager?

«Для чего используется Nexus Repository Manager?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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).