这个问题可能听起来很奇怪,但我如何让工作失败呢?
我有一个 python 脚本,它使用 scons 编译几个文件,并且作为 jenkins 作业运行。该脚本测试编译器是否可以构建 x64 或 x86 二进制文件,如果它无法执行其中之一,我希望该作业失败。
例如:如果我在 64 位系统上运行我的脚本并且它无法编译 64 位。我可以在脚本中做一些可能导致失败的事情吗?
如果您的脚本以非零状态退出,则构建应该失败。
import sys
sys.exit(-1)
重要的是,当您的 python 脚本抛出异常或非零异常代码时,它的运行是您的 jenkins 作业的最后一步。如果您在那之后运行其他任何东西,即使 echo "my job is done" 也会更改错误代码。
对我来说,以下失败了我的詹金斯工作
echo "exit(1)" >> test.py python test.py
当我执行以下操作时,我的詹金斯工作显示为成功
echo "exit(1)" >> test.py python test.py echo "This changes my exit code back to 0, which is successful"
您可以随时引发异常。如果未处理,应用程序将停止。您甚至不需要指定要引发的异常。
if not yourTestHere:
raise
如果要指定消息,只需引发标准异常。
from exceptions import Exception
if not yourTestHere:
raise Exception("Script failed because of bla bla bla")
我作为菜鸟遇到了这个问题,发现如果您通过 Jenkins 中的 Windows 批处理 shell 运行 python 脚本,则接受的答案会丢失一些东西。
在这种情况下,只有在 shell 中的最后一个命令失败时,Jenkins 才会失败。因此,您的 python 命令可能会失败,但如果在它之后有另一行更改目录或其他内容,那么 Jenkins 会认为 shell 是成功的。
解决方案是在python行之后检查错误级别:
如果 %ERRORLEVEL% NEQ 0(退出)
如果 python 行失败,这将导致 shell 立即退出,导致 Jenkins 被标记为失败,因为 shell 上的最后一行失败。