jenkins部署nodejs项目,经过几番折腾,最终部署成功,分解步骤如下
执行步骤见下文执行过的命令,按循序执行即可
代码拉取后进入jenkins的workspace目录中,然后开始一步一步验证,确保手动成功启动服务后,再通过jenkins自动部署
# cd $WORKSPACE
# npm -i
# npm audit fix
出现Module not found: Error: Can’t resolve 'stylus-loader’错误,需要安装stylus stylus-loader两个模块
# npm install stylus stylus-loader
在运行npm run build的时候出现错误sh: cross-env: command not found
cross-env,则需要安装cross-env模块
# npm install cross-env
编译完成后,需要将项目文件和依赖的模块都移到生产环境目录中
# rsync -a --progress --exclude ".git" $WORKSPACE/server/ /home/homework/xxxx/
# rsync -a --progress --exclude ".git" $WORKSPACE/node_modules /home/homework/xxxx/
启动服务
# cd /home/homework/xxxx
# npm start
> koa-server@0.1.0 start /mnt/homework/addot
> cross-env mode=prod pm2 start app.js -i max
events.js:174
throw er; // Unhandled 'error' event
^
Error: spawn pm2 ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:246:19)
at onErrorNT (internal/child_process.js:421:16)
at internalTickCallback (internal/process/next_tick.js:72:19)
at process._tickCallback (internal/process/next_tick.js:47:5)
at Function.Module.runMain (internal/modules/cjs/loader.js:779:11)
at executeUserCode (internal/bootstrap/node.js:342:17)
at startExecution (internal/bootstrap/node.js:276:5)
at startup (internal/bootstrap/node.js:227:5)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Emitted 'error' event at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:252:12)
at onErrorNT (internal/child_process.js:421:16)
[... lines matching original stack trace ...]
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
经过几番周折,觉得是不是要用pm2命令启动一下试试?结果发现问题了,测试命令报错pm2: command not found,那就安装pm2命令,安装后在node目录里面生成pm2可执行文件,最后做个软连接
# npm install -g pm2
# ln -s /home/homework/node-v11.4.0-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/bin/
# pm2 -V
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
3.2.4
再次运行npm start项目启动成功,后面使用jenkins部署即可!!!