每日构建

每日构建

最近我们的团队需要搭建一个C#项目的持续集成的环境(WEB程序),这一光荣的任务落入我手中。通过几天折腾,总算弄得基本功能可以跑通,记下来,供以后有需要的弟兄参考。

依照顺序逐一写下

基本要求:用CruiseControl.net+Nant+Nunit来构建这个可持续集成的环境,

一、先介绍下这都是些什么物件:)

CruiseControl.NET : .net平台下,一个开源的自动化持续集成工具(简称ccnet)  
       
它是一个程序套件,但其核心是一个叫做CruiseControl.NET Server的自动集成服务器通过直接监视源代码管理仓库,CruiseControl.NET使集成过程得以自动化。开发员每提交一组新的更新,CruiseControl.NET Server就会自动运行集成构造,以验证新的更新。当构造完成以后,Server将会通知开发员,提交的更改是否成功通过集成。服务正常启动后如下图(A-1

r_ccnetServer.GIF

                                                      A-1

既然是套件这里还有两个程序不得不提,就是web DashbordCCTray

 Web Dashboard  一个.net Web应用,为开发团队提供一个CruiseControl.NET工程的状态和详细观察视图,包括总个Build的详细历史记录。如下图:A-2

 

r_DashBorder.GIF

                                                      A-2

CCTray :一个客户端的托盘程序,允许你从网络中的任何一台电脑上,以快速浏览的方式了解CruiseControl.NET工程情况(休眠中,正在获取代码,正在编译)。如下图(A-3)

o_cctry.GIF

                                                                             A-3

Nant: 是一项开源的项目,利用NAnt,你可以方便快捷地对自己.NET项目或解决方案进行自动构建。与VS中可视化化极强的项目和解决方案管理相比,NAnt只能命令行的方式操作,但是这并不影响Nant的流行。NAnt可以根据我们的需要,帮我们自动构建项目,比如创建文件夹,移动文件,运行指定的程序等等,这些都是VS无法办到的。

 

Nunit: .NET 框架生成的开放源代码单元测试框架。NUnit 使您可以用您喜欢的语言编写测试,从而测试应用程序的特定功能。大家都非常熟悉,不多做介绍。

二、开始搭建

         似乎所有工作量都在集中在CruiseControl.NET\server\ccnet.config文件中,稍会我们详细介绍它的配置。先简单所安装这些程序套件的参数;

1、安装各需要软件,假设版本如下:

CruiseControl.NET-1.3CruiseControl.NET-CCTray-1.3NUnit-2.2.7-net-2.0svn-1.4.5nant-0.85

安装过程中似乎没什么特别设置之处,一路Next就成,我们把它们都在D:\Program Files下然后跟上各自带的路径,那么路径分别如下

         CruiseControl.NET                      D:\Program Files\CruiseControl.NET\

         CruiseControl.NET-CCTray        D:\Program Files\CCTray\

         NUnit                                             D:\Program Files\NUnit-Net-2.0 2.2.7\                 

         Svn:                                                   D:\Program Files\Subversion\

         Nant:                                                  D:\Program Files\Nant\

好,完成以上步骤之后,我们进入最关键的环节,配置ccNet Server目录下的ccnet.config文件,内容如下

<cruisecontrol>   

  <!--为你当前项目的名称,将来在web Dashboard,CCtry中的projectName都将使用此名称,所以不可乱取。-->

     <project name="XXX" >

    <!--这个标签设置,格式为yyyy.mm.dd.build。以前在用VSS的代码管理中每次打包都会在每个文件中打上一个标签,这里只是标签类型不同而已,估计在SVN管理中也是这功能吧,不过我没找到(仅供参考)-->

          <labeller type="dateLabeller" />

    <!--下面是指定了一个工作目录,意图就是为其它block所用,及其它相关的block可以用相对路径的形式来工作-->

          <workingDirectory>D:\XXX6.5.0\XXX</workingDirectory>

    <!--下面是指定了一个记录日志文件的目录,和上面的block功能相似就要为日志文件的存放定义了一个当前目录

    如下面的Nunit blockoutPutfile属性,以及BuildLog-->

          <artifactDirectory>D:\XXX6.5.0\XXX\artifactDirectory</artifactDirectory>

   

          <category>Library Category</category>

    <!--这个URLCCTrayemail用的,你添上你项目在Dashboard中的路径就可以了,主要方便查看Build的信息-->

          <webURL>http://localhost/ccnet/ViewFarmReport.aspx</webURL>

    <!--这个时间是控制代码last check in和开始build的时间,文档上举了个例子,比如说这个值设为10,代码7秒前check进来的,就sleep3秒后再build。文档上还说了,这个元素不用也可以,这是因为某些CVS不支持什么什么什么而存在的,默认值为0-->

          <modificationDelaySeconds>20</modificationDelaySeconds>

          <!--<multiTrigger operator="And">

               -->

          <!--<triggers>

                   <intervalTrigger seconds="20"/>

                   <filteredTrigger startTime="23:30" endTime="23:45" />

               </triggers>-->

    <!--触发器主要分Filter TriggerInterval TriggerMultiple TriggerProject TriggerSchedule TriggerUrl Trigger可以看出下面我们用的是scheduleTrigger-->

          <triggers>

      <!--一看便知,计划好在每个星期11332自动获取编译一次。-->

               <scheduleTrigger time="13:32" buildCondition="ForceBuild" name="Scheduled">

                   <weekDays>

                        <weekDay>Monday</weekDay>

                   </weekDays>

               </scheduleTrigger>

          </triggers>

          <!--<sourcecontrol type="nullSourceControl" />-->

          <!--state type="yourStateManagerType" ..=""/-->

   

    <!--代码管理块当然可以有多种如VSS,SVN,CVS....下面用的是SVN-->

          <sourcecontrol type="svn" autoGetSource="true">

      <!--服务器的工作目录-->

               <trunkUrl>http://cvs-server:8001/svn/projects/XXX/XXX.dev/trunk</trunkUrl>

      <!--本地工作目录可以设定为".\"-->

               <workingDirectory>D:\XXX6.5.0\XXX</workingDirectory>

      <!--SVN的安装程序的路径,注意与前面我们安装的Subversion对应起来(这个路径知必是Subversion的程序而不是什么tortoise svn,因为有可能

      我们的SVN服务器和这个CCNet并不是同一台电脑所以我们还需要安装这个SVN服务器软件,而不是客户端)-->

               <executable>D:\Program Files\Subversion\bin\svn.exe</executable>

               <username>username</username>

               <password>password</password>

               <webUrlBuilder type="websvn">

                   <url>http://MachineName/web/default.aspx</url>

               </webUrlBuilder>

          </sourcecontrol>

          <!--<prebuild>

            <yourFirstPrebuildTask ..=""/>

            <yourOtherPrebuildTask ..=""/>

        </prebuild-->

          <tasks>

      <!--简单的项目的Build我们就可以用Visual Studio Task来完成,如下。而更为复杂的我们则再考虑使用Nant或者是MsBuild-->

               <devenv>

                   <solutionfile>D:\XXX6.5.0\XXX\XXX.sln</solutionfile>

                   <configuration>Debug</configuration>

                   <buildtype>Build</buildtype>

                   <executable>d:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com</executable>

               </devenv>

      <!--NUnit都比较熟悉,注意路径和前面的对应-->

               <nunit path="d:\Program Files\NUnit-Net-2.0 2.2.7\bin\nunit-console.exe">

                   <assemblies>

                        <assembly>D:\XXX6.5.0\XXX\Web\Bin\XXX.BLL.dll</assembly>

                        <assembly>D:\XXX6.5.0\XXX\Web\Bin\XXX.Common.dll</assembly>

                        <assembly>D:\XXX6.5.0\XXX\Web\Bin\XXX.Controls.dll</assembly>

                   </assemblies>

                   <outputfile>.\nunit-results.xml</outputfile>

               </nunit>

          </tasks>

    <!--下面block的功能就是在Build完后,以什么形式将Build的报告发布出去当然形式也有多种像

    Build PublisherEmail Publisher下面我们用的是Email Publisher,

    我们定义了两组用户一组是只要Build完成就发送,另一组是只有在Build状态改变时发送(build status

    success->Faile)。

    -->

          <publishers>

               <xmllogger logDir=".\buildlogs"/>

               <email mailhost="yahoo.com.cn" from=xxx@yahoo.com.cn includeDetails="true">

                   <users>

                        <user name="BuildGuru" group="buildmaster" address="xxx@yahoo.com.cn"/>

                        <user name="JoeDeveloper" group="developers" address="xxx@yahoo.com.cn"/>

                   </users>

                   <groups>

                        <group name="developers" notification="change"/>

                        <group name="buildmaster" notification="always"/>

                   </groups>

               </email>

          </publishers>

    <!--externalLinks就完全属于额外的友情链接了,有没有都关系啦,不过我们也可以把我们最新Build的站点

    地址挂上去不是更好:)-->

    <externalLinks>

               <externalLink name="XXX" url="http://localhost/web/default.aspx/" />

               <externalLink name=".net" url="http://www.asp.net/" />

          </externalLinks>

     </project>

</cruisecontrol>

保存好ccnet.config文件后,我们的工作也就完成了,试一把。点击D:\Program Files\CruiseControl.NET\server\ ccnet.exe程序启动ccnet server

启动成功的话,图(A-1)是依然存在的,且没有异常信息的显示(注意提示信息)。如果直接关闭了那肯定有问题,不要着急在我们D:\Program Files\CruiseControl.NET\server\ccnet.log 存储着运行时候的日志信息,如果有错误的话可以打开这个日志文件查看,依据情况再修改直到成功。如果图(A-1)依然屹立在那,无异常信息显示,启动 然后把当前的build server加进来,CCtray的详细设置可以参看官方文档 如得到图(A-3OK,成功了:)。我们接着去到http://localhost/ccnet看到各次的Build情况。

好了,这个基于CCnet的每日构建平台,基本功能的框架就起来了,不过要想支持的功能更为智能,就需要去慢慢完善ccnet.config配置吧。主要参看CruiseControl.NE的官方文档

 

注:本文仅个人浅显理解,难免存在不妥之处,有问题欢迎一起讨论。另Nant的配置会加紧时间再跟上。

posted on 2008-09-23 09:21  加冰的可乐 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jun-person/archive/2008/09/23/1296399.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值