基于Jenkins的自动部署方案

一、前言

在一家小公司工作,负责开发一个项目,前台用的angular2,后台是php和c++。每天下班之前都要将当天的代码部署的线上的开发服务器上,常常也需要更新到生产服务器(项目并没有正式运行,但是老板要用项目去拉投资)。手动部署代码总有一种浪费时间的感觉(因为下班时间到了啊!!!)。使用Jenkins+shell脚本完成自动部署就可以避免这种情况了。感谢赖同学的指导

二、流程介绍

公司内网搭建了git服务器,线上的开发用的服务器部署在阿里云,但是这台服务器的配置实在是太低了,完全没法胜任在线编译部署的需求。所以我要做的是将代码提交到git服务器后,使用Jenkins从git的dev分支拉取代码,构建部署计划(手动或者使用钩子都行)。

三、Jenkins的使用

第一步:部署Jenkins,这一步很简单,直接从Jenkins的官网上wget Jenkins的war包,然后java -jar jenkins.war即可。可以配合supervisor来实现自动启动和重启。

第二步:访问http://ip:8080进行配置,第一次配置的密码是java -jar jenkins.war时,在控制台上输出的密文。然后新建项目,然后选择构建一个多配置项目

第二步:进入到一个配置界面,填一下项目名称,其他的都不用管,直接来到源代码管理。我用的是Git服务器,所以选择git,然后填入仓库地址,配置项目仓库地址可以是HTTP协议,也可以是SSH协议,然后记得在Credentials字段填入认证信息,HTTP协议可以是用户名和密码,SSH的话可以是秘钥。选择的是dev分支。之后在填写构建信息。构建信息构建命令主要就是执行一个脚本

第三步:编写自动部署的脚本,主要就是编译,然后发送到远程服务器,这里用了scp来传输文件,非常好用。

脚本很简单,具体如下:

#!/bin/bash
## 自动部署脚本

cd homepage/mobile
cnpm install
ng build -prod -aot -env=prod
scp -r dist/* root@120.26.103.174:/alidata/www/m_family

注意这里的scp传输文件到远程服务器的前提是,远程服务器上.ssh文件夹下的authorized_keys中有Jenkins所在服务器的公钥,这样才能不需要密码通过认证。