埋め込みgroovyパイプラインスクリプト定義を使用してパイプラインを作成しましたが、POMからプロジェクトのバージョンIDを取得できないようです。私はこれを試してみましたが、これはgroovyコンソールで動作しますが、Jenkinsビルドパイプラインスクリプトで動作します:
def project = new XmlSlurper().parse(new File("pom.xml"))
def pomv = project.version.toString()
ドキュメントによると、ジェンキンスには$POM_VERSION
が、変数に代入してエコーアウトすると、値には何も含まれません。
def pomv = "$POM_VERSION"
OR
def pomv = '$POM_VERSION"
readMavenPom
を次のように使用します。
pom = readMavenPom file: 'pom.xml'
pom.version
Model プロパティのリファレンス(上記のバージョンなど)を参照してください。
これが機能するためには、 Pipeline Utility Steps plugin をインストールする必要があります
Jenkins 2.138.3には、2種類のパイプラインがあります。
宣言的およびスクリプト化されたパイプライン。
「宣言的パイプラインは、パイプラインDSLの新しい拡張です(基本的に、1つのステップ、引数(パイプラインと呼ばれる)を含むパイプラインステップのみのパイプラインスクリプトです。これらのディレクティブは特定の構文に従う必要があります。この新しい形式のポイントは、より厳密であるため、パイプラインを初めて使用する場合は簡単になり、グラフィカルな編集などが可能になります。スクリプト化されたパイプラインは、高度な要件のフォールバックです。」
次に、宣言パイプラインの例を示します。
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}"
}
}
}
}
スクリプト化されたパイプラインの例
node('master') {
stage('Test') {
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
echo "IMAGE: ${IMAGE}"
echo "VERSION: ${VERSION}"
}
}
良いリンクをいくつか紹介します
スクリプト https://bulldogjob.com/articles/726-exploring-jenkins-pipelines-a-simple-delivery-flow
Getting Started with Pipeline ページには、さらに別のオプションがありました。追加のプラグインなしで動作します。
少し堅牢なバージョンが共有ライブラリ ces-build-lib にあります(基本的な ユニットテスト もあります):
def version() {
def matcher = readFile('pom.xml') =~ '<version>(.+?)</version>'
matcher ? matcher[0][1] : null
}
これは、常に<version>
にある最初のpom.xml
タグと一致します。このshouldは、ほとんどの場合、Mavenモジュールまたはその親のバージョンです。
使用可能なreadMavenPom
関数を試すことができます。
詳細情報はこちら: https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file
readMavenPom
が最も簡単な答えのようですが、追加のパイプラインプラグインのインストールが必要なため、ここではxmlをロードする代わりにネイティブmavenアプローチを使用する別の方法があります( この答え )
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()
}
grep
コマンドを使用しているため、posix互換ではないプラットフォームでは動作しない場合がありますが、grep
をパイプ処理する代わりに、Groovyで出力をいつでも処理できます。
Grepを使用せずに@haridsvソリューションを強化しました。
#!/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()
}
非推奨になるため、readMavenPomは使用しないことをお勧めします(PR https://github.com/jenkinsci/pipeline-utility-steps-plugin/pull/47/commits/eeebaa891a006c083ce10f883b7c1264533bb692 を参照)。これをevaluateMavenPomVersion.groovyなどのファイルにコピーして貼り付けることができます:-)