Как организована работа с Nexus для хранения артефактов?

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

Ответ

Nexus Repository Manager 3 выступает в роли единого источника истины для всех бинарных артефактов в нашем CI/CD-контуре.

Архитектура и настройка:

  • Типы репозиториев:
    • Proxy-репозитории: Для кэширования внешних зависимостей (Maven Central, Docker Hub, npmjs). Это ускоряет сборки и обеспечивает работу при отсутствии интернета.
    • Hosted-репозитории: Для хранения внутренних артефактов: maven-releases, maven-snapshots, docker-private, npm-private.
    • Group-репозитории: Объединяют proxy и hosted репозитории в один URL, упрощая конфигурацию клиентских инструментов.
  • Управление доступом: Интеграция с корпоративным LDAP/AD. Права доступа (чтение/запись/администрирование) назначаются через роли и привилегии.
  • Интеграция в CI/CD:
    • Maven/Gradle: Настройка через settings.xml или gradle.properties для публикации артефактов и разрешения зависимостей из group-репозитория.
    • Docker: Настройка insecure-registry или добавление сертификата Nexus. CI-пайплайн аутентифицируется и пушит образы в hosted-репозиторий.
    • NPM: Настройка .npmrc с аутентификационным токеном.

Пример фрагмента settings.xml для Maven:

<servers>
  <server>
    <id>nexus-releases</id>
    <username>${env.NEXUS_USER}</username>
    <password>${env.NEXUS_PASS}</password>
  </server>
</servers>
<mirrors>
  <mirror>
    <id>nexus-group</id>
    <mirrorOf>*</mirrorOf>
    <url>https://nexus.company.com/repository/maven-group/</url>
  </mirror>
</mirrors>

Операционные задачи:

  • Очистка: Настроены scheduled tasks для удаления старых snapshots и неподписанных артефактов.
  • Высокая доступность: Nexus развернут в кластере Kubernetes с StatefulSet и сетевым хранилищем (например, NFS или облачным диском) для тома sonatype-work.
  • Резервное копирование: Регулярный бэкап базы данных (встроенной или внешней PostgreSQL) и директории с артефактами.