在 Jenkins 构建步骤中启动一个永久进程?

在 Jenkins 构建步骤中启动一个永久进程?

我在 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'

有关 ProcessTreeKiller 的 wikiJenkins Jira 中的此评论

答案3

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

使用构建后脚本插件

插件本身自 2016 年初以来就没有更新过,但它确实有用,你不必摆弄环境变量。我觉得这更简洁一些。

答案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 &
) &

相关内容