首页 文章

在Jenkins管道中未设置Maven工具

提问于
浏览
3

我在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 .

Global Tool Configuration » Maven Installations

运行此管道时, 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的硬编码路径 .

我该如何解决?


EDITanswer的摘要,使用 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'''
        }
   }

3 回答

  • 4

    您可以将Jenkins文件中的工具与 toolwithEnv 片段一起使用 .

    应该是这样的:

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

    最简单的方法应该是使用 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

  • -1

    使用这个结构怎么样:

    withMaven(mavenOpts: MAVEN_OPTS, maven: 'M3', mavenLocalRepo: MAVEN_LOCAL_REPOSITORY, mavenSettingsConfig: MAVEN_SETTINGS) {
        sh "mvn ..."
    }
    

相关问题