CruiseControl.Net持续集成实战指南(包含如何配置c++项目)——第二篇 配置CCNet

转本文请带url

上一篇介绍完咱们的实战环境,下面主要介绍如何配置CCNet好让整个持续集成框架转起来。

 这个配置文件是偶读了半天CCNet文档弄出来的,其实介绍CCNet如何配置的中文文章也不少,我阅读的时候感觉不太明白其中的每种路径干什么用的,所以我就着重讲一讲这些。

 配置清单如下:

< cruisecontrol >
    
<!--  This is your CruiseControl.NET Server Configuration file. Add your projects below!  -->
  
< project  name ="SimpleLib"   >
    
< workingDirectory > E:/NetCruise/project </ workingDirectory >
    
< artifactDirectory > E:NetCruise/artifactDirectory </ artifactDirectory >
    
< category > Library Category </ category >
    
< webURL > http://localhost/ccnet/server/local/project/SimpleLib/ViewProjectReport.aspx </ webURL >
    
< modificationDelaySeconds > 2 </ modificationDelaySeconds >
    
< triggers >
      
< intervalTrigger  seconds ="60" />
    
</ triggers >
    
<!-- state type="yourStateManagerType" ..=""/ -->
    
< sourcecontrol  type ="vss"  autoGetSource ="true"  applyLabel ="true" >
      
< executable > C:Program Files/Microsoft Visual SourceSafe/ss.exe </ executable >
      
< project > $/SimpleLib.root </ project >
      
< username > ccnet </ username >
      
< password > 123456 </ password >
      
< ssdir > F:/MyVSS </ ssdir >
      
< workingDirectory > E:/NetCruise/project </ workingDirectory >
    
</ sourcecontrol >
    
<!-- labeller type="dateLabeller"/ -->
    
<!-- prebuild>
            <yourFirstPrebuildTask ..=""/>
            <yourOtherPrebuildTask ..=""/>
        </prebuild
-->
    
< tasks >
      
< devenv >
        
< solutionfile > E:NetCruise/project/SimpleLib/SimpleLib.sln </ solutionfile >
        
< configuration > Debug </ configuration >
        
< buildtype > Build </ buildtype >
        
< executable > C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/devenv.com </ executable >
      
</ devenv >
      
< nunit  path ="C:/Program Files/NUnit 2.4/bin/nunit-console.exe" >
        
< assemblies >
          
< assembly > E:/NetCruise/project/SimpleLib/SimpleLib/bin/Debug/SimpleLib.dll </ assembly >
        
</ assemblies >
      
</ nunit >
    
</ tasks >
    
< publishers >
      
< xmllogger  />
    
</ publishers >
    
< externalLinks >
      
< externalLink  name ="google"  url ="http://somewhere/"   />
      
< externalLink  name ="My Other Link"  url ="http://somewhere.else/"   />
    
</ externalLinks >
  
</ project >
</ cruisecontrol >

 所有配置的路径可以参考第一篇文章来明确其含义。

 project name随便填写,还是以你的项目名为准比较好。

<workingDirectory>E:/NetCruise/project</workingDirectory>

这个指定了工作目录,那么什么是工作目录,为什么要指定呢?

一般来说有两种目的:

首先是很多其他的配置项,尤其是那种需要填写路径的,当我们用相对路径的时候,就是以工作目录作为标准的。

其次是运行程序的目录,这个有什么用呢?举个例子,比如我用C++写了段程序,程序中用如下方法写了个文件:

fstream fs("Hello.txt");//之后省略

那么,此文件的最后输出的路径就是在运行程序的目录,你可以为该exe建立一个快捷方式,然后运行一下,就会发现此文件输出到该快捷方式所在的目录下了。

<artifactDirectory>E:/NetCruise/artifactDirectory</artifactDirectory>

这个路径输出CCNet的build日志,所以你也可以指定其他路径,虽说是日志,咱们可以打开看一下这些xml的内容,最终CCNet发布build结果的网站中的数据就是根据这些xml文件配合xsl生成的。

 <category>Library Category</category>

这个元素可有可无,内容也随便起,看文档说是为了grouping projects,可以在CCTray中或者Dashboard(CCNet发布结果的网站)中显示,实际上我用没看出来什么……

<webURL>http://localhost/ccnet/server/local/project/SimpleLib/ViewProjectReport.aspx</webURL>

这个URL给CCTray和email用的,你添上你项目在Dashboard中的路径就可以了,刚开始不知道没关系,可以先不用这个元素,之后访问http://localhost/ccnet 去找到连接在加上就ok。

<modificationDelaySeconds>2</modificationDelaySeconds>

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

    <triggers>
      <intervalTrigger seconds="60"/>

   </triggers>

这个元素是触发器,这里简单设置了一个,60秒检测一下版本服务器,看看有没有变化,如果没有更新的版本,那么就等待60后再检查,如果有最新版本那么就build了。如果你想实现每日构件,或者设置一些特殊的东西,比如周六周日不进行build,可以参考一下CCNet的文档,有关triggers的部分,还是很好理解的,还有例子。

    <sourcecontrol type="vss" autoGetSource="true" applyLabel="true">
      <executable>C:/Program Files/Microsoft Visual SourceSafe/ss.exe</executable>
      <project>$/SimpleLib.root</project>
      <username>ccnet</username>
      <password>123456</password>
      <ssdir>F:/MyVSS</ssdir>
      <workingDirectory>E:/NetCruise/project</workingDirectory>
    </sourcecontrol>

这个东西我相信大家能理解,就是配置源代码管理的部分,里面的路径参考第一篇环境介绍很容易理解。

其中有一点需要说明,一定要把这个workingDirectory和上面的工作目录设置为相同的,这个工作目录是CCNet从版本控制中获取项目放到的目的地,而上面的工作目录是build的目录,假如放到不同的目录中,那么你可以想象,每次都build同一个版本,而你最新的版本只不过每次都get到一个目录下,并不做任何事情。

    <tasks>
      <devenv>
        <solutionfile>E:/NetCruise/project/SimpleLib/SimpleLib.sln</solutionfile>
        <configuration>Debug</configuration>
        <buildtype>Build</buildtype>
        <executable>C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/devenv.com</executable>
      </devenv>
      <nunit path="C:/Program Files/NUnit 2.4/bin/nunit-console.exe">
        <assemblies>
          <assembly>E:/NetCruise/project/SimpleLib/SimpleLib/bin/Debug/SimpleLib.dll</assembly>
        </assemblies>
      </nunit>
    </tasks>

这一块分两个部分:编译项目,运行自动化测试。

编译项目我采用了一个比较简单的方式,没用Nant什么的,devenv是VS自带的一个工具,咱们所有的IDE环境就是调用它来编译程序的。(当然你要是有vs2005的话也可以用msbuild来编译,我采用这个的目的是为了编译vc程序,因为C++的项目通常比较复杂,我不太懂怎么用一些其他的工具来编译,我发现这个方法很不错,vs03 05都可以用,还不用写新的东西来编译项目)。

nunit元素一目了然了,我保持沉默。

    <publishers>
      <xmllogger />
    </publishers>
    <externalLinks>
      <externalLink name="google" url="http://somewhere/" />
      <externalLink name="My Other Link" url="http://somewhere.else/" />
    </externalLinks>

publishers元素中间放着如何发布整个build信息的方法,CCNet中叫Task,CCNet比较好的方式就是每个程序员电脑上都运行CCTray,浏览结果的时候看Dashboard发布的build信息。

<xmllogger/>就是输出上面artifactDirectory元素所指定路径中的log信息。

externalLinks就无所谓了,可以随便写,登陆Dashboard就能看到这些链接。

好了,将这些内容放到cc.config中,保存。

然后运行CCNet(有两种方式,命令行,或者windows服务)。这里用命令行方式(桌面上的那个就行)。

E:/NetCruise/CruiseControl.NET/server/ccnet.log 存储着运行时候的日志信息,如果有错误的话可以打开这个日志看一看,按照错误提示修改一下。

如果你成功了,那么非常恭喜你,心情一定很不错。

启动CCTray吧,CCTray的使用方法我这里不说了,比较简单的,如果使用不明白的话可以查一下相关的blog,写得很详细,图文并茂。

访问http://localhost/ccnet 看看吧!

然后可以从VSS上Get这个项目到另一个目录下,然后可以改变一下代码,或者测试用例,让他们都通过,再Check in回去(中文版的vs忘了check in怎么翻译的,好像挺离谱)。等一会,如果你的配置都正确的话他会提取最新的版本然后重新build,发布测试结果!

好了,多做做试验,祝你成功!

下一篇将着重介绍VC项目如何利用CCNet进行持续集成~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值