Вы использовали один или несколько репозиториев в Nexus?

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

Ответ

В проектах мы всегда использовали несколько репозиториев в Nexus, организованных по типу артефакта и этапу жизненного цикла. Это основа надёжной артефакторики.

Типичная структура, которую я настраивал:

  1. По типу артефакта (hosted):

    • maven-releases – для финальных релизных артефактов (версии без -SNAPSHOT). Политика: redeploy запрещено, что гарантирует иммутабельность.
    • maven-snapshots – для SNAPSHOT-версий при разработке. Политика: разрешено перезаписывать один и тот же артефакт.
    • docker-private – для собственных Docker-образов.
    • npm-private – для приватных npm-пакетов.
  2. Прокси-репозитории (proxy) для кэширования внешних источников:

    • maven-central – прокси до Maven Central.
    • docker-hub – прокси до Docker Hub (для ускорения и соблюдения лимитов).
  3. Групповые репозитории (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 – хранить вечно.
  • Надёжность и скорость: Прокси-репозитории кэшируют зависимости, ускоряя сборки и обеспечивая доступность при проблемах с внешним интернетом.