Déploiement de Maven sur Nexus

1. Vue d'ensemble

Dans un article précédent, j'ai expliqué comment un projet Maven peut installer localement un fichier jar tiers qui n'a pas encore été déployé sur Maven Central (ou sur l'un des autres grands référentiels hébergés publiquement).

Cette solution ne doit être appliquée que dans les petits projets où l'installation, l'exécution et la maintenance d'un serveur Nexus complet peuvent être excessives. Cependant, à mesure qu'un projet se développe,

Nexus devient rapidement la seule option réelle et mature pour l'hébergement d'artefacts tiers, ainsi que pour la réutilisation d'artefacts internes dans les flux de développement.

Cet article montrera comment déployer les artefacts d'un projet sur Nexus, avec Maven .

2. Exigences Nexus dans le pom.xml

Pour que Maven puisse déployer les artefacts qu'il crée dans la phase de package de la construction, il doit définir les informations du référentiel où les artefacts packagés seront déployés, via l' élément distributionManagement :

 nexus-snapshots //localhost:8081/nexus/content/repositories/snapshots 

Un référentiel de snapshots public hébergé est prêt à l'emploi sur Nexus, il n'est donc pas nécessaire de créer ou de configurer quoi que ce soit. Nexus facilite la détermination des URL de ses référentiels hébergés - chaque référentiel affiche l'entrée exacte à ajouter dans ledu projet pom, sous l' onglet Résumé .

3. Plugins

Par défaut, Maven gère le mécanisme de déploiement via le maven-deploy-plugin - cela correspond à la phase de déploiement du cycle de vie par défaut de Maven:

 maven-deploy-plugin 2.8.1 default-deploy deploy deploy 

Le plugin maven-deploy-plugin est une option viable pour gérer la tâche de déploiement sur les artefacts d'un projet sur Nexus, mais il n'a pas été conçu pour tirer pleinement parti de ce que Nexus a à offrir. De ce fait, Sonatype a construit un plugin spécifique à Nexus - le nexus-staging-maven-plugin - qui est en fait conçu pour tirer pleinement parti des fonctionnalités plus avancées que Nexus a à offrir - des fonctionnalités telles que la mise en scène.

Bien que pour un processus de déploiement simple, nous n'ayons pas besoin de fonctionnalité de préparation, nous continuerons avec ce plugin Nexus personnalisé car il a été construit dans le but clair de bien parler à Nexus.

La seule raison d'utiliser le plugin maven-deploy-plugin est de garder ouverte l'option d'utiliser une alternative à Nexus à l'avenir - par exemple, un référentiel Artifactory. Cependant, contrairement à d'autres composants qui peuvent réellement changer tout au long du cycle de vie d'un projet, il est très peu probable que Maven Repository Manager change, de sorte que la flexibilité n'est pas requise.

Ainsi, la première étape de l'utilisation d'un autre plug-in de déploiement dans la phase de déploiement consiste à désactiver le mappage par défaut existant:

 org.apache.maven.plugins maven-deploy-plugin ${maven-deploy-plugin.version} true 

Maintenant, nous pouvons définir:

 org.sonatype.plugins nexus-staging-maven-plugin 1.5.1 default-deploy deploy deploy nexus //localhost:8081/nexus/ true 

L' objectif de déploiement du plugin est mappé à la phase de déploiement de la build Maven.

Notez également que, comme indiqué ci- dessus , nous n'avons pas besoin de la fonctionnalité de mise en scène dans un simple déploiement d' artefacts -SNAPSHOT sur Nexus, ce qui est entièrement désactivé via élément.

Par défaut, l'objectif de déploiement inclut le flux de travail intermédiaire, qui est recommandé pour les versions de version.

4. Le Global settings.xml

Le déploiement sur Nexus est une opération sécurisée - et un utilisateur de déploiement existe à cette fin sur n'importe quelle instance Nexus.

La configuration de Maven avec les informations d'identification de cet utilisateur de déploiement , afin qu'il puisse interagir correctement avec Nexus, ne peut pas être effectuée dans le pom.xml du projet. C'est parce que la syntaxe du pom ne le permet pas, sans parler du fait que le pom peut être un artefact public, donc pas bien adapté pour contenir des informations d'identification.

Les informations d'identification du serveur doivent être définies dans le fichier global Maven setting.xml :

 nexus-snapshots deployment the_pass_for_the_deployment_user 

Le serveur peut également être configuré pour utiliser la sécurité par clé au lieu des informations d'identification brutes et en texte clair.

5. Le processus de déploiement

L'exécution du processus de déploiement est une tâche simple:

mvn clean deploy -Dmaven.test.skip=true

Ignorer les tests est acceptable dans le contexte d'un travail de déploiement, car ce travail doit être le dernier travail d'un pipeline de déploiement pour le projet.

Un exemple courant d'un tel pipeline de déploiement serait une succession de travaux Jenkins, chacun déclenchant le suivant uniquement s'il se termine avec succès. En tant que tel, il incombe aux travaux précédents du pipeline d'exécuter toutes les suites de tests du projet - au moment où le travail de déploiement s'exécute, tous les tests devraient déjà réussir.

Si vous exécutez une seule commande, les tests peuvent être maintenus actifs pour s'exécuter avant l' exécution de la phase de déploiement :

mvn clean deploy

6. Conclusion

Il s'agit d'une solution simple mais très efficace pour déployer des artefacts Maven vers Nexus.

Il est également quelque peu avisé - nexus-staging-maven-plugin est utilisé à la place du plugin par défaut maven-deploy-plugin ; la fonctionnalité de transfert est désactivée, etc. - ce sont ces choix qui rendent la solution simple et pratique.

L'activation potentielle de la fonctionnalité de mise en scène complète peut faire l'objet d'un prochain article.

Enfin, nous aborderons le processus de publication dans le prochain article.