脚本中的 Jenkins 和 kill 命令使构建失败

Jenkins and kill command in the script makes builds failed

由于在 Jenkins 的构建过程中挂起 python 进程 (yandex-tank) 的一些问题(之后构建无法停止)我需要通过一些额外的 kill 来停止这个有问题的进程命令超时或使用超时命令本身:

timeout $TIMEOUT yandex-tank-jmeter -i -o "jmeter.jmx=$WORKSPACE/$TEST_PLAN"

timeout 发送默认的 (15) kill 信号,但之后构建进入状态 FAILED。

是否有任何解决方法或特殊终止信号来使构建成功?

您是否尝试过手动覆盖退出代码?

timeout $TIMEOUT yandex-tank-jmeter -i -o "jmeter.jmx=$WORKSPACE/$TEST_PLAN"; RES=$?
//If  the  command timed out, then RES equals 124.
...
//at the end of job scenario:
if [ $RES -eq 124 ]; then RES=0;
fi
exit $RES  

根据 "Execute shell" 步骤的 Jenkins 文档:

By default, the shell will be invoked with the "-ex" option.

因此,Jenkins 将所有 shell 代码放入临时目录中的 shell 脚本文件中,类似于 /tmp/sh/jenkins45723947385985.sh 然后执行如下:

/bin/sh -xe /tmp/sh/jenkins45723947385985.sh

这可以在作业的控制台输出中看到。

-xe中的e选项表示shell一出错就退出。要更改此行为,请将自定义 shebang 行添加到 Jenkins shell 脚本的开头,例如

#!/bin/sh -x

Jenkins 将不再在发生错误时立即终止。