Ich habe eine Pipeline erstellt und die eingebettete groovige Pipeline-Skriptdefinition verwendet und kann die Pom-Version nicht zu erhalten. Ich habe dies ausprobiert, was in einer groovigen Konsole funktioniert, aber im Jenkins-Build-Pipeline-Skript weitergeht:
def project = new XmlSlurper().parse(new File("pom.xml"))
def pomv = project.version.toString()
Laut der Dokumentation hat Jenkins einen $POM_VERSION
, aber der Wert enthält nichts, wenn ich ihn einer Variablen zuweise und ihn auschecke.
def pomv = "$POM_VERSION"
OR
def pomv = '$POM_VERSION"
Hat jemand eine Idee?
Verwenden Sie readMavenPom
wie folgt:
pom = readMavenPom file: 'pom.xml'
pom.version
Siehe Model - Referenz für Eigenschaften (wie in der obigen Version).
Damit dies funktioniert, muss das Plugin Pipeline Utility Steps installiert werden.
Auf der Seite Erste Schritte mit Pipeline wurde eine weitere Option angezeigt. Es funktioniert ohne zusätzliche Plugins.
Eine etwas robustere Version finden Sie in der gemeinsam genutzten Bibliothek ces-build-lib (sie enthält auch einige grundlegende unit-Tests ):
def version() {
def matcher = readFile('pom.xml') =~ '<version>(.+?)</version>'
matcher ? matcher[0][1] : null
}
Dies stimmt immer mit dem ersten <version>
-Tag überein, das im pom.xml
gefunden wird. In den meisten Fällen ist dies sollte die Version des Maven-Moduls oder seines übergeordneten Elements.
Sie können die readMavenPom
-Funktion ausprobieren, die verfügbar ist.
Weitere Informationen finden Sie hier: https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file
In Jenkins 2.138.3 gibt es zwei verschiedene Arten von Pipelines.
Deklarative und Skript-Pipelines.
"Deklarative Pipelines sind eine neue Erweiterung der Pipeline-DSL (es handelt sich im Wesentlichen um ein Pipeline-Skript mit nur einem Schritt, einem Pipeline-Schritt mit Argumenten (Direktiven genannt)). Diese Direktiven sollten einer bestimmten Syntax folgen ist strenger und sollte daher für diejenigen, die neu in Pipelines einsteigen, einfacher sein, grafische Bearbeitung ermöglichen und vieles mehr . Skript-Pipelines sind der Rückfall für erweiterte Anforderungen. "
Jenkins Pipeline: Agent vs. Knoten?
Hier ist ein Beispiel für eine deklarative Pipeline:
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}"
}
}
}
}
Beispiel für eine Skriptpipeline
node('master') {
stage('Test') {
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
echo "IMAGE: ${IMAGE}"
echo "VERSION: ${VERSION}"
}
}
Hier sind einige gute Links:
Scripted https://bulldogjob.com/articles/726-exploring-jenkins-pipelines-a-simple-delivery-flow
Es scheint so, als wäre readMavenPom
die einfachste Antwort, aber da es die Installation eines zusätzlichen Pipeline-Plugins erfordert, wird hier ein weiterer Ansatz verwendet, der den nativen Maven-Ansatz verwendet, anstatt xml zu laden (basierend auf dieser Antwort ).
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()
}
Aufgrund der Verwendung des grep
-Befehls kann dies auf einigen Plattformen, die nicht posix-kompatibel sind, möglicherweise nicht funktionieren. Sie können die Ausgabe jedoch immer in Groovy verarbeiten, anstatt über grep
zu paspeln.
Ich habe gerade die @ haridsv-Lösung verbessert, ohne grep zu verwenden:
#!/usr/bin/env
def call(String mvnBin = 'mvn',String pom_file = 'pom.xml') {
return sh(
script: mvnBin+''' -N -f '''+pom_file+''' org.Apache.maven.plugins:maven-help-plugin:evaluate -Dexpression=project.version -q -DforceStdout''',
returnStdout: true).trim()
}
Sie sollten readMavenPom nicht verwenden, da es veraltet sein wird (siehe PR https://github.com/jenkinsci/pipeline-utility-steps-plugin/pull/47/commits/eeebaa891a006c083ce10f883b7c1264533bb692 ). Sie können dies kopieren und in eine Datei einfügen, z. B. evaluationMavenPomVersion.groovy :-).