【问题标题】:Jenkins/Hudson is not catching Perl script errorsJenkins/Hudson 没有发现 Perl 脚本错误
【发布时间】:2012-08-24 18:01:49
【问题描述】:
我目前正在使用 Jenkins/Hudson 触发 Perl 脚本,但是,我正在努力找出正确的异常是抛出一些 Jenkins 捡起它。在控制台中,它显示 perl 脚本错误,但 Jenkins 以 Build Success 结束。
我已经从 die 命令和出口 1 的系统打印中尝试了很多东西,但它似乎仍然没有捕捉到任何东西。
任何帮助都会很棒!提前致谢!
【问题讨论】:
标签:
perl
error-handling
hudson
jenkins
【解决方案1】:
Jenkins 认为以非零值退出的构建步骤已失败。应该够die()
也许您在 perl 之后还有另一个以零退出的 shell 命令? Jenkins 没有看到各个进程的每个退出代码。 Jenkins 只是将您输入到构建步骤区域的脚本放入一个临时文件中,并在该临时文件上调用/bin/sh。当脚本失败时,您可以让脚本以非零值退出。
最简单的方法是使用#!/bin/sh -xe 开始您的脚本。如果您研究 shell 手册页,您会看到 -e 选项使 shell 在任何进程以非零值退出时停止脚本。
【解决方案2】:
我在 Linux 和 Windows 上运行 Jenkins 作业时遇到了这个问题。我(艰难地)了解到 Linux 返回码必须在 0 到 255 之间。如果返回码超出此范围,则返回码将设置为 0。Perl 文档指出 die() 的返回码是非零,但不再具体。
因此,如果您的 die() 调用生成一个不在 0 到 255 之间的非零返回码,Linux 会将其视为零。
【解决方案3】:
我使用了TAP::Harness::JUnit。它将 TAP 输出包装在 XML 文档中,然后 XML 将通过 SCP 传送到 Hudson 服务器,供 Hudson 使用。
让 hudson 命令正确地执行所有 shell 命令需要花费一些时间,但我的意思是要尝试两三次才能正确设置所有路径。