基于 TeamCity 的持续集成环境: 简介

CI(Continuous Integration,即持续集成),是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。

-- Martin Fowler

目前大部分文章中所给的 “持续集成” 定义或多或少都引用了 Martin Fowler 的描述。“持续集成”(以下简称 CI)一词最早出现在 Booch, Grady 于 1994年发表的《Object-Oriented Analysis and Design with Applications》一文中,1997成为极限编程(Exterme Programming)的一部分。但是类似的实践在更早之前就已经有了。

摘自网络

CI 的优点

Martin Fowler 在它的文章中描述了 CI 的主要几个好处:

1,减少风险

不及时的集成的最大问题是很难预测项目完成还要花费多长的时间,让你无法知道项目当前所处的状况。而使用 CI,就能时刻知道当前项目所处的阶段,问题是什么。

2,尽快找到并消灭集成的 Bug

开发人员再也不用花费大量的时间去查找那些因为别人的失误而导致自己代码异常的 bug 了。

这些 bug 往往很难去发现,因为出问题的代码并不属于自己的领域。而且此类 bug 可能在集成的很前面就被引入,而过了很久(几天、几星期 甚至 几个月)才被发现,随着时间的推移,定位 bug 产生的位置也就越困难。

而使用 CI,可以在 bug 引入的当天就报告给开发人员,缩短了开发人员查找 bug 的范围和时间

3,保证产品环境的稳定

即使开发人员没有找到 bug,也不会继续把这些错误的代码引入到产品环境,从而产品环境的稳定。

4,提高生产率

由于 CI 提高了开发人员查找 bug 的能力,这也致使开发人员可以有更多的时间去添加新的 feature。

另外,CI 的介入,也减少了我们进行 code review 的时间。

5,减少集成可能产生的问题,从而实现快速交付


要想让 CI 充分发挥作用,Martin Folwer 建议频繁的进行集成。

CI 做不到的

有些朋友以为使用了 CI 就能减少 bug 的数量,而这并不是 CI 所能做到的。CI 的目的是尽早的发现问题,从而在最短的时间内解决问题,减少风险。

Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.

-- Martin Fowler

CI 的实践

Martin Folwer 在他的文章中给出了实践 CI 的几个原则:

只维护一个源码仓库

自动化构建(build)

自动化测试

每一次提交代码都应该在集成环境中进行构建

快速构建

在模拟生产环境中进行测试

让每个人都能轻易获得最新的可执行文件

每个人都能看到进度

自动化部署


关于每个原则的详细介绍,本文不做展开,有兴趣的朋友可以参考文末《持续集成(第二版)》的链接。

市面上的 CI 产品

CI 只是一个实践,我们可以借助一些工具在项目内部采用这种实践。InfoQ 曾在 2014 年对市面上用得最广泛的 CI 做了一个调查,这些 CI 产品包括:Anthill、Bamboo、Buildbot、Contniuum、Cruise Control、easyCIS、FinalBuilder Server/Continua CI、Go、Gump、Hudson、Jenkins、Mojo、Parabuild、Pulse、QuickBuild、Sin、TeamCity、Team Foundation Server、TravisCI、Zed。

并将最终结果以图表的方式展示了出来:

What CI Server Do You Use?


从该图表中可以看到 JenKins 和 TeamCity 分居前两位。由于 TeamCity 对 .Net 的支持更广(有很多 .Net 平台的插件),所以本系列,将以 TeamCity 为主进行介绍。


参考资源

Continuous Integration》 -- Martin Fowler

持续集成(第二版)》-- Martin Fowler 中文译本

CONTINUOUS INTEGRATION》 -- Thoughtworks

走向“持续部署”》-- tony1130

What CI Server Do You Use?》 -- InfoQ

Continuous Integration Essentials》-- CodeShip

文章索引

[隐 藏]

本站采用知识共享署名 3.0 中国大陆许可协议进行许可。 ©2014 Charley Box | 关于本站 | 浙ICP备13014059号