从Jenkins启动脚本、不挂起构建并保持进程运行的正确方法是什么?我好像不能让它起作用。要么脚本无法运行,要么构建挂起。
如果我放入构建的“执行外壳”步骤bash relaunch.sh &
、relaunch.sh > output.log &
或nohup bash relaunch.sh &
,则不会发生任何事情;构建完成,但进程不会运行。我猜这可能与Jenkins等待error pipe to close有关。
如果我按照建议的here执行nohup bash relaunch.sh 2>&1 > output.log
,输出将正确重定向,但构建挂起(未完成),并且当我终止构建时,该进程将终止。
按照建议的here、here和here将export BUILD_ID=dontKillMe
添加到“执行外壳”步骤,或者脚本本身也没有帮助。当我终止构建时,构建挂起,进程终止。不用说,我对Linux的了解非常有限。
人们如何以一种干净的方式做到这一点?
2条答案
按热度按时间nfzehxib1#
实现这一点的一种便捷方法是更改
Jenkins's
ProcessTreeKiller正在查找的EXECUTE SHELL下的环境变量BUILD_ID
。通过这样做,
Jenkins将假设后台作业不是由构建产生的,并且不会在完成作业后杀死它们。
感谢Joshua的观察,您还可以使用
JENKINS_NODE_COOKIE
作为vddsk6oq2#
我也遇到了完全相同的问题。我最终通过在Jenkins Execute外壳框中放置以下内容来修复此问题:
我将
&
移到了脚本文件中。下面是脚本的样子:希望这对某些人有帮助!