Wdrażanie Maven artifact do wielu repozytoriów z różnymi ustawieniami

Mamy wiele projektów Java, które są CI zbudowane z Jenkins. Są one rozmieszczone na naszym własnym serwerze Nexus w sam raz. Problem w tym, że musimy dostarczyć te biblioteki osobom trzecim, ale bez kodu źródłowego. Tak więc dla każdego projektu w Nexusie mamy:

  • Releases repozytorium dla naszych programistów (zawiera wdrożony kod źródłowy)
  • migawki repozytoria dla naszych programistów (zawiera wdrożony kod źródłowy)
  • strona trzecia release repozytorium (tylko JAR + POM)
  • (i dobrze by było mieć): third party snapshot repozytorium (tylko JAR + POM) dla third party nightly builds

Pytanie brzmi: jak to zwykle jest obsługiwane w świecie Jenkins / Nexus? Wolałbym mieć jedno zadanie w Jenkinsie, które obsługuje kompilację CI i proces wydania (deployment artefact)"automatycznie". Obecnie używam wielu profili <distributionManagement> w naszym " głównym głównym pom.xml" (zawarte przez wszystkich projekty):

[...]
<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>

Z Maven docs wynika, że nie można używać wielu repozytoriów podczas tego samego cyklu życia kompilacji, nie wspominając o tym,że potrzebujemy / nie potrzebujemy źródła bazującego na docelowym repo.

Mogę zrobić sztuczkę z tworzeniem zadania w Jenkins, używając Mavena "cele i opcje": clean deploy -P third-party, a następnie dodając akcję post-build - "Deploy artefacts to Maven repozytorium" z "domyślnymi" danymi - ale w tym przypadku tylko migawki będą zarówno repo, jak i artefakty wydane za pośrednictwem wtyczki Jenkins Maven Release plug-in {[29] } trafiają tylko do jednego repozytorium.

Jakieś praktyczne pomysły Jak mogę to zrobić bez nadmiernej komplikacji naszej hierarchii pracy CI?

Z góry dzięki!
Author: Rob Kielty, 2012-11-26

2 answers

Poradzisz sobie z tym wszystkim w Nexusie. Utwórz obiekt docelowy repozytorium, który zawiera wzorzec podobny do tego użytego w wstępnie skonfigurowanym przykładzie " All but sources (Maven 2)" i zawęzić ten cel jeszcze bardziej o inny wzorzec, który ogranicza groupid, artifactid, a może nawet wersję.

Następnie utwórz przywilej, który używa tego celu repozytorium i przydziel go użytkownikowi lub roli, do której chcesz mieć odpowiedni dostęp.

Nie ma potrzeby wykonywania wielu wdrożeń lub niektórych takie..

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

 5
Author: Manfred Moser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-10 15:20:31

Możesz użyć Maven Wagon plugin i przesłać pojedynczy jar do zdalnej lokalizacji w fazie wdrażania.

 0
Author: Piotr Gwiazda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-26 11:53:39