我刚刚创建了一个Jenkins Pipeline DSL作业,我从SCM克隆了一个Java代码并尝试运行mvn clean
。但管道不断抛出错误说:
mvn clean install -Dmaven.test.skip=true -Dfindbugs.skip=true
/var/lib/jenkins/workspace/<project>@tmp/durable-77d8d13c/script.sh: 2:
/var/lib/jenkins/workspace/<project>@tmp/durable-77d8d13c/script.sh: mvn: not found
似乎它试图找到pom.xml
目录中的<project>@tmp
为空。实际代码在<project>
目录中成功克隆。以下是我的Jenkinsfile
:
node {
stage ("Clean Workspace") {
echo "${WORKSPACE}"
cleanWs()
}
stage ("Get Code") {
git branch: "${params.branch}", url: 'git@bitbucket.org:xx/xxxxxxx.git'
}
stage ("mvn clean") {
sh "mvn clean install -Dmaven.test.skip=true -Dfindbugs.skip=true"
}
}
我也尝试使用${WORKSPACE}
env变量,但仍无效。
答案 0 :(得分:1)
问题已解决,我通过将Maven工具步骤包括为:
来修改Pipeline DSL作业stage ("mvn clean") {
withEnv( ["PATH+MAVEN=${tool name: 'mvn', type: 'maven'}/bin"] ) {
sh "mvn clean install -Dmaven.test.skip=true -Dfindbugs.skip=true"
}
}
答案 1 :(得分:1)
您可以直接将mvn
添加到路径本身,而不是这样做。为此,打开〜/ .bash_profile并添加这些行。
MAVEN_HOME="<path to maven folder>"
export MAVEN_HOME
PATH=$PATH:$MAVEN_HOME/bin
不要忘记source ~/.bash_profile
进行更改。这将为路径提供mvn,以便您可以直接访问mvn
。
因此,如果您这样做,您的代码现在就像......
stage ("mvn clean") {
sh "mvn clean install -Dmaven.test.skip=true -Dfindbugs.skip=true"
}
答案 2 :(得分:1)
错误消息mvn: not found
表示Jenkins管道无法找到mvn命令。
您应该使用withMaven
管道步骤来提供有效的maven环境。
例如:
node {
stage ("Clean Workspace") {
echo "${WORKSPACE}"
cleanWs()
}
stage ("Get Code") {
git branch: "${params.branch}", url: 'git@bitbucket.org:xx/xxxxxxx.git'
}
stage ("mvn clean") {
withMaven {
sh "mvn clean install -Dmaven.test.skip=true -Dfindbugs.skip=true"
}
}
}
检查Jenkins是否已正确配置为使用maven(在&#39;管理Jenkins&gt;配置系统&#39;)和&#39; Pipeline Maven插件&#39;已安装(在&#39;管理Jenkins&gt;管理插件&#39;)。
此处提供更多信息:https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin