自动化部署在项目中的应用

zhushican 2015-10-6 17:31:5 seo教程 次阅读 查看评论

平台项目最麻烦就是部署了,传统的跨平台可能是Linux/Windows/Mac,但现在我们讲的跨平台还要加上网站、各种浏览器插件、Facebook扩展、iOS、iPad、Windows Phone等等。所以这个时候,自动化测试与自动化部署都非常重要,自动化部署还包括Linux服务器生产环境的自动化部署。

我最近在做一个实验性的项目,项目基于Node.js开发,目标就是用Javascript开发一个全平台的项目。跨平台项目其中一个问题就是部署问题,为了方便项目的管理,一个跨平台的项目很多时候文件是整合在一起的,比如说在iOS下的代码和Windows Phone下的代码可能略有些不同,但我们为了便于项目的管理,会将同样的业务逻辑代码放到Biz目录下。再比如说,同样的JS代码服务器和客户端都会用到,我们通常会将这些代码放到一起来管理

所以我们在最终发布的时候,需要对文件进行合并,甚至根据目标平台去修改一些代码。这里插一句,跨平台如果能做到共用80%的代码,那就已经不错了,借助自动化部署,我们可以让跨平台更加简单地实现。特别是基于Javascript的项目,我们需要对代码进行压缩混淆,还需要将Less转换为CSS,将Jade转换为HTML等等。

如果我们一个个全部用手工去做,一次两次可能还没什么,多了人会疯不算,还容易出错。我们经常讲自动化,能用机器做的事,尽量不要用人去做,同样的错误人会犯很多次,机器只会犯一次,当然这是在你改正的情况下。

言归正传,以我现在的项目为例,自动化部署基本上要做这么几件事:

1.合并文件,开发中文件很分散,但这显示不利于提高网站的速度,做过优化的人都知道,一个网站的文件不要太多,所以需要将JS和CSS文件合并成为一个,最好是不超过5个CSS/JS文件

2.压缩JS,在开发中会有大量的注释,变量命名也会很长,没什么好说的,用uglify压缩JS。

3.根据平台处理JS,我的观点是跨平台项目能做到80%的代码重用就不错了,各平台还有自己的特性。很简单的例子就是Node.js会经常用到exports和require,而客户端JS是不需要用的。当然还有很多的细微差别,我的做法就是将共用代码标识出来,比如说加上//==deploy==,凡事这个标识中间的代码,在客户端JS合并的时候,需要提取出来。有些时候我们可能还需要根据平台略为修改一下代码。

4.生成CSS并压缩,项目目的CSS是用Less写的,但我不想又加载一个Less.js给浏览器解释,所以需要提前生成CSS,幸好Less支持Node.JS。

5.生成静态的HTML,HTML我是用jade开发的,jade也可以实时生成,但我还是觉得生成静态的html好一些,因为我希望静态文件直接交给Nginx处理,而不是交给Node.js处理。项目数据与实现完全分离,运行HTML的服务器可能不支持Node.JS,所以我需要根据需要生成多国语言的HTML文件,目前支持简繁英三种语言,就需要生成这三种语言的HTML文件。

6.根据不同语言,实现链接不同的静态文件,我的服务器放在国外,国内用户的静态文件准备读取阿里云的存储。国外用户的静态文件也是分离的,一来提高速度,二来可以减轻主服务器的压力。虽然从访问量来说,对服务器不会构成任何压力,但从构建可伸缩的项目的角度来看,这点是完全有必要的。

7.修改版本号,对于Chrome和iOS程序,每次构建发布都要升级版本号,有些需要Zip压缩

8.根据不同平台部署不同的文件,因为我项目的文件是集中管理的,但不同平台有自己特有的文件,比如说Chrome是有manifest.json文件的。


基本上就是这样,未来会根据实际需要,自动生成网站、Chrome、iOS等项目所需要的项目文件,生成完成后就部署到本地模拟环境上。经过黑盒测试没有问题后,再由自动化部署项目将代码部署到生产环境上去。这里要重点提示一下,你不要做得太自动化了,中间一定要经过本地模拟环境上的黑盒测试,不要太相信程序。你如果把FTP这一块也做到一起,一点自动化部署,直接就生成并部署到生产环境上去了,看上去是很酷啊,结果悲剧了,中间出了个问题,老板把你给骂死了。

大概花了我两天的时间,部署的效率那是相当地高,基本上几秒钟就把网站和Chrome的插件给生成了。虽然我们老讲每日构建,但实际上操作起来还是很困难的。如果项目比较大,我们还可以把这个自动化部署做得更加智能,也还可以把iOS也做成自动化部署的,直接调用xCode编译生成ipa的文件。

« 上一篇下一篇 » zhushican原创文章,转载请注明出处! 标签: 项目  

相关日志:

评论列表:

控制面板
最近发表
网站分类
搜索
Tags列表
网站收藏
图标汇集
友情链接