我在Jenkins中有以下管道脚本:
node {
withMaven(globalMavenSettingsFilePath: '/my/path/apache-maven-3.2.2/conf/settings.xml', jdk: 'JDK 1.8.0u92', maven: 'apache-maven-3.2.2', mavenSettingsFilePath: '/my/path/apache-maven-3.2.2/conf/settings.xml') {
sh '/my/path/apache-maven-3.2.2/bin/mvn clean install'
}
}
为此,我得到了:
nohup: failed to run command `sh`: No such file or directory
ERROR: script returned exit code -2
为什么会这样?
我确信Maven安装的路径是正确的。当我在没有管道的情况下运行作业时,Maven构建时没有错误,我可以看到它使用相同的路径。
答案 0 :(得分:3)
这可能是修改PATH
的结果。
检查您的脚本和全局属性,并删除对PATH
的修改。现在建议使用PATH+extra
代替。它仍然会被拾取,但不会破坏实际的PATH
。
Jenkins的相关问题:https://issues.jenkins-ci.org/browse/JENKINS-41339
答案 1 :(得分:2)
最后,我使用了shell
代替sh
并且它有效。不知道为什么,他们没有合适的API。
答案 2 :(得分:1)
我建议像这样使用它:
withMaven(
maven: 'M3',
mavenSettingsConfig: 'maven-settings-for-the-task',
mavenLocalRepo: '.repository') {
// Run the maven build
sh "mvn clean install"
}
除此之外,我不会使用全局settings.xml的绝对路径,也不会使用user settings.xml。我更喜欢使用"配置文件提供程序插件"这样做的好处是可以在Master上使用settings.xml,并且可以在所有节点上使用。
另请参阅文档:https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Maven+Plugin
答案 3 :(得分:0)
当您尝试运行从Windows计算机复制到UNIX计算机的脚本时,会出现此错误。
您需要使用以下命令将格式更改为UNIX: dos2unix