我的 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

Jenkins管道中未设置Maven工具-LMLPHP

运行此管道时,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。

我该如何解决?

编辑:answer的摘要,使用toolwithEnv

我的工作代码现在是:
   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'''
        }
   }

最佳答案

您可以将Jenkinsfile中的工具与toolwithEnv代码段一起使用。

应该看起来像这样:

def mvn_version = 'M3'
withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) {
  //sh "mvn clean package"
}

10-08 04:36