Release d’une librairie au file de l’eau pour jenkins et maven
En ce moment je suis sur des problèmatiques de release avec mon projet maven.
Je voudrais que mon job jenkins soit capable de releaser automatiquement une version et mettre à jour les projets qui l’utilise comme dépendance.
Pour cela il y a deux petites commandes cli très utile. Mais d’abord, étudions comment structurer sont pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wps.invoicing</groupId>
<artifactId>mp-invoicing</artifactId>
<version>6.1.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Marketplace Invoicing</name>
<url>http://maven.apache.org</url>
<properties>
<majeur.version>6.1</artemis.version>
<patch.version>1</patch.version>
</properties>
</project>
Ici, la version majeur est variabilité et ne seras changé que sur les branches de releases. Par contre, la version patch va être incrémenter programmatiquement via le JenkinsFile.
Première commande, mettre le projet en version définitive :
1 |
mvn versions:set -DnewVersion='${majeur.version}.${patch.version}' |
puis commiter les changements
1 2 |
mvn versions:commit |
Ensuite, il faut deploy la version sur nexus.
Maintenant que notre version N a été publier, il ne reste plus qu’a incrémenter la version patch.
1 2 3 |
def pom = readMavenPom file: 'pom.xml' def incrementMinor = pom.properties['patch.version'].toInteger() +1 |
Ensuite, il faut updater la propriété (toujours dans le jenkinsFile)
1 2 |
bat "mvn versions:set-property -Dproperty=patch.version -DnewVersion=${incrementMinor}" bat "mvn versions:commit" |
Puis créer la nouvelle version snapshot, commit et deploy pour que tous les nouveaux projet l’ai
1 2 3 |
mvn versions:set -DnewVersion='${majeur.version}.${patch.version}-SNAPSHOT' </code><br /><code>mvn versions:commit </code><br /><code>mvn deploy |