pm2运行EC2使用jenkins不工作?

我在AWS EC2服务器上运行我的节点应用程序。 为了持续集成,我在EC2上安装了Jenkins,jenkins连续不断地轮询代码提交,并在提交时执行一些用脚本编写的命令。

最后的命令是

pm2启动server.js

一切工作正常,构build显示成功,但稍后当我访问网站的网站不显示。

我在节点服务器前有一个nginx服务器,它给502坏的网关

在检查我意识到节点应用程序没有运行,所以我cehcked pm2日志,发现这种情况发生 –

2016-08-12 07:53:28:[[[[PM2 / God daemon launch]]]]

2016-08-12 07:53:28:BUS系统[READY] on port /var/lib/jenkins/.pm2/pub.sock

2016-08-12 07:53:28:端口上的RPC接口[READY] /var/lib/jenkins/.pm2/rpc.sock

2016-08-12 07:53:28:在-fork模式下启动执行序列 – 对于应用程序名称:服务器ID:0

2016-08-12 07:53:28:应用程序名称:服务器ID:0在线

2016-08-12 07:53:28:pm2已经被信号死亡,转储过程列表退出之前…

2016-08-12 07:53:28:删除进程0

2016-08-12 07:53:28:停止应用程序:服务器ID:0

2016-08-12 07:53:28:App [server] id [0]和pid [25822],通过信号[SIGTERM]用代码[0]

2016-08-12 07:53:28:Proc没有定义或被杀死

2016-08-12 07:53:28:[PM2]平安退出

pm2一开始就遇害,不知道为什么,试图从npm重新安装pm2没有工作。

Ubuntu 14.04 LTS

节点v4.4.7 LTS

npm v2.15.8

pm2 v1.1.3

工作暂停,请立即需要帮助。

答案是在Dusan Bajic给出的评论中,如果有人正在使用节点应用程序与EC2上的jenkins进行持续集成,并且类似的事情发生在pm2,那么只需在启动pm2之前在脚本中添加此行。

导出BUILD_ID = dontKillMePlease

而不是

pm2启动server.js

使用

pm2重新启动server.js

server.js是你的应用程序,否则build会失败,如果在jenkins中,如果你提交并再次运行脚本,原因是pm2已经在运行server.js,并且不会停止。

来自ProcessTreeKiller

为了可靠地杀掉构build期间作业产生的进程,Jenkins包含了一些本地代码来列出这些进程并杀死它们

怎么运行的

ProcessTreeKiller利用了这样一个事实,即默认情况下,一个新进程获取其产卵/创build过程的环境variables的副本。

它在执行构build作业的过程中设置特定的环境variables。 稍后,当用户请求停止构build作业的进程时,它将获取计算机上运行的所有进程及其环境variables的列表,并查找最初为构build作业的进程设置的环境variables。

每个在其环境中具有该环境variables的作业都将被终止。

如果你的构build想让一个守护进程在后面…

一个方便的方法是更改​​Jenkins的ProcessTreeKiller正在寻找的环境variablesBUILD_ID。 这将使Jenkins认为你的守护进程不是由Jenkins构build的。 例如:

BUILD_ID=dontKillMe /usr/apache/bin/httpd