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

Posted

技术标签:

【中文标题】脚本中的 Jenkins 和 kill 命令使构建失败【英文标题】:Jenkins and kill command in the script makes builds failed 【发布时间】:2015-10-28 09:26:51 【问题描述】:

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

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

超时发送默认 (15) 终止信号,但之后构建进入状态 FAILED。

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

【问题讨论】:

yandex-tank 挂机是什么原因?与其处理后果,不如自己解决问题? 也许,但目前尚不清楚发生了什么。我在这里写了我的问题:***.com/questions/27419729/… 【参考方案1】:

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

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  

【讨论】:

这对我不起作用,至少在 Jenkins 版本 2.89.2 中【参考方案2】:

根据 Jenkins 文档中的“执行 shell”步骤:

默认情况下,将使用“-ex”选项调用 shell。

因此,Jenkins 将所有 shell 代码放入一个 shell 脚本文件中,在 temp 目录中,例如 /tmp/sh/jenkins45723947385985.sh,然后执行如下:

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

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

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

#!/bin/sh -x

一旦发生错误,Jenkins 将不再终止。

【讨论】:

以上是关于脚本中的 Jenkins 和 kill 命令使构建失败的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins构建java持续集成的2个坑,耽误了好久时间!

jenkins 调用 脚本命令 svn co 报错

Jenkins SSH 插件 - 根据任务(构建/发布)执行不同的 shell 脚本命令 - 环境变量

jenkins参数化构建过程中的各个参数之间是没有关联的吗

自动化测试脚本中包含adb命令,jenkins构建时找不到adb解决办法

Jenkins 无法捕获构建脚本错误问题