【问题标题】:Why Jenkins is failing after executing an external windows command line?为什么 Jenkins 在执行外部 Windows 命令行后会失败?
【发布时间】:2015-09-01 20:19:00
【问题描述】:

我必须在我的本地 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 

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

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

【问题讨论】:

  • 你测试了返回码吗?如果不为 0,Jenkins 会将构建标记为失败。
  • 布鲁诺·拉维特。我尝试测试 %ERRORLEVEL% 变量的值,但没有按预期工作。
  • 如果您的主机在 Windows 上,也许您必须选择“执行 Windows 批处理命令”构建步骤? (而不是执行shell)

标签: jenkins


【解决方案1】:

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

请在“执行 shell”构建步骤中添加以下行。

"#!/bin/sh"

现在让我解释一下为什么我们需要这一行来执行“Execute Shell”构建作业。

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

所以通过添加“#!/bin/sh”将允许您在没有选项的情况下执行。

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

【讨论】:

  • 感谢您回复@AbhijeetKamble。但是,我真的必须在 Windows 上运行它,因为我公司的服务器是基于 Windows 的。但无论如何,谢谢,它可能会说明我的问题。
【解决方案2】:

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

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多