Jenkins 管道中未设置 Maven 工具
Maven tool is not set in Jenkins pipeline
我的 Jenkins 管道中有这个阶段:
stage('Build') {
def mvnHome = tool 'M3'
sh '''for f in i7j-*; do
(cd $f && ${mvnHome}/bin/mvn clean package)
done
wait'''
}
在 Jenkins » Manage Jenkins » Global Tool Configuration 我有一个名为 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'''
}
}
如何使用结构:
withMaven(mavenOpts: MAVEN_OPTS, maven: 'M3', mavenLocalRepo: MAVEN_LOCAL_REPOSITORY, mavenSettingsConfig: MAVEN_SETTINGS) {
sh "mvn ..."
}
您可以将 Jenkinsfile 中的工具与 tool
和 withEnv
片段一起使用。
应该是这样的:
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
是Global Tool Configuration中预先配置的名称,见文档:https://jenkins.io/doc/book/pipeline/syntax/#tools
我的 Jenkins 管道中有这个阶段:
stage('Build') {
def mvnHome = tool 'M3'
sh '''for f in i7j-*; do
(cd $f && ${mvnHome}/bin/mvn clean package)
done
wait'''
}
在 Jenkins » Manage Jenkins » Global Tool Configuration 我有一个名为 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'''
}
}
如何使用结构:
withMaven(mavenOpts: MAVEN_OPTS, maven: 'M3', mavenLocalRepo: MAVEN_LOCAL_REPOSITORY, mavenSettingsConfig: MAVEN_SETTINGS) {
sh "mvn ..."
}
您可以将 Jenkinsfile 中的工具与 tool
和 withEnv
片段一起使用。
应该是这样的:
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
是Global Tool Configuration中预先配置的名称,见文档:https://jenkins.io/doc/book/pipeline/syntax/#tools