使用 Jenkins 构建 nodejs 应用

Author Avatar
Splendour 12月 29, 2015

准备工作

  • 安装 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 操作,耗时可能受网络影响较大,故可以配置较高数值。

构建项目

  • 点击新建按钮,选择构建一个自由风格的软件项目

  • 项目配置

    • 根据自己的需求配置项目的基本信息,如 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.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,点击后输入参数即可进行构建版本的回滚