我在 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 &
) &