web-dev-qa-db-fra.com

Infrastructure avec maven, Jenkins, Nexus

Nous utilisons maven. Je souhaite configurer une infrastructure afin que les artefacts créés automatiquement soient transférés vers le référentiel Nexus. Et puis ils pourraient être utilisés par les développeurs.

J'ai déjà créé Jenkins avec 1 emploi pour notre projet. Et j'ai configuré Nexus sur le même serveur.

Sur les PC des développeurs, j'ai copié le paramètre maven par défaut dans C:\Users {user} .m2\settings.xml en ajoutant cette section. Les références:

Configuration de Maven pour utiliser un seul Nexus

Référence des paramètres Maven

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

(Je viens de suivre Gestion du référentiel avec Nexus livre)

Quelles devraient être mes prochaines étapes? Si le travail de Jenkins doit avoir mvn install? Comment créer un référentiel Nexus pour les artefacts de l'entreprise?

32
Paul Verest

Pour déployer des artefacts sur Nexus, vous devrez inclure un section distributionManagement dans votre pom. Nexus est livré avec des référentiels spécifiques déjà configurés pour les instantanés et les versions. Vous devez donner le chemin correct à chacun de ceux-ci afin que maven déploie un instantané et libère des artefacts dans le bon référentiel. Ensuite, chaque fois que vous déployez des artefacts - généralement avec mvn deploy ou en utilisant plugin de libération maven , les artefacts y seront déployés. Nexus a l'authentification en écriture par défaut, vous devrez donc vous assurer d'ajouter un section serveur avec les informations d'identification correctes au settings.xml de toute personne qui déploiera des artefacts. Jenkins peut être traité à peu près comme n'importe quel autre utilisateur. Si vous lui faites faire un deploy comme build, alors chaque build sera déployé sur Nexus. Il existe également une action post-génération pour déployer des artefacts au cas où vous souhaiteriez que cela se produise plus tard dans le travail Jenkins.

17
Ryan Stewart

Je n'ai pas eu besoin d'apporter de modifications à mes projets pom.xml. Au lieu de cela, dans les jenkins "Actions post-construction", j'ai sélectionné "Déployer les artefacts dans le référentiel Maven", puis sélectionné "Avancé" et défini l'URL du référentiel sur http://nexusserver:8081/nexus/content/repositories/releases et l'ID du référentiel à deploymentRepo.

Dans le ~/.m2/settings.xml sur la machine jenkins j'ai ajouté

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

</settings>
17
Steve Brown

mise à jour pom.xml

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

puis pour maven ~/.m2/settings.xml add (il s'agit de l'utilisateur de déploiement par défaut dans Nexus)

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

puis mvn deploy

Il est ensuite possible d'utiliser l'artefact déployé dans n'importe quel projet, tout comme les artefacts standard. Dans ce cas, ajoutez à 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>

MISE À JOUR: Plus tard, nous nous sommes éloignés des référentiels d'instantanés et utilisions maven-release-plugin qui n'a besoin que de référentiels de type release.

12
Paul Verest

Les arguments d'objectif maven suivants pour le plug-in maven-release peuvent être utilisés pour passer l'authentification du référentiel nexus

-Dusername=<> -Dpassword=<>

utiliser avec le projet jenkins, ligne de commande maven, pour l'authentification nexus repo

1
Anamika

S'il s'agit d'une question Jenkins plutôt que d'une question Maven, je recommande d'utiliser la plupart des cas l'action Jenkins intégrée "Deploy Artifacts to Maven repository".

Avantages à mon avis:

  • Plus portable (nous utilisons différents référentiels pour différentes étapes du cycle de vie), et chaque instance Jenkins sait que c'est son propre référentiel
  • Plus évident pour quiconque lit le travail Jenkins
  • Plus conforme à la façon de faire des Jenkins
1
ISparkes