Infrastruktura z maven, Jenkins, Nexus

Używamy Mavena. Chcę skonfigurować infrastrukturę, aby automatycznie zbudowane artefakty trafiały do repozytorium Nexusa. A potem mogą być używane przez deweloperów.

Ustawiłem już Jenkinsa z 1 zadaniem dla naszego projektu. A ja ustawiłem Nexusa na tym samym serwerze.

Na komputerach deweloperów skopiowałem domyślne ustawienie Mavena do C:\Users{user}.m2 \ settings.xml dodawanie tej sekcji. Bibliografia:

Konfiguracja Mavena do używania pojedynczego Nexusa

Maven Settings Reference

<mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://myserver:8081/nexus/content/groups/public</url>
</mirror>

(po prostu śledzę Zarządzanie repozytorium za pomocą książki Nexus)

Jakie powinny być moje następne kroki? Czy Jenkins job powinien mieć mvn install? Jak stworzyć repozytorium Nexus dla artefaktów firmowych?

Author: Paul Verest, 2011-08-05

5 answers

Aby wdrożyć artefakty do Nexusa, musisz dołączyć distributionManagement section do pom. Nexus jest dostarczany z określonymi repozytoriami już skonfigurowanymi zarówno dla migawek, jak i wydań. Powinieneś podać poprawną ścieżkę do każdego z nich, aby maven wdrożył migawki i zwolnił artefakty do prawidłowych repo. Następnie za każdym razem, gdy wdrażasz artefakty-zazwyczaj za pomocą mvn deploy lub za pomocą maven release plugin , artefakty zostaną tam wdrożone. Nexus napisał uwierzytelnianie jest domyślnie włączone, więc musisz dodać do ustawień sekcję serwera z poprawnymi poświadczeniami.xml każdego, kto będzie instalował artefakty. Jenkins może być traktowany jak każdy inny użytkownik. Jeśli masz do wykonania deploy jako jego kompilację, wtedy każda kompilacja zostanie wdrożona do Nexusa. Istnieje również akcja post-build do wdrażania artefaktów w przypadku, gdy chcesz, aby stało się to później w pracy Jenkins.

 16
Author: Ryan Stewart,
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
2011-08-05 01:09:09

Nie musiałem wprowadzać żadnych zmian w moich projektach pom.xml. Zamiast tego w jenkins "post-build Actions" wybrałem "Deploy artefacts to Maven repository", a następnie "Advanced" i ustawiłem adres URL repozytorium na http://nexusserver:8081/nexus/content/repositories/releases, A ID repozytorium na deploymentRepo.

W ~/.m2/settings.xml na maszynie jenkins dodałem

<settings>
  <servers>
    <server>
      <id>deploymentRepo</id>
      <username>deployment</username>
      <password>deployment123</password>
    </server>
  </servers>
   ...

</settings>
 17
Author: Steve Brown,
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
2013-04-19 00:04:30

Update pom.xml

 <distributionManagement>
    ...
    <repository>
      <id>deploymentRepo</id>
      <name>Internal Releases</name>
      <url>http://nexusserver:8081/nexus/content/repositories/releases</url>
    </repository>
    ...
  </distributionManagement>

Następnie dla maven ~/.m2/settings.xml Dodaj (jest to domyślny użytkownik wdrożenia w Nexusie)

<server>
  <id>deploymentRepo</id>
  <username>deployment</username>
  <password>deployment123</password>
 </server>

Następnie mvn deploy

Wtedy możliwe jest użycie rozmieszczonych artefaktów w dowolnym projekcie, tylko jako standardowych artefaktów. W tym przypadku dodać do pom.xml

<!-- company repositories -->
    <repository>
        <id>deploymentRepoReleases</id>
        <name>Releases (Nexus)</name>
        <url>http://nexusserver:8081/nexus/content/repositories/releases/</url>
    </repository>
    <repository>
        <id>deploymentRepoSnapshots</id>
        <name>Snapshots (Nexus)</name>
        <url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url>
    </repository>

Aktualizacja: później odeszliśmy od repozytoriów migawek i używaliśmy maven-release-plugin, które wymagają tylko repozytoriów typu release.

 12
Author: Paul Verest,
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
2014-04-03 09:09:45

Jeśli jest to pytanie Jenkinsa, a nie Mavena, zalecałbym użycie wbudowanej akcji Post build Jenkins "Deploy artefacts to Maven repository" w większości przypadków.

Zalety moim zdaniem:

  • bardziej przenośne (używamy różnych repozytoriów na różnych etapach cyklu życia), a każda instancja Jenkinsa zna własne repozytorium
  • bardziej oczywiste dla każdego, kto czyta pracę Jenkinsa
  • bardziej zgodne ze sposobem działania Jenkinsa rzeczy
 1
Author: Ian Sparkes,
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
2016-02-08 09:46:11

Następujące argumenty Maven goal dla maven-release-plugin mogą być użyte do przekazania uwierzytelniania repozytorium nexus

-Dusername=<> -Dpassword=<>

Użyj w projekcie jenkins, wiersz poleceń maven, do uwierzytelniania repo nexus

 1
Author: Amit Kaneria,
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
2016-05-12 20:53:55