J'ai créé un pipeline et j'utilise la définition de script de pipeline groovy intégrée et je n'arrive pas à obtenir la version pom. J'ai essayé ceci qui fonctionne dans une console groovy mais dans le script de pipeline de compilation Jenkins:
def project = new XmlSlurper().parse(new File("pom.xml"))
def pomv = project.version.toString()
Selon la documentation, Jenkins a un $POM_VERSION
mais la valeur ne contient rien quand je l'assigne à une variable et que je l'exécute en écho.
def pomv = "$POM_VERSION"
OR
def pomv = '$POM_VERSION"
Est-ce que quelqu'un a une idée?
Utilisez readMavenPom
comme ceci:
pom = readMavenPom file: 'pom.xml'
pom.version
Voir Modèle référence pour les propriétés (comme la version ci-dessus).
Pour que cela fonctionne, il faut installer le plug-in Pipeline Utility Steps
La page Mise en route avec Pipeline montre une autre option. Cela fonctionne sans plugins supplémentaires.
Une version légèrement plus robuste peut être trouvée dans la bibliothèque partagée ces-build-lib _ _ (elle contient aussi quelques tests unitaires } _):
def version() {
def matcher = readFile('pom.xml') =~ '<version>(.+?)</version>'
matcher ? matcher[0][1] : null
}
Cela correspond toujours à la première balise <version>
figurant dans le pom.xml
. Ce devrait être la version du module maven ou de son parent dans la plupart des cas.
Vous pouvez essayer la fonction readMavenPom
disponible.
Plus d'infos ici: https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file
Dans Jenkins 2.138.3, il existe deux types de pipelines différents.
Pipelines déclaratifs et scriptés.
"Les pipelines déclaratifs sont une nouvelle extension du pipeline DSL (c’est un script de pipeline avec une seule étape, une étape de pipeline avec des arguments (appelés directives), ces directives doivent suivre une syntaxe spécifique. Ce nouveau format a est plus stricte et devrait donc être plus facile pour ceux qui découvrent les pipelines, permettre l’édition graphique et bien plus encore. Les pipelines scriptés sont la solution de rechange pour les exigences avancées. "
Pipeline Jenkins: agent vs noeud?
Voici un exemple de pipeline déclaratif:
pipeline {
agent any
environment {
//Use Pipeline Utility Steps plugin to read information from pom.xml into env variables
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
}
stages {
stage('Test') {
steps {
echo "${VERSION}"
}
}
}
}
Exemple de pipeline scripté
node('master') {
stage('Test') {
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
echo "IMAGE: ${IMAGE}"
echo "VERSION: ${VERSION}"
}
}
Voici quelques bons liens:
Scripted https://bulldogjob.com/articles/726-exploring-jenkins-pipelines-a-simple-delivery-flow
On dirait que readMavenPom
est la réponse la plus simple, mais puisqu'elle nécessitait l'installation d'un plug-in de pipeline supplémentaire, voici une autre qui utilise l'approche maven native au lieu de charger xml (basé sur cette réponse )
def mvn_project_version(pom_file) {
return sh(
script: """mvn -N -f $pom_file org.Apache.maven.plugins:maven-help-plugin:evaluate -Dexpression=project.version |
grep -Ev '(^\\s*\\[|Download\\w+:)'""",
returnStdout: true).trim()
}
En raison de l'utilisation de la commande grep
, il est possible que cela ne fonctionne pas sur certaines plates-formes non compatibles posix, mais vous pouvez toujours traiter la sortie dans Groovy au lieu de passer par grep
.