CruiseControl.Net持续集成平台搭建总结

原文地址:http://www.cnblogs.com/qiuliang/archive/2011/05/04/2036557.html


最近公司准备启动一个新的项目,预计会投入20-30个开发人员,应该还算一个不小的项目,为了更加科学化的管理,在这个项目里面,打算采用一些XP和敏捷开发的理念,同时也会结合自身的实际情况。为此,我受命着手研究持续集成相关的工具,通过几天的努力,整个持续集成平台初步搭建起来,基本上能够实现自动获取最新代码、自动构建、自动测试以及自动发送报告。此篇文章作为最近几天的一个学习总结,某些地方不一定正确,请大家不吝赐教,将来也许随着应用的深入,我也会持续更新相关的内容。

一、什么是持续集成

  1. 什么是持续集成(Continuous Integration)
     作为极限编程的十二个实践之一,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。通俗一点说,就是指对于开发人员的每一次代码提交,都自动把代码库中所有代码Check Out到一个目录,并自动进行编译,和部署,并且自动运行所有的Test case,以及一些诸如代码检查、测试覆盖率等自动化任务,如果成功则接受这次提交,否则告诉所有人,这是一个失败的revision。 
  2. 相关工具
    CruiseControl、Anthill、Bamboo、TeamCity
    CruiseControl作为业界最具知名度和口碑的集成工具而被广泛使用,而在.Net环境下也有CruiseControl.Net版本 ,本文以CruiseControl.Net作为持续集成平台,简称CC.Net。
  3. 示意图
     

二、为什么要持续集成

  1. 持续集成的价值
     减小风险、减少手动过程、生成构建结果、安全感 
  2. 持续集成的自动化
    自动化运行测试、自动产生可部署的成品、自动将成品部署到近似环境、自动运行回归测试、自动生成度量报告

三、如何部署

首先确定安装CC.NET的服务器,一般位于局域网内,然后安装以下工具。当然CC.NET的能力也不限于此,应该是可以扩展很多其他的功能。

  1. CC.Net 1.6
    由ThoughtWorks开发并开源,目前最新的版本是1.6,本次实验也是以此版本为基础,其他版本未经过验证。
    下载地址:http://confluence.public.thoughtworks.org/display/CCNET/Download
  2. 版本管理工具
    本次选用SVN,同时CC.NET也支持VSS、TFS、CVS等。注意:如果CC.NET Server和SVN Server不在一台机器上,也需要在CC.NET Server上安装SVN的程序文件。
  3. 代码构建工具
    MSBUILD,如果安装了.Net Framework,就会自带这个工具。
  4. 单元测试工具
    NUnit 2.6,大名鼎鼎的XUnit家族成员,顺便提一下TestDriven.Net (plug-in for IDE) ,这个在CC.NET SERVER上不是必须,但作为IDE的插件,非常适合开发人员使用。
  5. 代码检查工具
    FxCop,由微软开发,CC.NET不能直接支持FxCop,需要使用task下的exec来调用bat文件。
  6. 代码覆盖率分析工具
    NCover 3.1,个人版本是免费的,其余已经商业化,可以使用task下的exec来调用bat文件,看官方文档好像也支持直接在config文件里面配置<ncoverProfile />,但未实验成功。

以上工具的安装无须多言,关键在于CC.NET的配置,是一个比较复杂的事情,而CruiseControl.Net的中文资料也不是很多(在这点上,JAVA的CruiseControl情况好很多),很多东西都是参考官方网站的英文文档,因本人水平有限,很多配置也许不是最佳实践。

下面就以我最终的一个配置文件为例,来说明具体的配置过程:

复制代码
  
  
< cruisecontrol xmlns:cb ="urn:ccnet.config.builder" >
< project name ="CruiseControlDemo" queue ="Q1" queuePriority ="1" >

< triggers >
<!-- 自动运行build任务的间隔时间,单位:秒 -->
< intervalTrigger seconds ="30" />
</ triggers >

< workingDirectory > D:\QiuliangTest\DailyBuild </ workingDirectory >
< artifactDirectory > D:\QiuliangTest\DailyBuild\log </ artifactDirectory >
<!-- Web Dashboard的URL -->
< webURL > http://172.16.82.176:8080/ViewFarmReport.aspx </ webURL >
< modificationDelaySeconds > 2 </ modificationDelaySeconds >
< maxSourceControlRetries > 5 </ maxSourceControlRetries >
< initialState > Stopped </ initialState >
< startupMode > UseInitialState </ startupMode >

<!-- 版本控制的配置,以SVN为例,其他版本控制工具请参考官网 -->
< sourcecontrol type ="svn" >
< trunkUrl > https://172.16.82.178:444/svn/Wanda-Phase2/CCDemo </ trunkUrl >
< executable > C:\Program Files (x86)\VisualSVN Server\bin/svn.exe </ executable >
< workingDirectory > D:\QiuliangTest\src </ workingDirectory >
< username > qiuliang </ username >
< password > qiuliang </ password >
</ sourcecontrol >


< tasks >
<!-- 自动构建工具配置,以MSBUILD为例,其他自动构建工具(例如NAnt)请参考官网 -->
< msbuild >
< executable > C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe </ executable >
< workingDirectory > D:\QiuliangTest\src </ workingDirectory >
< projectFile > CCDemo.sln </ projectFile >
< buildArgs > /p:Configuration=Debug /v:diag </ buildArgs >
< targets > Build </ targets >
< timeout > 900 </ timeout >
< logger > C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll </ logger >
</ msbuild >
<!-- 单元测试配置 -->
< nunit >
< path > C:\Program Files (x86)\NUnit 2.6\bin\nunit-console.exe </ path >
< assemblies >
< assembly > D:\QiuliangTest\src\CC.Test\bin\Debug\CC.Test.dll </ assembly >
</ assemblies >
< excludedCategories >
< excludedCategory > LongRunning </ excludedCategory >
</ excludedCategories >
< outputfile > D:\QiuliangTest\DailyBuild\nunit\nunit-results.xml </ outputfile >
</ nunit >
<!-- NCover配置,其中bat文件需要自己写 -->
< exec executable ="D:\QiuliangTest\ncover.bat" />
<!-- FxCop配置,其中bat文件需要自己写 -->
< exec executable ="D:\QiuliangTest\fxcop.bat" />

<!-- 将相关的报告合并 -->
< merge >
< files >
< file > D:\QiuliangTest\DailyBuild\fxcop\*.xml </ file >
< file > D:\QiuliangTest\DailyBuild\ncover\output\coverage.xml </ file >
<!-- Other files to merge for your build would also be included here -->
</ files >
</ merge >
</ tasks >
< publishers >
< statistics />
< xmllogger />
< email mailport ="25" includeDetails ="TRUE" mailhostUsername ="userName" mailhostPassword ="password" useSSL ="FALSE" >
< from > yours@email.com </ from >
< mailhost > smtp.email.com </ mailhost >
< users >
< user name ="qiuliang" group ="buildmaster" address ="yours@email.com" />
</ users >

< groups >
< group name ="developers" >
< notifications >
< notificationType > Failed </ notificationType >
< notificationType > Fixed </ notificationType >
</ notifications >
</ group >
< group name ="buildmaster" >
< notifications >
< notificationType > Always </ notificationType >
</ notifications >
</ group >
</ groups >

< converters >
< regexConverter find ="$" replace ="@TheCompany.com" />
</ converters >

<!-- 失败的邮件标题 -->
< subjectSettings >
< subject buildResult ="StillBroken" value ="Build is still broken for {CCNetProject}" />
</ subjectSettings >

</ email >
</ publishers >



</ project >
</ cruisecontrol >
复制代码

fxcop的bat文件:

cd C:\Program Files (x86)\Microsoft FxCop 1.36
c:
FxCopCmd /project:D:\QiuliangTest\FxCop\default.FxCop /out:D:\QiuliangTest\DailyBuild\FxCop\DailyBuild.FxCop.xml /q /gac

ncover的bat文件:

cd C:\Program Files\NCover

ncover.console.exe "C:\Program Files (x86)\NUnit 2.6\bin\nunit-console.exe" /noshadow "D:\QiuliangTest\src\CC.Test\bin\Debug\CC.Test.dll" //at ncover\output\Trends.trend  //p "CCDemo-NCover" //x ncover\output\coverage.xml

    目前只是初步完成了CC.NET的搭建,使用的效果如何,还有很多其他需要考虑的因素,总的来说,我感觉CC.NET是一款不错的持续集成工具,如果在接下来的项目中能很好的利用起来,相信能为提高整体的管理水平和生产力带来一些帮助,如果有对这方面很熟悉的朋友,也希望能交流交流。


    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值