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.