敏捷实践之一——持续集成 (Continuous Integration)数据库
1、Maven所实现的自动化构建正是持续集成的一个必要前提服务器
2、持续集成还要求开发人员使用版本控制工具和持续集成服务器框架
3、Subversion就是当前最流行的版本控制工具,而Hudson则是最流行的开源持续集成服务器软件工具
什么是持续集成?性能
持续集成就是快速且高频率地自动构建项目的全部源码,并为项目成员提供丰富的反馈信息单元测试
什么叫快速?学习
集成的速度要尽量的快,开发人员不但愿本身的代码提交半天以后才获得反馈测试
什么叫高频率?spa
频率越高越好,例如每隔一小时就是个不错的选择,这样的问题才能尽早地被反映出来版本控制
什么叫自动?
持续集成应该是自动触发并执行的,不该该有手工参与
什么叫构建?
包括编译、测试、审查、打包、部署等工做
全部源码是什么?
全部团队成员提交到代码库里的最新的源代码
反馈是什么?
持续集成应该经过各类快捷的方式告诉团队成员最新的集成状态,当集成失败的时候,反馈报告应该尽量地反映失败得具体细节
一个典型得持续集成场景是这样的
开发人员对代码作了一些修改,在本地运行构建并确认无误以后,将更改提交到代码库。具备高配置硬件的持续集成服务器每隔30分钟查询代码库一次,发现更新以后,签出全部最新的源代码,而后调用自动化构建工具 (如Maven) 构建项目,该过程包括编译、测试、审查、打包和部署等。然而不幸的是,另一名开发人员在这一时间段也提交了代码更改,两处更改致使了某些测试的失败,持续集成服务器基于这些失败的测试建立一个报告,并自动发送给相关开发人员。开发人员收到报告后,当即左手调查缘由,并尽快修复
一次完整的集成每每会包括如下6个步骤
1、持续编译:全部正式的源代码都应该提交到源码控制系统中 (如Subversion),持续集成服务器按必定频率检查源码控制系统,若是有新的代码,就触发一次集成,旧的已编译的字节码应当所有清除,而后服务器编译全部最新的代码
2、持续数据库集成:在不少项目中,源代码不只仅指Java代码,还包括了数据库SQL脚本,若是单独管理它们,很容易形成与项目其余代码的不一致,并形成混乱。持续集成也应该包括数据库的集成,每次发现新的SQL脚本,就应该清理集成环境的数据库,从新建立表结构,并填入预备的数据。这样就能随时发现脚本的错误,此外,基于这些脚本的测试还能进一步发现其余相关的问题
3、持续测试:有了JUnit之类的框架,自动化测试就成了可能。编写优良的单元测试并不容易,好的单元测试必须是自动化的、可重复执行的、不依赖于环境的,而且可以自我检查的。除了单元测试,有些项目还会包含一些依赖外部环境的集成测试。全部这些测试都应该在每次集成的时候运行,而且在发生问题的时候能产生具体报告
4、持续审查:诸如Checkstyle和PMD之类的工具可以帮咱们发现代码中的坏味道 (Bad Smell),持续集成可使用这些工具来生成各种报告,如测试覆盖率报告,Checkstyle报告、PMD报告等。这些报告的生成频率能够低一些,如每日生成一次,当审查发现问题的时候,能够给开发人员反馈警告信息
5、持续部署:有些错误只有在部署后才能被发现,它们每每是具体容器或者环境相关的,自动化部署可以帮助咱们尽快发现这类问题
6、持续反馈:持续集成的最后一步的反馈,一般是一封电子邮件。在重要的时候将正确的信息发送给正确的人。若是开发者一直受到与本身无关的持续集成报告,他慢慢地就会忽略这些报告。基本得规则是:将继承失败报告发送给此次集成相关的代码提交者,项目经理应该收到全部失败报告
持续集成须要额外的硬件设置
特别是对于持续集成服务器来讲,性能越高,集成的速度就越快,反馈的速度也就越快。持续集成还要求开发者使用各类工具,如源码控制工具、自动化构建工具、自动化测试工具、持续集成软件等。这一切无疑都增长了开发人员的负担,然而学习并适应这些工具及流程是彻底值得的,由于持续集成有着不少好处
持续集成的好处有哪些?
1、尽早暴露问题:越早地暴露问题,修复问题代码得成本就越低。持续集成高频率地编译、测试、审查、部署项目代码,可以快速地发现问题并及时反馈
2、减小重复操做:持续集成是彻底自动化的,这就避免了大量重复的手工劳动,开发人员再也不须要手动地去签出代码,一步步地编译、测试、审查、部署
3、简化项目发布:每日高频率的集成保证了项目随时都是能够部署运行的,若是没有持续集成,项目发布以前将不得不手动地集成,而后花大量精力修复集成问题
4、创建团队信心:一个优良得持续集成环境能让团队随时对项目的状态保持信心,由于项目的大部分问题区域已经由持续集成环境覆盖了