使用 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 AntInvoke 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.gz
builds
文件夹中 - 到服务器停止原来的进程,并删除原来的源码包
新建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 SSH
Source files
填写nodejs.tar.gz
Remote 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 SSH
Source files
填写${VERSION}.tar.gz
Remote 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
,点击后输入参数即可进行构建版本的回滚