自由式 shell 脚本中的陷阱在詹金斯中不起作用

自由式 shell 脚本中的陷阱在詹金斯中不起作用

我想要优雅的如果有人中止我的 Jenkins 作业,它就会被终止,所以我尝试使用 shell 脚本捕获中止信号并自定义终止步骤。
但 Jenkins 似乎忽略了所有陷阱并强制终止了作业。
示例脚本用于测试

exit_script() {
    echo "Printing something special!"
    echo "traped &  killed " >>text.txt
    echo "Maybe executing other commands!"
    trap - INT TERM ABRT  QUIT HUP # clear the trap
    kill -- -$$ # Sends SIGTERM to child/sub processes
}

trap 'exit_script' INT KILL ABRT QUIT HUP

echo "pid is $$"
echo "pid is $$" > test.txt
count=0
sleep 10
echo 1
echo 1 >>test.txt
sleep 10
echo 2
echo 2 >>test.txt
sleep 10
echo 3
echo 3 >>test.txt
sleep 10
echo 4
echo 4 >>test.txt
sleep 10
echo 5
echo 5 >>test.txt
sleep 10
echo 6
echo 6 >>test.txt
exit 0

我正在寻找如何捕捉信号终端在詹金斯中发出信号并定制终止命令。

仅供参考:此脚本在我的系统 bash 中运行良好,只需要更改 INT->SIGINT 等等。

答案1

我认为它运行良好,只需要进行一些更正,如果与陷阱相关的功能有任何问题,exit_script()它就不会工作。

我通过删除对其进行了测试kill -- -$$并且它运行正常,该函数正在被调用并且该过程继续执行。

答案2

一般来说,在 shell 脚本中,你可以这样捕获 SIGTERM 信号:

trap 'exit_script' TERM

PS 诱捕 KILL 不起作用,并且列出 QUIT 两次也没有帮助。

相关内容