服务器资源:
- 版本控制服务器:MercurialServer * 2——可以实现实时热备
- 依赖包管理服务器:Nexus——提供内网的jar包自动下载
- 持续集成服务器:Hudson——提供自动化的持续集成服务
测试驱动开发模型(TDD):
- 在详细设计的基础上定义完善的接口,并详细填写接口的注视,包括方法的输入输出、业务逻辑等
- 编写接口实现类之前首先要按照接口的定义编写该实现类的单元测试类
- 提交代码时要将实现类的单元测试类一同提交
版本库的实时热备:
- 为什么要进行实时热备?
- “热备”是指不暂停服务对服务器进行备份,这要可以在备份时不影响服务正常使用;
- “实时热备”是指服务器发生变法时立即将改动备份到备份服务器中,这样无论服务器何时出现问题,代码都不会出现丢失,降低开发过程中的风险。
- 如何实现版本库的实时热备?
- “热备”比较简单,基本上所有常见的版本库(Git、Mercurial、SVN、CVS、CC、SS等)都可以不间断服务进行版本库的备份;
- “实时”这个要求复杂很多,既然是实时的,那么要求每次备份都是轻量级的,要在很短时间内完成,这就要求服务器要支持“增量方式”备份;
- “增量”备份的问题:对于传统的集中式版本库来讲,实现“增量方式”备份基本上已经可以满足“实时热备”的需求了,但是一旦版本库真正出现了问题,从备份中恢复将是一个灾难性的工作,为了达到“实时”备份,可能每分钟就会产生一个增量包,长期下来增量包的数量是无法控制的,所以对于集中式版本库的“实时热备”只是理论上可以实现罢了,并没有实际意义;
- 比“增量方式”更优美的方式:相对于集中式版本库而言,分布式版本库的“同步”概念真正实现了“实时热备”的要求,我们可以建立任意多个版本库服务器,让它们实时同步,任何一台服务器出现问题,其它的服务器都可以立即接管服务,不但实现了“实时热备”,还可以0时间恢复故障。
- 版本库服务器的选择:
- 首先基于以上需求的考虑,分布式版本库更加适合,因此Git和Mercurial成为了首选;
- 其次Git主要用于Linux下的开发,目前版本对Windows下的中文文件名支持尚存在一些问题,所以将采用Mercurial作为版本库服务器。
- 实现Mercurial服务器双机实时热备的步骤:
- 部署2台MercurialServer服务器,并同时开启SSH服务,并要求2台服务器的网络互通;
- 2台版本控制服务器中的一台作为对外服务的版本库(简称主机),并对其设置权限控制;另外一台作为备份服务器(简称备机),不对外开放权限;
- 在主机中为备机分配主机的读权限;
- 在备机的crontab中设置每分钟或每10分钟(按实际需求)调用脚本从主机拉(pull)数据。
依赖包管理:
- 使用中央仓库已经足够了,为什么还要搭建自己的仓库管理器?
- 未使用本地仓库管理器
- 使用本地仓库管理器
- 中央仓库的资源很丰富,基本上所有的开源jar包都可以找到,但是涉及到版权问题的jar包在中央仓库是没有的,比如Oracle的JDBC;
- 项目成员都使用中央仓库会导致相同的jar包被重复下载,这大大降低了构建的效率,同时既浪费了自己的带宽有浪费了中央仓库的带宽;
- 由于每次构建都要访问中央仓库,一旦网络出现问题将无法构建,这也为项目开发带来了风险;
- 与第3点类似,项目开发过程中可以用到自己开发的一些jar包,这些jar包在中央仓库也是没有的。
- 未使用本地仓库管理器
- 仓库管理器的选择:
- 综上所述,搭建本地仓库是必须的,那么怎样搭建本地版本仓库呢?开源的仓库管理器有很多,常用的有Artifactory、Nexus等。不同的仓库管理器使用方法没有任何不同,都与中央仓库是一样的,只是访问地址不同而已,但是不同的仓库管理器的安装和管理却不尽相同。综合易用性、可靠性等因素的考虑,这里采用Nexus作为本地的仓库管理器。
- 下载地址:
- Artifactory - http://www.jfrog.com/products.php
- Nexus - http://nexus.sonatype.org/
持续集成:
- 持续集成能做些什么?
- 定期从版本控制服务器中拉取最新代码
- 对最新代码进行编译,编译过程中需要用到的依赖包自动从依赖包管理服务器中下载
- 自动执行最新代码中的单元测试代码,并生成测试报告
- 当编译不通过或单元测试不同过时,自动发送错误信息或测试报告给最后提交代码的开发人员
- 如果编译通过并且单元测试也通过时,自动对程序进行打包归档
- 对打包后的程序进行部署
- 持续集成服务器的搭建:
- 一切从简:
- 下载完成的集成环境虚拟机:http://susestudio.com/search?q=hudson
- 配置网络连接
- 自己动手:
- 从网站http://hudson-ci.org/下载最先稳定版本;
- 准备一台Linux服务器,安装java、tomcat、mavne、mercurial;
- 将下载的hudson.war部署到tomcat中
- 一切从简:
- 管理Hudson服务器:
- 访问http://服务器IP:8080/hudson/,打开hudson首页
- Hudson的功能丰富,文档全面,具体使用方法参考官方文档:http://hudson-ci.org/
- Hudson中常用工具:
- 代码覆盖率检测工具——clover2:该工具的使用是在maven工程中进行插件配置,并将插件的调用设置到特定的生命周期,hudson构建后会生成代码覆盖率报告