Libération de Maven à Nexus

Libération Maven à Nexus

1. Vue d'ensemble

Dans l'article précédent de cette série, nous avons mis en place undeployment process with Maven to Nexus. Dans cet article, nous allons configurer lesRelease Process with Maven - à la fois dans lespom du projet et dans un travail Jenkins.

2. Référentiel dans lepom

Pour que Maven puisse publier sur un serveur de référentiel Nexus, nous avons besoin des informationsdefine the repository via l'élémentdistributionManagement:


   
      nexus-releases
      http://localhost:8081/nexus/content/repositories/releases
   

Le référentiel de versions hébergé est prêt à l'emploi sur Nexus, il n'est donc pas nécessaire de le créer explicitement.

3. SCM dans les Mavenpom

Le processus Release interagira avec le contrôle de code source du projet - cela signifie que nous devons d'abord définir l'élément<scm> dans nospom.xml:


   scm:git:https://github.com/user/project.git
   http://github.com/user/project
   scm:git:https://github.com/user/project.git

Ou, en utilisant le protocole git:


   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git

4. Le plugin Release

Le plugin Maven standard utilisé par un processus de publication est lemaven-release-plugin - la configuration de ce plugin est minimale:


   org.apache.maven.plugins
   maven-release-plugin
   2.4.2
   
      [email protected]{project.version}
      true
      releases
   

Ce qui est important ici, c'est que la configuration dereleaseProfiles forcera en fait un profil Maven - le profilreleases - à devenir actif pendant le processus de Release.

C'est dans ce processus que lenexus-staging-maven-plugin est utilisé pour effectuer un déploiement vers le référentiel Nexus denexus-releases:


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

Le plugin est configuré pour exécuter le processus de libérationwithout the staging mechanism, identique àpreviously, pour le processus de déploiement (skipStaging=true).

Et également similaire au processus de déploiement,Releasing to Nexus is a secured operation - nous allons donc utiliser à nouveau le formulaire utilisateur de Nexus Out of the Boxdeployment.

Nous devons également configurer les informations d'identification pour le serveurnexus-releases dans le globalsettings.xml (%USER_HOME%/.m2/settings.xml):


   
      nexus-releases
      deployment
      the_pass_for_the_deployment_user
   

Ceci est la configuration complète

5. Le processus de libération

Décomposons le processus de publication en petites étapes ciblées. Nous effectuons une Release lorsque la version actuelle du projet est une version SNAPSHOT - disons0.1-SNAPSHOT.

5.1. Sortie: propre

Cleaning a Release:

  • supprimer le descripteur de version (release.properties)

  • supprimer tous les fichiers POM de sauvegarde

5.2. libération: préparer

La partie suivante du processus de libération estPreparing the Release; cette volonté:

  • effectuer certaines vérifications - il ne devrait y avoir aucune modification non validée et le projet ne devrait dépendre d'aucune dépendance SNAPSHOT

  • changer la version du projet dans le fichier pom en un numéro de version complet (supprimer le suffixe SNAPSHOT) - dans notre exemple -0.1

  • exécuter les suites du projettest

  • commettre et pousser les changements

  • créer lestag à partir de ce code versionné non-SNAPSHOT

  • increase the version du projet dans le pom - dans notre exemple -0.2-SNAPSHOT

  • commettre et pousser les changements

5.3. libération: effectuer

La dernière partie du processus de libération estPerforming the Release; cette volonté:

  • étiquette de validation de paiement de SCM

  • construire et déployer le code publié

Cette deuxième étape du processus repose sur la sortie de l'étape de préparation - lesrelease.properties.

6. Sur Jenkins

Jenkins peut exécuter le processus de publication de deux manières: il peut soit utiliser ses propres plugins de version, soit simplement exécuter la version avec un travail maven standard exécutant les étapes de publication appropriées.

Les plugins Jenkins existants axés sur le processus de publication sont les suivants:

Cependant, la commande Maven permettant d'effectuer la publication étant assez simple, nous pouvons simplement définir un travail Jenkins standard pour effectuer l'opération - aucun plug-in n'est nécessaire.

Donc, pour un nouveau travail Jenkins (Construire un projet maven2 / 3) - nous allons définir 2 paramètres String:releaseVersion=0.1 etdevelopmentVersion=0.2-SNAPSHOT.

Dans la section de configuration deBuild, nous pouvons simplement configurer la commande Maven suivante pour qu'elle s'exécute:

Release:Clean release:prepare release:perform
   -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}

Lors de l'exécution d'un travail paramétré, Jenkins demandera à l'utilisateur de spécifier des valeurs pour ces paramètres - donc chaque fois que nous exécutons le travail, nous devons remplir les bonnes valeurs pourreleaseVersion etdevelopmentVersion.

De plus, cela vaut la peine d’utiliser lesWorkspace Cleanup Plugin et de vérifier l’optionDelete workspace before build starts pour cette version. Cependant, gardez à l'esprit que l'étapeperform de la version doit nécessairement être exécutée par la même commande que l'étape sprepare- c'est parce que la dernière étapeperform utilisera lesrelease.properties fichier créé parprepare. Cela signifie que nous ne pouvons pas avoir un Job Jenkins exécutantprepare et un autreperform en cours d'exécution.

7. Conclusion

Cet article a montré comment implémenter le processus deReleasing a Maven project avec ou sans Jenkins. Similaire àto Deployment, ce processus utilise lesnexus-staging-maven-plugin pour interagir avec Nexus et se concentre sur un projet git.