8

这个问题可能听起来很奇怪,但我如何让工作失败呢?

我有一个 python 脚本,它使用 scons 编译几个文件,并且作为 jenkins 作业运行。该脚本测试编译器是否可以构建 x64 或 x86 二进制文件,如果它无法执行其中之一,我希望该作业失败。

例如:如果我在 64 位系统上运行我的脚本并且它无法编译 64 位。我可以在脚本中做一些可能导致失败的事情吗?

4

4 回答 4

6

如果您的脚本以非零状态退出,则构建应该失败。

import sys
sys.exit(-1)
于 2012-08-20T11:17:43.010 回答
4

重要的是,当您的 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"
于 2016-08-12T19:22:35.923 回答
3

您可以随时引发异常。如果未处理,应用程序将停止。您甚至不需要指定要引发的异常。

if not yourTestHere:
    raise

如果要指定消息,只需引发标准​​异常。

from exceptions import Exception
if not yourTestHere:
    raise Exception("Script failed because of bla bla bla")
于 2012-08-20T11:15:17.053 回答
0

我作为菜鸟遇到了这个问题,发现如果您通过 Jenkins 中的 Windows 批处理 shell 运行 python 脚本,则接受的答案会丢失一些东西。

在这种情况下,只有在 shell 中的最后一个命令失败时,Jenkins 才会失败。因此,您的 python 命令可能会失败,但如果在它之后有另一行更改目录或其他内容,那么 Jenkins 会认为 shell 是成功的。

解决方案是在python行之后检查错误级别:

如果 %ERRORLEVEL% NEQ 0(退出)

如果 python 行失败,这将导致 shell 立即退出,导致 Jenkins 被标记为失败,因为 shell 上的最后一行失败。

于 2022-01-19T09:12:35.130 回答