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