由于@tmp dir,Jenkins管道DSL Maven错误

时间:2018-03-20 13:11:17

标签: java maven jenkins jenkins-pipeline

我刚刚创建了一个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变量,但仍无效。

3 个答案:

答案 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