pm2使用jenkins在EC2上运行不起作用?

时间:2016-08-12 10:15:19

标签: node.js jenkins amazon-ec2 pm2

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

最后一个命令是

pm2 start server.js

一切正常,构建显示成功,但稍后当我访问网站未显示的URL时。

我在节点服务器前面有一个nginx服务器,它给出了 502 Bad Gateway

在检查时,我意识到节点应用程序没有运行,所以我查看了pm2日志并发现了这种情况 -

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

2016-08-12 07:53:28:端口/var/lib/jenkins/.pm2/pub.sock上的BUS系统[READY]

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

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:停止app:服务器ID:0

2016-08-12 07:53:28:应用[服务器] 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

请停止工作,请立即寻求帮助。

2 个答案:

答案 0 :(得分:2)

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

导出BUILD_ID = dontKillMePlease

而不是

pm2 start server.js

使用

pm2重新启动server.js

server.js是您的应用程序,否则构建将失败如果在jenkins中,如果您提交并且它再次运行脚本导致pm2已经在运行server.js并且不会停止。

答案 1 :(得分:1)

来自ProcessTreeKiller

  

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

...

  

工作原理

     

ProcessTreeKiller充分利用了这个事实   默认情况下,新进程获取其环境变量的副本   产卵/创造过程。

     

它在执行的过程中设置一个特定的环境变量   建立工作。稍后,当用户请求停止构建作业时   进程它获取计算机上运行的所有进程的列表   他们的环境变量,并寻找环境变量   它最初为构建作业的过程设置。

     

然后,在其环境中使用该环境变量的每个作业   终止。

     

如果你的构建想让守护进程落后......

     

实现这一目标的便捷方法是更改​​环境变量   Jenkins的ProcessTreeKiller正在寻找的BUILD_ID。这将   导致Jenkins认为您的守护进程不是由Jenkins生成的   建立。例如:

     

BUILD_ID=dontKillMe /usr/apache/bin/httpd