CI 自动化构建平台之核心代表:Jenkins
很多 Jenkins 玩家使用的是全量部署,跨服务器走内网环境。
但是笔者碰到的情况是跨服务器走外网的一个增量部署。
程序体积大概 70M,包括了 N 多的前端页面和图片。为了节省成本,三台服务器有两台的带宽只有 1M。而对外机有 100M。
实测增量部署,70M 的内容推送到 1M 带宽的机器人,一方面对带宽的占用比较大,另一方面推送过程耗费时间非常漫长。
在网上经过收集整理,并无相对成熟的解决方案。故此,笔者自己做了一个。(依赖推送插件:Publish Over SSH)
参数化构建方案
添加增量打包脚本
脚本内容如下:
job_path=${WORKSPACE}'/'
bak_path=${job_path}'bak/'
project_name='ezone'
if [ "${AllBuild}" = "true" ]
then
echo "全量部署"
rm -rf ${bak_path}*
fi
if [ ! -f "${job_path}Pack.jar" ]; then
wget -P ${job_path} http://code.taobao.org/svn/JenkinsPack/Pack/Pack.jar
fi
if [ ! -d ${bak_path} ]; then
mkdir ${bak_path}
fi
#增量打包
java -jar {job_path}Pack.jar {bak_path}/{project_name} {job_path}/target/{project_name} {job_path}/${project_name}.gzip
#删除旧版备份
rm -rf ${bak_path}/*
#进行新版备份
mv {job_path}target/{project_name} ${bak_path}
#清理编译日志
rm -rf ${job_path}/target/*
接着 Jenkin 配置,添加远程 SSH 执行插件
注:如果没有此选项,需去系统管理-插件管理,安装 Publish Over SSH
安装后在系统管理-系统配置最底部配置目标服务器连接信息
编写远程部署脚本:
代码如下:
project_path='/data/project/'
project_name='ezone'
tomcat_path='/data/ezone_tomcat'
if [ ! -f "${tomcat_path}/bin/UnPack.jar" ]; then
wget -P ${tomcat_path}/bin http://code.taobao.org/svn/JenkinsUnPack/UnPack/UnPack.jar
fi
#解压
java -jar {tomcat_path}/bin/UnPack.jar {project_path}/{project_name} {project_path}/${project_name}.gzip
#重启
sleep 3
cd ${tomcat_path}/bin
./shutdown.sh
sleep 10
#杀僵尸进程
./shutdown_kill.sh
./startup.sh
rm -rf {project_path}{project_name}.gzip
于是:
这样就完成了这个增量部署相关操作
优点:轻量,部署速度快。
缺点:在某些增量部署失败的情况下需要通过全量部署来保持同步(或自己通过脚本去确定哪次部署的增量包)
关于增量部署的两个 jar 包源码:
增量打包相关:http://code.taobao.org/p/JenkinsPack/src/
增量解包相关:http://code.taobao.org/p/JenkinsUnPack/src/
By:Coody
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于