Подтвердить что ты не робот

Развертывание артефакта 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?

Спасибо заранее!

4b9b3361

Ответ 1

Вы можете просто обрабатывать все это в Nexus. Создайте цель репозитория, содержащую шаблон, подобный тому, который использовался в предварительно сконфигурированном примере "Все, кроме источников (Maven 2)", и еще более узкую эту цель с другим шаблоном, который ограничивает групповую, артефактическую и, возможно, даже версию.

Затем создайте привилегию, использующую целевой репозиторий, и назначьте ее пользователю или роли, к которой вы хотите получить соответствующий доступ.

Не нужно делать несколько развертываний или некоторые из них.

См. http://books.sonatype.com/nexus-book/reference/repository-targets.html

Ответ 2

Вы можете использовать Maven Wagon Plugin и загрузить одну банку в удаленную папку на этапе развертывания.