使用 Jenkins 构建 nodejs 应用
准备工作
- 安装 Jenkins 
- 安装如下插件,并重启 Jenkins - GIT client plugin
- GIT plugin
- Git server plugin
- SSH Credentials Plugin
- SSH plugin
- Publish Over SSH
 
- 系统配置 
 进入- 系统管理=>- 系统设置,进行以下配置- 增加远程服务器的 remote server
 每需要连接一个新的远程服务器,都需要在此配置服务器的连接属性。- SSH remote hosts
 配置Hostname,Port,User Name,Password
- Publish over SSH
 配置 SSH Servers,配置Name,Hostname,Username,Remote Directory
 点击展开高级配置,勾选Use password authentication, or use a different key,并配置Password
 配置端口,默认为22,配置Timeout,此处因为 nodejs 构建时需要进行npm install操作,耗时可能受网络影响较大,故可以配置较高数值。
 
- SSH remote hosts
 
- 增加远程服务器的 remote server
构建项目
- 点击新建按钮,选择 - 构建一个自由风格的软件项目
- 项目配置 - 根据自己的需求配置项目的基本信息,如 nodejs_deploy
- 源码管理 
 选择自己的代码管理系统,这里我们用- Git,注意:如果是 public 的项目,则只需要填写- Repository URL即可;如果是 private 的项目,则需要选择正确的- Credentials,Credentials 的配置方法如下:- 在 Jenkins 主页点击进入 Credentials
- 在 Domain 中选择,这里选 Global
- 添加 Credentials- 在 ${Jenkins主目录}/.ssh/目录下,生成公钥和私钥
- 复制公钥文件到当前目录下 cp id_rsa.pub authorized_keys
- Username填写你现在登录的用户名
- Private Key选择- Enter directly,使用- cat id_rsa获取私钥,并复制到- Key中
- Passphrase为你生成公钥和私钥时填写的密码
- Description填写描述,方便在项目中选择
 
- 在 
- 在 Git 项目配置中(这里有可能是 Gitlab,总之就是你的项目主页),将刚才生成的公钥添加到项目的 Publish Keys列表中完成授权
 - 选择刚才创建的 Credentials,发现配置信息那里的错误消失了,说明连接源码库成功 
 最后,填写需要构建的分支,默认为- */master
 到这一步,可以保存,然后点击- 立即构建,测试项目能否成功拉取代码
- 构建步骤 - 开始构建后,Jenkins 会先帮我们拉取代码
- 在项目配置中,可以添加构建步骤,分别对应如下- Execute Windows batch command: Windows 系统节点下地自动化批处理任务
- Execute shell: 在命令行中执行脚本
- Execute shell script on remote host using ssh: 使用 SSH 链接到远程服务器并执行脚本
- Invoke Ant: 整合 Apache Ant
- Invoke top-level Maven targets: Maven 构建指令
- Send files or execute commands over SSH: 使用 SSH 传送文件到服务器并执行脚本
 
- nodejs 项目的构建 - 重新生成源码包,并使用当前构建号将源码包命名存储
 新建Execute shell,执行下面的命令(这里的命令有一些环境参数可用,具体可点击文本框下面的链接查看可用参数)
 这样,就将原有源码包删除,生成最新源码包,并存放到当前项目目录下的rm -rf ${WORKSPACE}/${JOB_NAME}.tar.gz tar -zcvf /tmp/${JOB_NAME}.tar.gz -C ${WORKSPACE}/ . mv /tmp/${JOB_NAME}.tar.gz ${WORKSPACE}/ cp ${WORKSPACE}/${JOB_NAME}.tar.gz ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}.tar.gzbuilds文件夹中
- 到服务器停止原来的进程,并删除原来的源码包
 新建Execute shell script on remote host using ssh,执行下面的命令forever stop nodejs/app.js rm -rf nodejs/nodejs_deploy.tar.gz
- 将最新源码包发送到服务端,解压,然后执行 nodejs 基本的构建步骤
 新建Send files or execute commands over SSHSource files填写nodejs.tar.gzRemote directory填写nodejs
 执行下面的命令tar -zxvf ~/nodejs/nodejs_deploy.tar.gz -C ~/nodejs/ cd nodejs npm install bower install node --harmony `which gulp` forever start -c "node --harmony" app.js
 - 至此,nodejs 项目构建完毕并启动(上述所有的构建过程都可以根据自己的项目需要进行配置) 
- 重新生成源码包,并使用当前构建号将源码包命名存储
 
 
- 根据自己的需求配置项目的基本信息,如 
回滚项目
我们使用构建一个项目的方式,来实现原有项目的回滚
- 点击新建按钮,选择 - 构建一个自由风格的软件项目
- 项目配置 - 根据自己的需求配置项目的基本信息,如 - nodejs_revert
- 配置回滚构建号 
 勾选- 参数化构建过程,添加参数- String Parameter,并起个名字,这里叫- VERSION
- 构建步骤 - 拷贝该构建号的源码包到此项目的 WORKSPACE下
 新建Execute shell,执行下面的命令(这里的命令有一些环境参数可用,具体可点击文本框下面的链接查看可用参数)cp -rf ${JENKINS_HOME}/jobs/nodejs_deploy/builds/${VERSION}.tar.gz ${WORKSPACE}/.
- 到服务器停止原来的进程,并删除原来的源码包
 新建Execute shell script on remote host using ssh,执行下面的命令forever stop nodejs/app.js rm -rf nodejs/nodejs_deploy.tar.gz
- 将最新源码包发送到服务端,解压,然后执行 nodejs 基本的构建步骤
 新建Send files or execute commands over SSHSource files填写${VERSION}.tar.gzRemote directory填写nodejs
 执行下面的命令mv -f ~/nodejs/${VERSION}.tar.gz ~/nodejs/nodejs_deploy.tar.gz tar -zxvf ~/nodejs/nodejs_deploy.tar.gz -C ~/nodejs/ cd nodejs npm install bower install node --harmony `which gulp` forever start -c "node --harmony" app.js
 
- 拷贝该构建号的源码包到此项目的 
 - 配置完成后,项目的构建按钮变成了 - Build with Parameters,点击后输入参数即可进行构建版本的回滚
