私のジェンキンスパイプラインにこの段階があります。
stage('Build') {
def mvnHome = tool 'M3'
sh '''for f in i7j-*; do
(cd $f && ${mvnHome}/bin/mvn clean package)
done
wait'''
}
Jenkins"Jenkinsの管理"グローバルツール構成に、M3
、バージョン3.3.9
という名前のMavenインストールがあります。
このパイプラインを実行しているとき、mvnHome
は空です。これはログでこれを取得するためです。
+ /bin/mvn clean install -Dmaven.test.skip=true
/var/lib/jenkins/jobs/***SNIP***/script.sh: 3: /var/lib/jenkins/jobs/***SNIP***/script.sh: /bin/mvn: not found
私はJenkinsサーバーでパス/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/M3
を見つけましたが、これは機能しますが、このスクリプトではmvnへのハードコーディングされたパスを使用しない方がよいでしょう。
どうすれば修正できますか?
[〜#〜] edit [〜#〜]: answer の概要、tool
とwithEnv
。
私の作業コードは今です:
stage('Build') {
def mvn_version = 'M3'
withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) {
sh '''for f in i7j-*; do
(cd $f && mvn clean package -Dmaven.test.skip=true -Dadditionalparam=-Xdoclint:none | tee ../jel-mvn-$f.log) &
done
wait'''
}
}
tool
とwithEnv
スニペットを使用して、Jenkinsfileのツールを使用できます。
次のようになります。
def mvn_version = 'M3'
withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) {
//sh "mvn clean package"
}
使用する最も簡単な方法は、tools
ディレクティブです。
pipeline {
agent any
tools {
maven 'M3'
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
}
}
M3
は、グローバルツール構成で事前構成された名前です。ドキュメントを参照してください。 https://jenkins.io/doc/book/pipeline/syntax/#tools