您的位置:首页 > Web前端 > Node.js

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

2015-12-02 19:02 579 查看
最近添置服务器 之前只有一个的时候使用比较原始的方式

就是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 写入

cd mytest

npm start (express4.0模块的启动命令)

然后构建运行 问题来了 根本停不下来啊,服务完全启动了但就是不报构建成功。(一直是红色圆圈)

进控制台看log 一切正常 各种请求都能响应。

这应该是jenkins判断任务完成的机制的问题。百度了半天未果

然后找了半天在界面上发现了这个

翻译结果

为建设项目运行一个窗口批处理脚本。该脚本将以当前目录的工作区作为运行。你在文本框中输入的文本将作为一个批处理文件执行,并将被认为是失败如果在执行%errorlevel%不是0。

如果在供应链管理中已经有一个批处理文件,可以在批处理文件中键入路径(相对于工作区目录),并且简单地执行。

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

在cmd中输入echo %errorlevel% 就能打印错误码了

关于命令的返回码 可以参考这篇文章http://blog.chinaunix.net/uid-10347480-id-3263127.html 点击打开链接

继续输入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 mytest

forever start bin/www

这里有个问题是可能会报错forever 不是内部命令

这是由于Jenkins使用系统环境变量而不是某个用户的环境变量,forever命令所在的目录(就是npm目录)可能不在系统的环境变量中,会导致上述错误

配置完成后 点击构建 执行 蓝色圆圈 构建完成

一个简单的本地测试项目的就完成了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: