为什么 Jenkins 在执行外部 windows 命令行后失败?

Why Jenkins is failing after executing an external windows command line?

我必须在我的本地 Jenkins 安装中创建一个作业,它执行 SonarQube 分析,然后调用一个命令行程序来搜索重复的代码行。但是,当我执行后一个命令 (cpd) 时,它运行正常,因为它在外部文件中正确输出,但 Jenkins 仍然指出它是这样的错误:

E:\BASE_DIR>cpd --minimum-tokens 100 --files "E:\BASE_DIR\Project_Folder" --language java  1>>"E:\BASE_DIR\Project_Folder\CPD_CLIG.txt" 

Build step 'Execute shell' marked build as failure
Finished: FAILURE 

我试图创建另一个调用该命令的脚本,但我得到了相同的结果。

关于如何处理这个问题有什么建议吗?任何解决方法都会非常有帮助。

对您的问题的简单而简短的回答是

请将以下行添加到您的 "Execute shell" 构建步骤中。

"#!/bin/sh"

现在让我向您解释为什么我们需要这一行来进行 "Execute Shell" 构建作业。

默认情况下,Jenkins 采用“/bin/sh -xe”,这意味着 -x 将打印每个 command.And 另一个选项 -e,这会导致 shell 停止 运行 当任何命令以非零(当任何命令失败时)退出代码退出时立即执行脚本。

因此,通过添加“#!/bin/sh”,您可以在没有选项的情况下执行。

请参考:How/When does Execute Shell mark a build as failure in Jenkins?

我没有找到适合我的问题的解决方案,但我意识到我可以使用 Jenkins 插件进行静态代码分析(DRY 插件和 PMD 插件)来解决我的问题。

谢谢大家