在Jenkins构建步骤中开始永远的过程吗?


17

我在Jenkins部署结束时运行shell命令以重新启动永久脚本:

npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js

当我以用户jenkins的身份运行时,一切正常,并且构建历史记录中的控制台输出也告诉我永久脚本正在运行。但是,该过程将在部署完成后立即停止,并且永远停止。

是什么导致此行为,我该如何解决?

Answers:


28

詹金斯杀死了所有工作产生的过程。

可以通过将BUILD_ID环境变量设置为其他方式来禁用此功能:

export BUILD_ID=dontKillMe

有关详细信息,请参见https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller


1
这是“干净”的方式还是建议其他方式?
Patrick

据我所知,这是禁用ProcessTreeKiller的唯一方法
rcomblen 2013年


在此之前,我得到了。[ssh-agent]已停止。被信号15杀死。被信号15杀死。在此之后,我停止了[ssh-agent]。但是它仍然被杀死:(
阿米特·库玛·古普塔

1

这个问题已经很老了,但是我认为在这种情况下有一个更好的解决方案。

使用构建后脚本插件

自2016年初以来,该插件本身未进行任何更新,但是它可以完成工作,并且您无需摆弄环境变量。对我来说似乎比较整洁。


0

在新的管道作业中,设置BUILD_ID不再起作用。相反,您需要进行设置JENKINS_NODE_COOKIE以防止Jenkins在作业完成时终止您的进程。

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

或者,更具选择性地:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

请参阅ProcessTreeKiller上的WikiJenkins Jira中的此注释


0

尝试:

(
  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 &
) &
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.