什么是持续集成
Continuous Integration, CI
它是一种软件项目管理方法,依据资产库(源码,类库等)的变更自动完成编译、测试、部署和反馈。
它是一种软件项目管理方法,依据资产库(源码,类库等)的变更自动完成编译、测试、部署和反馈。
持续集成采用”水滴石穿、分而治之“的思想,既然我们不能马上交付一个可用的产品,为什么不随时提供一个可以使用的产品呢。
CI持续集成的基本思想如下图所示:
为什么要持续集成
持续集成是敏捷软件开发工作当中的一大组成部分。从一轮冲刺到下一轮冲刺,技术团队在“不断前进”的同时持续推出各类增量化功能。不过当开发人员高度专注于添加功能的同时,代码错误有时候也会不期而至、并导致软件无法正常使用。为了阻止此类错误被集成至软件配置管理(简称SCM)方案当中,持续集成服务器则扮演守门人的角色,帮助我们对代码质量进行把关。即使糟糕代码已经被集成到SCM当中,持续集成服务器仍然能够快速告诉我们是哪里出了问题。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
要素
1. 统一的代码库2. 自动构建
3. 自动测试
4. 每个人每天都要向代码库主干提交代码
5. 每次代码递交后都会在持续集成服务器上触发一次构建
6. 保证快速构建
7. 模拟生产环境的自动测试
8. 每个人都可以很容易的获取最新可执行的应用程序
9. 每个人都清楚正在发生的状况
10. 自动化的部署
如何持续集成
持续集成工具需要具有的功能:
1 自动构建:无需人工来操作
2 发现版本库的变更:通过轮询或者定时,触发持续集成发现版本库的变更
3 反馈机制:在出现问题时,能及时的把问题反馈给正确的人(QA,DEV)
4 回滚:在出现问题后,拥有回滚能力
2 发现版本库的变更:通过轮询或者定时,触发持续集成发现版本库的变更
3 反馈机制:在出现问题时,能及时的把问题反馈给正确的人(QA,DEV)
4 回滚:在出现问题后,拥有回滚能力
5 纯净的构建环境:每一次都应该把之前的环境删除干净,让每一次构建都是一个新的构建。
6 完善的集成功能:代码的测试,审查,部署都应该具备。
6 完善的集成功能:代码的测试,审查,部署都应该具备。
持续集成不同阶段工具
不同阶段 | 工具 |
CI持续集成 | Apache Continuum CruiseControl Hudson Jekins Luntbuild |
构建脚本 | Ant Maven |
测试工具 | JUinit DbUnit Floyd HtmlUnit JWebUnit SQLUnit |
代码规范审查 | sonar CheckStyle JavaNCSS PMD JDepend |
反馈 | jabber |
开源持续集成工具
开源工具 | 特点 |
Jenkins | Java语言开发而成,且能够在WAR文件下载完成之后使用java –jar jenkins.war命令进行安装; 功能: 持续构建/测试软件项目 以外部方式监控运行任务 |
Travis CI | 最适合新手作为起步平台的持续集成服务器方案 整个安装过程非常轻松,我们只需要接入自己的GitHub账户,提供相关权限并根据项目的实际要求更新travis.yaml文件即可。在文件提交至GitHub之后,一套新的Travis CI即可开始构建。 |
Buildbot | Python语言开发而成 主从服务器 从简单到复杂一路满足用户的实际状况 Buildbot安全需要一台或者更多主服务器外加多从服务器作为配合。 其中主服务器负责监控源代码库的变化,协调各从服务器的操作活动并向用户及开发人员报告结果。 从服务器则可运行多种不同操作系统。 |
Strider | 由Node.JS与JavaScript编写而成,同时利用MongoDB作为后备存储机制 Strider最大的特色在于无与伦比的可定制能力,我们可以亲自动手编写插件以强化其功能 |
go | 由ThoughtWorks公司创建并加以开源的java项目,以流水线的方式实现各类定期执行任务,而这些操作当中的实例会被称为job |
Integrity | 以Ruby语言编写而成, Integrity目前只能与Git进行协作。因此如果大家正在使用其它SCM工具,那么Integrity恐怕并不适合 |
开源集成系统特性(开源 + 非开源)
工具 | 特性 |
Hudson | 1、易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持。 2、 易于配置-所有配置都是通过其提供的web界面实现。 3、集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知。 4、生成JUnit/TestNG测试报告。 5、分布式构建支持-Hudson能够让多台计算机一起构建/测试。 6、文件识别- Hudson能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。 7、插件支持-Hudson可以通过插件扩展,你可以开发适合自己团队使用的工具。 |
Apache Continuum | 1、 与Maven 2.x的紧密集成 2、 与Maven SCM的紧密集成,支持Subversion/CVS/Starteam/Clearcase/Perforce 3、 基于web的容易使用的安装和配置接口 4、 简单的添加新的项目工程的方法 5、 用于 integration, automation and remoting的XML-RPC interface 6、 邮件提醒和IM(即时通讯)提醒IRC/Jabber/MSN |
ThoughtWorks Go | |
jenkins | Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎 |
基于云的持续集成项目 Travis CI |