我想要优雅的如果有人中止我的 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 两次也没有帮助。