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!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
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.
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