Развертывание артефакта Maven в несколько репозиториев с разными настройками

У нас есть множество Java-проектов, созданных с помощью Jenkins с помощью CI. Они прекрасно развернуты на нашем собственном сервере Nexus. Проблема в том, что нам нужно предоставить эти библиотеки третьей стороне, но без исходного кода. Итак, для каждого проекта в Nexus у нас есть:

  • Репозиторий Выпусков для наших разработчиков (включая развернутый исходный код)
  • Репозитории Snapshots для наших разработчиков (включая развернутый исходный код)
  • Репозиторий сторонних выпусков (только JAR + POM)
  • (и было бы неплохо иметь): Сторонний репозиторий моментальных снимков (только JAR + POM) для сторонних ночных сборок

Вопрос в том, как это обычно обрабатывается в мире Jenkins/Nexus? Я бы предпочел иметь одно задание в 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 кажется, что нельзя использовать несколько репозиториев в течение одного и того же жизненного цикла сборки, не говоря уже о том, что нам нужен/не нужен источник на основе целевого репо.

Я могу сделать трюк с созданием задания в Jenkins, с «Целями и параметрами» Maven: clean deploy -P third-party, а затем добавить действие после сборки - «Развернуть артефакты в репозиторий Maven» с данными «по умолчанию», но в этом случае, только SNAPSHOT отправляются как в репозиторий, так и в артефакты, выпущенные через Подключаемый модуль выпуска Jenkins Maven помещаются только в один репозиторий.

Любые практические идеи, как я могу это сделать, не усложняя нашу иерархию задач CI?

Заранее спасибо!


person Siaynoq    schedule 26.11.2012    source источник
comment
возможный дубликат несколько развертываний в maven   -  person Kate Gregory    schedule 26.11.2012
comment
Да, я проверил это. На самом деле рекомендуемый ниже плагин Wagon может иметь ту же функциональность, что и merge-maven-repos, которую можно использовать для другого поста. Так что в худшем случае нам нужно реализовать собственный плагин, мне просто интересно, есть ли общий способ сделать это даже с помощью Jenkins.   -  person Siaynoq    schedule 26.11.2012


Ответы (2)


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

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

Нет необходимости делать несколько развертываний или что-то в этом роде.

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

person Manfred Moser    schedule 26.11.2012
comment
Спасибо! После понимания иерархии репо-цель/привилегия/роль/пользователь было проще простого настроить Nexus для ограничения доступа определенных пользователей к исходным jar-файлам. У меня была некоторая путаница в отношении разницы между просмотром (-›возможность просматривать каталоги) и чтением (-›возможностью загружать файлы), но в остальном это было действительно просто. - person Siaynoq; 27.11.2012
comment
Ссылка не работает. - person Cleankod; 05.05.2017
comment
Исправлена ​​ссылка @CleanKod - person Manfred Moser; 10.05.2017

Вы можете использовать плагин Maven Wagon и загрузить один файл jar в удаленное место на этапе развертывания. .

person Piotr Gwiazda    schedule 26.11.2012
comment
Спасибо за идею. Это действительно выглядит полезно, но я не смог найти ни одного рабочего примера, который в основном реплицирует (или загружает) подмножество файлов (в данном случае main jar и pom.xml) в другое репо (и в то же место в иерархии). Любые подсказки? - person Siaynoq; 26.11.2012