python 在Jenkins让工作失败

tp5buhyn  于 2023-03-11  发布在  Python
关注(0)|答案(6)|浏览(154)

这个问题可能听起来很奇怪,但我如何让一个工作失败呢?
我有一个python脚本,它使用scons编译一些文件,并且作为jenkins作业运行,该脚本测试编译器是否可以编译x64或x86二进制文件,如果编译器无法完成其中一项,我希望作业失败。
例如:如果我在一个64位系统上运行我的脚本,而它无法编译一个64位系统。我可以在脚本中做些什么来导致失败吗?

00jrzges

00jrzges1#

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

import sys
sys.exit(-1)
0sgqnhkj

0sgqnhkj2#

重要的是,运行python脚本是jenkins工作的最后一步,当它抛出异常或非零异常代码时,如果你在那之后运行任何东西,即使echo“my job is done”也会改变错误代码。
对我来说,下面的例子失败了

echo "exit(1)" >> test.py
python test.py

当我做下面的工作时,我的Jenkins工作显示为成功

echo "exit(1)" >> test.py
python test.py
echo "This changes my exit code back to 0, which is successful"
c6ubokkw

c6ubokkw3#

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

if not yourTestHere:
    raise

如果你想指定一个消息,你可以只引发一个标准异常。

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

xfyts7mz4#

我是一个新手,发现如果你在Jenkins中通过Windows批处理shell运行python脚本,那么公认的答案是缺失的。
在这种情况下,Jenkins只有在shell中最后一个命令失败时才会失败,所以你的python命令可能会失败,但如果在它之后有另一行更改了目录或其他内容,那么Jenkins会认为shell是成功的。
解决方案是检查python行后面的错误级别:
如果%ERRORLEVEL%等于0(退出)
这将导致shell在python行失败时立即退出,从而导致Jenkins被标记为失败,因为shell上的最后一行失败。

czq61nw1

czq61nw15#

在相同的用例中,但以不同的方法处理。
在我的例子中,我习惯于构建shell脚本的步骤,因为我需要执行多个步骤,比如git pull,改变分支,激活虚拟环境,执行python脚本,停用虚拟环境等等。
我尝试为错误引发异常或在python代码文件中使用sys.exit代码。它仅适用于python脚本。不适用于Jenkins作业。因为在python脚本之后执行了一些步骤,jenkins将执行其余代码。Jenkins作业状态成功结束。
因此,我通过以下步骤更新了可能导致Jenkins作业失败的shell脚本步骤。

  • 在Python代码文件中添加引发异常或使用sys.exit代码。
  • 接下来检查python脚本的退出代码,如果退出代码为None Zero,则退出1 shell脚本,jenkins作业失败。
.
.
.

python3 python_code.py

EXIT_STATUS=$?
echo "Exit status : $EXIT_STATUS"
if [ "$EXIT_STATUS" -ne "0" ]
then
  exit 1
fi

.
.
.

python x python3jenkinsshellscript

pu3pd22g

pu3pd22g6#

不是让Jenkins运行bash,而是让Python脚本使用

Try{
  subprocess.check_call(cmd, args, shell=True)
}
catch{
  raise
}

subprocess.check_call使用stderr输出,这也可以更好地直接与Jenkins通信,并允许其他插件(如Failure Cause Management)读取基于正则表达式的构建并使构建失败。任何时候触发此异常,它都会引发退出代码和错误,这将使作业失败,因为Jenkins在任何非零返回代码上失败。
您可以阅读有关check_call here的更多信息
使用-1或1退出不起作用,因为您看不到真正的错误。

相关问题