Развертывание артефакта Maven для нескольких репозиториев с различными настройками
У нас есть многочисленные Java-проекты, которые являются CI, построенными с Jenkins. Они развернуты на нашем собственном сервере Nexus.
Проблема в том, что мы должны предоставить эти библиотеки третьей стороне, но без исходного кода.
Поэтому для каждого проекта в Nexus мы имеем:
- Освобождает репозиторий для наших разработчиков (включая развернутый исходный код)
- Репозитории снимков для наших разработчиков (включая развернутый исходный код)
- Репозиторий релиза третьей стороны (только JAR + POM)
- (и было бы хорошо иметь): Третий сторонний репозиторий снимков (только JAR + POM) для сторонних ночных сборников
Вопрос: как это обычно обрабатывается в мире Дженкинса/Нексуса? Я бы предпочел, чтобы в Jenkins была одна работа, которая обрабатывает сборку CI и процесс развертывания (артефакт развертывания) "автоматически".
В настоящее время я использую несколько профилей <distributionManagement>
в нашем "основном корне pom.xml" (включенном всеми проектами):
[...]
<profiles>
<profile>
<id>default</id>
<distributionManagement>
<repository>
<id>releases</id>
<name>Release</name>
<url>http://path/to/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshot</name>
<url>http://path/to/nexus/content/repositories/snapshots/</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
</profile>
<profile>
<id>third-party</id>
<distributionManagement>
<repository>
<id>releases</id>
<name>Release</name>
<url>http://path/to/nexus/content/repositories/third-party/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshot</name>
<url>http://path/to/nexus/content/repositories/third-party-snapshots/</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
</profile>
</profiles>
Из документов Maven, похоже, нет способа использовать несколько репозиториев в течение одного жизненного цикла сборки, не говоря уже о том, что нам нужен/не нужен источник, основанный на целевом репо.
Я могу сделать трюк с созданием задания в Дженкинсе с помощью Maven "Цели и параметры": clean deploy -P third-party
, а затем добавление действия Post-build - "Развертывание артефактов в репозиторий Maven" с данными по умолчанию - но в этом случае только SNAPSHOTs собираются как для репо и артефактов, выпущенных через Jenkins Maven Release Plug-in входят только в один репозиторий.
Любые практические идеи, как я могу это сделать, не нарушая нашу иерархию работы CI?
Спасибо заранее!
Ответы
Ответ 1
Вы можете просто обрабатывать все это в Nexus. Создайте цель репозитория, содержащую шаблон, подобный тому, который использовался в предварительно сконфигурированном примере "Все, кроме источников (Maven 2)", и еще более узкую эту цель с другим шаблоном, который ограничивает групповую, артефактическую и, возможно, даже версию.
Затем создайте привилегию, использующую целевой репозиторий, и назначьте ее пользователю или роли, к которой вы хотите получить соответствующий доступ.
Не нужно делать несколько развертываний или некоторые из них.
См. http://books.sonatype.com/nexus-book/reference/repository-targets.html
Ответ 2
Вы можете использовать Maven Wagon Plugin и загрузить одну банку в удаленную папку на этапе развертывания.