nodejs服务器没有在jenkins中给出成功状态

时间:2016-06-26 13:48:36

标签: jenkins

我想使用jenkins来运行nodejs项目。一切进展顺利,但我没有看到詹金斯工作取得任何成功。

我使用npm install& amp;来启动服务器在詹金斯的npm start命令。它启动服务器,但不会给构建成功,因此,我无法启动其他依赖于节点服务器和构建成功的作业。当新的提交到达时,jenkins会检测到它,但是当原始作业正在运行时,作业不会重新启动而是保持挂起状态。

我是詹金斯的新手。任何人都可以为此提出建议吗?

2 个答案:

答案 0 :(得分:2)

听起来js脚本的执行正在挂起你的构建,尝试使用&之后将其发送到后台:

npm install
npm start &

另请注意,从Jenkins作业运行npm start将生成一个新进程Jenkins will kill the jobs spawned during a build,如果您希望此进程保留为守护程序,则会出现问题。

为避免您需要在命令之前提供标记:

BUILD_ID=dontKillMe npm start &

您还没有具体了解工作流程中的所有步骤,但我想您在第一次工作之后尝试执行一些构建后操作,因此发现您的流程未运行导致后续工作失败。

另外,请尝试使用forever。它将确保您的脚本持续运行,直到您停止它为止,您可以使用它启动您的应用程序:

BUILD_ID=dontKillMe forever start yourApp.js

答案 1 :(得分:0)

问题:似乎您的nodejs服务器在执行后未在jenkins上运行,您已经研究并测试了几个解决方案

选项1-推荐:在Jenkins上运行后台进程,该进程使用BUILD_ID参数中的 dontKillMe 标志和 nuhup unix命令保持生命。< / p>

  

从文档中:实现此目的的便捷方法是更改​​Jenkins的ProcessTreeKiller正在寻找的环境变量BUILD_ID。这将使Jenkins假定您的守护进程不是由Jenkins构建生成的。

     

nohup 是用于忽略HUP(挂断)信号的POSIX命令。 HUP   按照惯例,信号是终端警告相关进程的方式   退出。

cd <yourApp>
BUILD_ID=dontKillMe nohup npm start &

选项2。使用node.js外部软件包,例如永远 pm2

  • PM2是守护进程管理器,可以帮助您24/7全天候管理和保持应用程序在线-link
  • 永远-一种简单的CLI工具,可确保给定脚本连续运行(即永远运行)-link

永久示例(本地安装):

cd <yourApp>
npm install forever
./node_modules/forever/bin/forever start -c "npm start"

pm2示例(全局安装):

npm install pm2 -g
cd <yourApp>
pm2 start scripts/start.js

测试:之后,可以使用bash脚本命令验证服务器是否正在运行:

# check process
ps -ef | grep node

# check connectivity in server port
telnet localhost <yourNodeJSPortRunning>

PS ,有时某些中断的信号会导致您的start.js脚本出现问题并终止节点进程,请尝试避免这种情况-例如:

     ['SIGINT', 'SIGTERM'].forEach(function(sig) {
      process.on(sig, function() {
        devServer.close();
        process.exit();
      });
    });
  })
  .catch(err => {
    if (err && err.message) {
      console.log(err.message);
    }
    process.exit(1);
  });

删除这段代码后,它可以正常工作,只要机器处于启动状态,该过程就可以进行。