我在Jenkins管道中有这个阶段:
stage('Build') { def mvnHome = tool 'M3' sh '''for f in i7j-*; do (cd $f && ${mvnHome}/bin/mvn clean package) done wait''' }在Jenkins»管理Jenkins»全局工具配置我有一个叫做M3的Maven安装,版本为3.3.9 。
运行此管道时, 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的硬编码路径。
我该如何解决?
编辑 : 答案的摘要,使用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''' } }I have this stage in my Jenkins pipeline:
stage('Build') { def mvnHome = tool 'M3' sh '''for f in i7j-*; do (cd $f && ${mvnHome}/bin/mvn clean package) done wait''' }In Jenkins » Manage Jenkins » Global Tool Configuration I have a Maven installation called M3, version 3.3.9.
When running this pipeline, mvnHome is empty because I get this in the log:
+ /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 foundI did find a path /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/M3 on the Jenkins server, which works, but I would prefer not to use a hard coded path to mvn in this script.
How do I fix this?
EDIT: Summary of the answer, using tool and withEnv.
My working code is now:
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" }You can use your Tools in Jenkinsfile with the tool and withEnv snippets.
Should looks like this:
def mvn_version = 'M3' withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) { //sh "mvn clean package" }更多推荐
发布评论