转载自Scrum中文网 http://www.scrumcn.com/agiledev/html/?182.html
近些年来,敏捷在软件工程领域逐渐火热起来,敏捷书籍、文章、社区以及各种大会也越来越多。持续集成作为敏捷开发的最佳实践之一现在已经被许多的开发团队所接受,它是敏捷团队成功的基石。
什么是持续集成?
持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试 ) 来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。请注意,持续集成不等于持续的编译。
持续集成要素:
l 统一的代码库
l 自动构建
l 自动测试
l 每个人每天都要向代码库主干提交代码
l 每次代码递交后都会在持续集成服务器上触发一次构建
l 保证快速构建
l 模拟生产环境的自动测试
l 每个人都可以很容易的获取最新可执行的应用程序
l 每个人都清楚正在发生的状况
l 自动化的部署
持续集成带来那些价值?
持续集成的价值在于:
l 减少风险
一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况,减少假定。
l 减少重复过程
减 少重复的过程可以节省时间、费用和工作量。说起来简单,做起来难。这些浪费时间的重复劳动可能在我们的项目活动的任何一个环节发生,包括代码编译、数据库 集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价 值的事情上。
l 任何时间、任何地点生成可部署的软件
持 续集成可以让您在任何时间发布可以部署的软件。从外界来看,这是持续集成最明显的好处,我们可以对改进软件品质和减少风险说起来滔滔不绝,但对于客户来 说,可以部署的软件产品是最实际的资产。利用持续集成,您可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问题,项目成员马 上就会被通知到,问题会第一时间被修复。不采用持续集成的情况下,这些问题有可能到交付前的集成测试的时候才发现,有可能会导致延迟发布产品,而在急于修 复这些缺陷的时候又有可能引入新的缺陷,最终可能导致项目失败。
l 增强项目的可见性
持续集成让我们能够注意到趋势并进行有效的决策。如果没有真实或最新的数据提供支持,项目就会遇到麻烦,每个人都会提出他最好的猜测。通常,项目成员通过手工收集这些信息,增加了负担,也很耗时。 持续集成可以带来两点积极效果:
1. 有效决策:持续集成系统为项目构建状态和品质指标提供了及时的信息,有些持续集成系统可以报告功能完成度和缺陷率。
2. 注意到趋势:由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体品质以及其它的项目信息。
l 建立团队对开发产品的信心
持续集成可以建立开发团队对开发产品的信心,因为他们清楚的知道每一次构建的结果,他们知道他们对软件的改动造成了哪些影响,结果怎么样。
在接下来的,持续集成-敏捷开发的基石 第二部分中我们将来介绍一些持续集成的工具。
在持续集成 - 敏捷开发的基石的 第一部分我们介绍了持续集成的概念以及价值,这个部分我们来介绍持续集成的工具。
持续集成有那些工具?
持续集成的工具现如今也是百花齐放,各有千秋,接下来我们主要介绍一下目前主流的持续集成工具。
我们将从以下几个方面来进行介绍;
1. 厂商
2. 支持的编程语言
3. 价格
4. SCM支持程度
5. 构建管理
6. 消息通知机制
7. 构建工具支持
8. 项目管理工具集成
9. 测试工具集成
10. 安装及配置
11. IDE集成
首先,我们来看一下持续集成领域的老牌—CruiseControl
http://cruisecontrol.sourceforge.net/
CruiseControl
厂商 |
ThoughtWorks |
开发语言 |
JAVA,也有.net和ruby版本 |
是否开源 |
是 |
价格 |
免费 |
SCM 支持程度 |
ClearCase , VSS, CVS, Subversion, PVCS 等 |
构建管理 |
并行构建,分布式构建,增量构建,人工强制构建, SCM 触发构建等都有支持 |
消息通知机制 |
Email , Run executable,FTP,IRC,Jabber,Lotus Sametime,RSS,SCP , Windows System Tray , Formatted Logging , Yahoo Messenger , X10 |
构建工具支持 |
Shell 脚本与命令行, Ant, OpenMake Meister, Maven, Maven2, NAnt |
项目管理工具集成 |
项目管理工具 CruiseControl 支持了 Rally 和 VersionOne |
测试工具集成 |
Agitar , JUnit result rendering |
安装与配置 |
有 windows 安装程序, Self contained distribution (except SCM clients) , N 无需修改构建脚本,支持多个项目,使用 XML 配置文件 |
IDE 集成 |
Eclipse Plugin , IntelliJ Plugin |
接下来,我们来介绍一下持续集成领域的另外一个老牌工具 LuntBuild ,它的商业版本是 QuickBuild.
厂商 |
PMEase |
支持的编程语言 |
Java |
是否开源 |
是 |
价格 |
免费 |
主流 SCM 支持程度 |
Clear Case , VSS, CVS, Subversion |
构建管理 |
并行构建 , 增量构建,人工强制构建, SCM 触发构建 |
消息通知机制 |
Email , Run executable , Jabber , Lotus Sametime , RSS , Windows System Tray , Formatted Logging , MSN Messenger
|
构建工具支持 |
Shell 脚本与命令行, Ant, OpenMake Meister, Maven, Maven2 , MSbuild , NAnt , Rake (Ruby) |
项目管理工具集成 |
无 |
测试工具集成 |
JUnit result rendering , Selenium result rendering , PHPUnit result rendering , MSTest result rendering |
安装与配置 |
有 windows 安装程序, Self contained distribution (except SCM clients) , N 无需修改构建脚本,支持多个项目 |
IDE 集成 |
Eclipse Plug-in |
最后,我们来介绍一下目前使用最广的持续集成工 Hudson ,它是持续集成领域的后起之秀:
厂商 |
Java.net |
支持的编程语言 |
Java |
是否开源 |
是 |
价格 |
免费 |
主流 SCM 支持程度 |
Clear Case , VSS, CVS, Subversion , PVCS 等, SCM 支持最为完善 |
构建管理 |
并行构建,分布式构建,增量构建,人工强制构建, SCM 触发构建等都有支持 |
消息通知机制 |
Email , Run executable , FTP , IRC , Jabber , Lotus Sametime , RSS,SCP,Windows System Tray,Formatted Logging
|
构建工具支持 |
Shell 脚本与命令行, Ant, Groovy, OpenMake Meister, Maven, Maven2 , MSbuild , NAnt , Rake (Ruby) |
项目管理工具集成 |
无 |
测试工具集成 |
CppUnit result rendering , JUnit result rendering , NUnit result rendering , Selenium result rendering , PHPUnit result rendering , MSTest result rendering , SilkCentral , Clover result rendering , PMD result rendering |
安装与配置 |
有 windows 安装程序, Self contained distribution (except SCM clients) , N 无需修改构建脚本,支持多个项目,自动配置构建脚本 |
IDE 集成 |
Eclipse Plug-in , IntelliJ Plugin |
其它的一些持续集成工具
•
hudson
(http://hudson-ci.org/
)
• TeamCity (http://www.jetbrains.com/teamcity/
)
• AntHill
Pro (http://www.anthillpro.com/
)
• Bamboo
(http://www.atlassian.com/software/bamboo/
)
• QuickBuild
(http://www.pmease.com/
)
• Apache
Continuum ( http://continuum.apache.org/
)
等等。