解决Jenkins自动构建nodejs项目无法完成的问题

需求描述

最近添置服务器 之前只有一个的时候使用比较原始的方式:

  1. 手动ftp上传文件
  2. ps -ef|grep node* 找到在后台运行的node项目 kill这个进程
  3. 进入项目目录 nohup npm start &启动

这样重复的工作在数量少的情况下没感觉什么。一旦要几台服务器做负载均衡的时候,就显得比较繁琐了。
于是开始尝试用jenkins自动构建

测试环境 Jenkins+JDK8+win10 nodejs5.0.0 SVN1.8

遭遇和解决的一些问题

网上这方面的资料比较少,主要是这么奇葩的搭配
Jenkins本身是Java编写的对maven有支持,不过我这边是node没啥卵用。
网上随便搜了一篇教程跟着写踩了几个坑记下来防止再坑

前面一切正常,新建job选择了自由风格 就是第一项。

问题1:

因为是Windows系统 增加构建步骤的时候不要选择 execute shell,而应该选择execute Windows batch Command 小问题

问题2:

在execute Windows batch Command 写入(express4.0模块的启动命令)

cd mytestnpm start  

然后构建运行。。。
问题来了,根本停不下来啊!服务完全启动了但就是不报构建成功。(一直是红色圆圈)
进控制台看log, 一切正常,各种请求都能响应。
这应该是jenkins判断任务完成的机制的问题。百度了半天未果。
然后找了半天在界面上发现了这个(机翻注意)

为建设项目运行一个窗口批处理脚本。该脚本将以当前目录的工作区作为运行。你在文本框中输入的文本将作为一个批处理文件执行,并将被认为是失败如果在执行%errorlevel%不是0。如果在供应链管理中已经有一个批处理文件,可以在批处理文件中键入路径(相对于工作区目录),并且简单地执行。

问题一下子明白了 ,输入的命令的返回结果不是0
在cmd中输入

echo %errorlevel% 

就能打印错误码了。

关于命令的返回码 可以参考这篇文章 点击打开链接

继续输入

npm start

因为是在Windows上前台启动,这时候如果无法打印输出 %errorlevel% 控制台在打印log状态,是不是可以认为是没有返回呢?或者说没有返回0?
于是考虑转为后台启动,Windows上后台启动就无法使用nohup了。而且nohup的启动方式关闭时也不方便用统一的脚本重启。

这就是node这边代码的问题了,想着干脆一步到位把守护进程也加上吧 找到了forever和pm2这两个模块。

测试之后(使用环境为centos)发现pm2的似乎功能能强大一点,比较遗憾的是Windows上使用pm2有些问题,无法正常启动,于是改成用forever (全局安装)

npm install forever -g 

forever命令无法接npm start了,只好用 forever start bin/www的形式。
这里注意不要进入bin目录去start www。因为node中如果使用相对路径,可能会把根目录对应到启动位置,而默认的npm start的启动位置是bin那一级,可能会出现读不到对应资源的情况。
于是execute Windows batch Command中的内容变成了这样

cd mytestforever start bin/www

这里有个问题是可能会报错forever 不是内部命令
这是由于Jenkins使用系统环境变量而不是某个用户的环境变量,forever命令所在的目录(就是npm目录)可能不在系统的环境变量中,会导致上述错误。
配置完成后,点击构建 执行 蓝色圆圈 构建完成
一个简单的本地测试项目的就完成了

    原文作者:夕枫晚照
    原文地址: https://www.jianshu.com/p/4e733876e83d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞