web-dev-qa-db-ja.com

Mavenツールが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、バージョン3.3.9という名前のMavenインストールがあります。

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へのハードコーディングされたパスを使用しない方がよいでしょう。

どうすれば修正できますか?


[〜#〜] edit [〜#〜]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'''
        }
   }
8

toolwithEnvスニペットを使用して、Jenkinsfileのツールを使用できます。

次のようになります。

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

使用する最も簡単な方法は、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

8
zhangfx