Как изолировать несколько общих конфигураций репозитория Maven? - PullRequest
0 голосов
/ 23 сентября 2019

У меня проблемы с проектированием архитектуры нескольких репозиториев Maven.

Мы поддерживаем инфраструктуру для нашей собственной компании и пары клиентов.У нас есть внутренние компоненты компании , распространяемые компоненты и специфичные для клиента компоненты .У нас также есть корпоративное репозиторий SCM / CI / Nexus, а также для каждого клиента репозиторий SCM / CI / Nexus.

Теперь самое сложное: мыхотел бы, чтобы распространяемые компоненты были развернуты как в репозитории нашей компании, так и в клиентских репозиториях, когда мы выпускаем или внедряем (потому что компоненты клиента зависят от распространяемых компонентов).Однако необходимо, чтобы клиенты не видели конфигурации репозитория друг друга (или нашу конфигурацию внутреннего репо) в распространяемом коде.Это означает, что распространяемый pom.xml может не содержать определения этих репозиториев, в противном случае каждый клиент может увидеть все в исходном коде.Кроме того, запросы на загрузку внутренних артефактов или клиентских компонентов не следует отправлять по всем направлениям, в противном случае каждый клиент может увидеть запросы в журналах Nexus своего репозитория.

Как этого достичь?

Я знаю, что существует обходной путь, когда distributionManagement вообще не указан в pom.xml, и я могу использовать -DaltDeploymentRepository из командной строки, но я не хочу вводить URL-адреса каждый раз, когда я развертываю.Есть ли лучший способ?

Краткое резюме:

Внутреннее репо компании

  • внутренние компоненты
  • распространяемые компоненты

Клиент 1 репо

  • распространяемые компоненты
  • клиент 1 приложение

Клиент 2 репо

  • распространяемые компоненты
  • клиентское приложение 2

Распространяемые компоненты должны быть развернуты во всех репозиториях после выпуска.Клиенты не должны видеть конфигурацию репо для других или внутренних клиентов.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я не знаю, правильно ли я все понял, но вот несколько советов:

  • Обычно вы не развертываете в нескольких репозиториях, но добавляете прокси для одного репозитория в другом.Таким образом, ваши репозитории клиентов включают в себя прокси-репозиторий, который указывает на ваши другие (внутренние) репозитории.Вам не нужно публиковать какую-либо конфигурацию внутренних репозиториев, только URL.
  • Кроме того, вам не нужно публиковать целом POM в вашем репозитории Maven, но вы можете использовать плагин Maven для выравниванияудалите ненужные части вашего POM перед публикацией.
0 голосов
/ 27 сентября 2019

Мы выбрали приемлемое решение.

Каждый из компонентов содержит только 1 определение хранилища (загрузка и выгрузка), но URL-адрес читается из свойства, которое не определено в pom.xml.

На каждом компьютере разработчика и на каждом сервере Jenkins все URL-адреса определены в файле settings.xml.Сопоставление между repo-id и URL происходит там.Внутренние артефакты используют идентификатор для внутреннего репозитория («internal-repo»), клиентские артефакты имеют свои собственные идентификаторы («client1-repo», ...), а распространяемые артефакты используют идентификатор «redist-repo».

Внутри файла settings.xml для каждого клиента «redist-repo» сопоставляется с их собственным URL-адресом репозитория, и они счастливы.

При развертывании с компьютера разработчика нам нужно переопределить свойство для "URL-адрес «redist-repo» из командной строки, и мы можем развернуть его на любом клиентском репозитории.

В итоге:

  • внутренний pom.xml: scm / url: $ {company.internal.scm};distributionManagement / url и репозиторий / url: $ {company.internal.repo}
  • распространяемый pom.xml: scm / url: $ {company.redist.scm};distributionManagement / url и репозиторий / url: $ {company.redist.repo}
  • customer X ... pom.xml: scm / url: $ {customerX.scm};Дистрибутивное управление / url и репозиторий / url: $ {customerX.repo}

В файле settings.xml:

  • на внутреннем сервере сборки / машине разработчика: company.redist.scm= internal_scm, company.redist.repo = internal_repo
  • на сервере сборки X клиента: company.redist.scm = customerX_scm, company.redist.repo = customerX_repo

При развертывании мыможет переопределить -DaltDeploymentRepository = customerX_repo для распространяемых компонентов.

Если кому-то интересны примеры кода, пожалуйста, прокомментируйте, и я поделюсь pom и настройками.

...