![在 Jenkins 构建步骤中启动一个永久进程?](https://linux22.com/image/610645/%E5%9C%A8%20Jenkins%20%E6%9E%84%E5%BB%BA%E6%AD%A5%E9%AA%A4%E4%B8%AD%E5%90%AF%E5%8A%A8%E4%B8%80%E4%B8%AA%E6%B0%B8%E4%B9%85%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我在 Jenkins 部署结束时运行 shell 命令来重新启动永久脚本:
npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js
当我以用户 jenkins 身份运行该程序时,一切正常,并且构建历史记录的控制台输出也告诉我 forever 脚本正在运行。但是,部署完成后,该过程立即停止,并且 forever 过程也停止了。
什么原因导致了这种现象?我该如何解决它?
答案1
詹金斯杀死了该作业产生的所有进程。
可以通过将BUILD_ID
环境变量设置为其他值来禁用此功能:
export BUILD_ID=dontKillMe
看https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller了解详情
答案2
在新的 Pipeline 作业中,设置BUILD_ID
不再起作用。相反,您需要设置JENKINS_NODE_COOKIE
以防止 Jenkins 在作业完成时终止您的进程。
sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'
或者,更有选择地:
sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'
答案3
答案4
尝试:
(
set -e
export BUILD_ID=dontKillMe
export JENKINS_NODE_COOKIE=dontKillMe
npm install
forever stop app.js
forever start -a -l /var/log/forever.log app.js &
) &