【问题标题】:Making a job fail in jenkins让詹金斯的工作失败
【发布时间】:2012-08-20 11:11:25
【问题描述】:

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

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

例如:如果我在 64 位系统上运行我的脚本,但它无法编译 64 位系统。我可以在脚本中执行哪些可能导致失败的操作?

【问题讨论】:

  • 注意:我认为“使 python 退出非零状态”并没有回答这个问题......至少在我的情况下,问题是“为什么这不会让 Jenkins 工作失败? "

标签: python jenkins


【解决方案1】:

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

import sys
sys.exit(-1)

【讨论】:

  • 我正在这样做,但是就 Jenkins 而言,我的构建仍然“成功”。你知道为什么吗?
  • @Answoquest 我也有同样的问题,你有没有弄清楚它是什么?
  • 对不起,我不记得了。我很确定上述解决方案有效,但我最终做了一些愚蠢的事情。抱歉,我无法提供更多帮助:/
  • 我和 exit(1) 一样做了同样的事情,但我的构建仍然成功。
【解决方案2】:

重要的是,当您的 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"

【讨论】:

    【解决方案3】:

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

    if not yourTestHere:
        raise
    

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

    from exceptions import Exception
    if not yourTestHere:
        raise Exception("Script failed because of bla bla bla")
    

    【讨论】:

      【解决方案4】:

      我是一个菜鸟,发现如果您在 Jenkins 中通过 Windows 批处理 shell 运行 python 脚本,则接受的答案缺少一些东西。

      在这种情况下,Jenkins 只会在 shell 中的最后一个命令失败时才会失败。所以你的 python 命令可能会失败,但是如果它之后有另一行改变目录或其他东西,那么 Jenkins 会相信 shell 是成功的。

      解决办法是检查python行后面的错误级别:

      如果 %ERRORLEVEL% NEQ 0(退出)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        相关资源
        最近更新 更多