Home > 语言编程, 零敲碎打 > 持续集成CI工具CruiseControl.NET的配置

持续集成CI工具CruiseControl.NET的配置

最近在学习配置CruiseControl.NET这个工具,用于新项目的持续集成CI实践,以下是我使用的CruiseControl.NET配置,供参考。
CruiseControl :简称 CC,持续集成工具,主要提供了基于版本管理工具 ( 如 CVS、VSS、SVN) 感知变化或每天定时的持续集成,并提供持续集成报告、 Email 、 Jabber 等等方式通知相关负责人,其要求是需要进行日构建的项目已编写好全自动的项目编译脚本 ( 可基于 Maven 或 Ant) 。
CruiseControl 目前已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、CruiseControl.rb等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比拟的。

1.配置项目的集成配置

    <!-- 自定义该项目的状态保存位置,用于保存各种编译结果数据,
         如不设定将默认保存到CruiseControl.NET的安装目录下面
    -->
    <state type="state" directory="C:\CCNet\State" />
 
    <!-- 自定义该项目的交付物件保存位置,用于保存最终交付成果物,
         如不设定将默认保存到CruiseControl.NET的安装目录下面
    -->
    <artifactDirectory>C:\CCNet\BuildArtifacts\TestProject</artifactDirectory>
 
    <!-- 项目在管理面板Dashboard中的URL地址,设置为Dashboard中点击某个项目的地址
         以下XXX.XXX.XXX.XXX:XXXX为服务器的IP地址和端口
    -->
    <webURL>http://XXX.XXX.XXX.XXX:XXXX/ccnet/server/local/project/TestProject/ViewProjectReport.aspx</webURL>
 
    <!-- 集成Build的标识,通常使用dateLabeller,按日期来配置标识,
         格式为yyyy.mm.dd.build,比如2013.10.14.20
    -->
    <labeller type="dateLabeller"></labeller>
 
    <modificationDelaySeconds>2</modificationDelaySeconds>

2.配置引发集成任务开始的触发器

    <!-- 引发集成任务的触发器,这里可以配置以下几种,具体参看CCNET的文档
         filterTrigger
         intervalTrigger
         scheduleTrigger
         multipleTrigger
    -->
    <triggers>
      <!-- 配置定时触发器,定时执行配置的任务
           seconds是两次触发之间的间隔时间
           buildCondition可以是IfModificationExists和ForceBuild
           initialSeconds是CC服务启动后,触发器启动等待时间。
      -->
      <intervalTrigger
               name="continuous"
               seconds="600"
               buildCondition="ForceBuild"
               initialSeconds="5"/>
    </triggers>

3.配置SourceControl系统的
使用Subversion或CVS管理

    <!-- SVN代码管理服务器祥相关配置,CVS的配置基本于SVN一致。
    -->
    <sourcecontrol type="svn">
      <!--SVN的执行文件-->
      <executable>C:\Program Files\VisualSVN\bin\svn.exe</executable>
      <!--SVN用户名-->
      <username>user</username>
      <!--SVN密码-->
      <password>pass</password>
      <!--源代码的SVM路径-->
      <trunkUrl>svn://192.168.1.1/TestProject/trunk/</trunkUrl>
      <!--SVN工作目录,源代码将获取到改目录中-->
      <workingDirectory>C:\TestProject</workingDirectory>
    </sourcecontrol>

使用VSS管理

    <!-- VSS代码管理服务器祥相关配置
    -->
    <sourcecontrol type="vss">  
      <!--VSS的执行文件-->
      <executable>C:\Program Files\Microsoft Visual Studio\VSS\win32\SS.EXE</executable>  
      <!--源代码的VSS路径-->
      <project>$/TestProject</project>
      <!--VSS用户名-->
      <username>user</username>
      <!--VSS密码-->  
      <password>pass</password>
      <!--VSS路径,包含SRCSAFE.INI的目录-->
      <ssdir>\\192.168.1.1\vss</ssdir>
      <!--VSS工作目录,源代码将获取到改目录中-->
      <workingDirectory>c:\TestProject</workingDirectory>
      <!--VSS操作的过期时间-->
      <timeout units="minutes">2</timeout>  
    </sourcecontrol>

4.自动集成任务内容配置
使用MSBuild

<msbuild>
        <!--MSBuild的路径-->
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <!--工作目录-->
        <workingDirectory>C:\TestProject</workingDirectory>
        <!--项目文件名,.net项目通常为解决方案文件或项目的文件-->
        <projectFile>TestProject.sln</projectFile>
        <!--编译器参数-->
        <buildArgs>/v:quiet /noconlog /p:Configuration=Debug</buildArgs>
        <!--Logger的路径-->
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <!--执行超时-->
        <timeout>60</timeout>
      </msbuild>

使用NUnit

      <nunit>  
        <!--nunit的路径-->
        <path>C:\Program Files\nunit\nunit-console.exe</path>  
        <!--需要进行单元测试的程序集-->
        <assemblies>
          <assembly>C:\TestProject\TestProjectTest\bin\Debug\TestProjectTest.dll</assembly>  
        </assemblies>  
      </nunit>

使用MSTest

      <exec>
        <!--MSTest的路径-->
        <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</executable>
        <!--工作目录-->
        <baseDirectory>C:\TestProject</baseDirectory>
        <!--执行MSTest的参数-->
        <buildArgs>
          /testcontainer:TestProjectTest\bin\Debug\TestProjectTest.dll
          /runconfig:Local.testsettings
        </buildArgs>
        <!--执行MSTest的超时-->
        <buildTimeoutSeconds>120</buildTimeoutSeconds>
      </exec>

5.集成成功后的相关配置

      <!--使用xmllogger记录Log-->
      <xmllogger />
      <!--输出代码的历史记录-->
      <modificationHistory />
      <!--输出task执行的统计信息-->
      <statistics />
      <!--清理交付物目录-->
      <artifactcleanup cleanUpMethod="KeepLastXBuilds"
                       cleanUpValue="50" />

6.邮件通知配置

      <!--发送邮件通知信息-->
       <email mailhost="mail.domain.com"
              mailhostUsername="user" 
              mailhostPassword="12345678" 
              from="[email protected]" 
              includeDetails="true">
          <!--用户管理-->
          <users>
            <user name="user1" group="group1" address="[email protected]" />
            <user name="user2" group="group1" address="[email protected]" />
            <user name="user3" group="group1" address="[email protected]" />
            <user name="user4" group="group2" address="[email protected]" />
            <user name="user5" group="group2" address="[email protected]" />
            <user name="user6" group="group2" address="[email protected]" />
          </users>
           <!--用户分组管理-->
           <!--NotificationType
               Always[每次构建均发送通知]
               Changed[构建结果发生改变时发送通知,例如从success变为fail]
               Failed[当构建失败时发送通知]
               Success[当构建成功时发送通知]
               Fixed[当构建从失败到通知时发送通知]
               Exception[构建发生异常时发送通知]
            --> 
          <groups>
            <group name="group1">
              <notifications>
                 <NotificationType>Failed</NotificationType>  
                 <NotificationType>Fixed</NotificationType>  
              </notifications>
            </group>
            <group name="group2">
              <notifications>
                <NotificationType>Change</NotificationType>
              </notifications>
            </group>
          </groups>
       </email>

我使用的一套完整的CruiseControl.NET配置文件

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
 
  <project name="TestProject"
           description="This is a CruiseControl.NET demo project">
 
    <!-- 自定义该项目的状态保存位置,用于保存各种编译结果数据,
         如不设定将默认保存到CruiseControl.NET的安装目录下面
    -->
    <state type="state" directory="C:\CCNet\State" />
 
    <!-- 自定义该项目的交付物件保存位置,用于保存最终交付成果物,
         如不设定将默认保存到CruiseControl.NET的安装目录下面
    -->
    <artifactDirectory>C:\CCNet\BuildArtifacts\TestProject</artifactDirectory>
 
    <!-- 项目在管理面板Dashboard中的URL地址,设置为Dashboard中点击某个项目的地址
         以下XXX.XXX.XXX.XXX:XXXX为服务器的IP地址和端口
    -->
    <webURL>http://XXX.XXX.XXX.XXX:XXXX/ccnet/server/local/project/TestProject/ViewProjectReport.aspx</webURL>
 
    <!-- 集成Build的标识,通常使用dateLabeller,按日期来配置标识,
         格式为yyyy.mm.dd.build,比如2013.10.14.20
    -->
    <labeller type="dateLabeller"></labeller>
 
    <modificationDelaySeconds>2</modificationDelaySeconds>
 
    <!-- 引发集成任务的触发器,这里可以配置以下几种,具体参看CCNET的文档
         filterTrigger
         intervalTrigger
         scheduleTrigger
         multipleTrigger
    -->
    <triggers>
      <!-- 配置定时触发器,定时执行配置的任务
           seconds是两次触发之间的间隔时间
           buildCondition可以是IfModificationExists和ForceBuild
           initialSeconds是CC服务启动后,触发器启动等待时间。
      -->
      <intervalTrigger
               name="continuous"
               seconds="600"
               buildCondition="ForceBuild"
               initialSeconds="5"/>
    </triggers>
 
    <!-- SVN代码管理服务器祥相关配置,CVS的配置基本于SVN一致。
    -->
    <sourcecontrol type="svn">
      <!--SVN的执行文件-->
      <executable>C:\Program Files\VisualSVN\bin\svn.exe</executable>
      <!--SVN用户名-->
      <username>user</username>
      <!--SVN密码-->
      <password>pass</password>
      <!--源代码的SVM路径-->
      <trunkUrl>svn://192.168.1.1/TestProject/trunk/</trunkUrl>
      <!--SVN工作目录,源代码将获取到改目录中-->
      <workingDirectory>C:\TestProject</workingDirectory>
    </sourcecontrol>
 
    <!-- VSS代码管理服务器祥相关配置
    -->
    <sourcecontrol type="vss">  
      <!--VSS的执行文件-->
      <executable>C:\Program Files\Microsoft Visual Studio\VSS\win32\SS.EXE</executable>  
      <!--源代码的VSS路径-->
      <project>$/TestProject</project>
      <!--VSS用户名-->
      <username>user</username>
      <!--VSS密码-->  
      <password>pass</password>
      <!--VSS路径,包含SRCSAFE.INI的目录-->
      <ssdir>\\192.168.1.1\vss</ssdir>
      <!--VSS工作目录,源代码将获取到改目录中-->
      <workingDirectory>c:\TestProject</workingDirectory>
      <!--VSS操作的过期时间-->
      <timeout units="minutes">2</timeout>  
    </sourcecontrol> 
 
    <!-- 自动集成相关配置
    -->
    <tasks>
      <msbuild>
        <!--MSBuild的路径-->
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <!--工作目录-->
        <workingDirectory>C:\TestProject</workingDirectory>
        <!--项目文件名,.net项目通常为解决方案文件或项目的文件-->
        <projectFile>TestProject.sln</projectFile>
        <!--编译器参数-->
        <buildArgs>/v:quiet /noconlog /p:Configuration=Debug</buildArgs>
        <!--Logger的路径-->
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <!--执行超时-->
        <timeout>60</timeout>
      </msbuild>
 
      <nunit>  
        <!--nunit的路径-->
        <path>C:\Program Files\nunit\nunit-console.exe</path>  
        <!--需要进行单元测试的程序集-->
        <assemblies>
          <assembly>C:\TestProject\TestProjectTest\bin\Debug\TestProjectTest.dll</assembly>  
        </assemblies>  
      </nunit>
 
      <exec>
        <!--MSTest的路径-->
        <executable>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe</executable>
        <!--工作目录-->
        <baseDirectory>C:\TestProject</baseDirectory>
        <!--执行MSTest的参数-->
        <buildArgs>
          /testcontainer:TestProjectTest\bin\Debug\TestProjectTest.dll
          /runconfig:Local.testsettings
        </buildArgs>
        <!--执行MSTest的超时-->
        <buildTimeoutSeconds>120</buildTimeoutSeconds>
      </exec>
    </tasks>
 
    <!-- 集成成功后的相关配置
    -->
    <publishers>
      <!--使用xmllogger记录Log-->
      <xmllogger />
      <!--输出代码的历史记录-->
      <modificationHistory />
      <!--输出task执行的统计信息-->
      <statistics />
      <!--清理交付物目录-->
      <artifactcleanup cleanUpMethod="KeepLastXBuilds"
                       cleanUpValue="50" />
      <!--发送邮件通知信息-->
       <email mailhost="mail.domain.com"
              mailhostUsername="user" 
              mailhostPassword="12345678" 
              from="[email protected]" 
              includeDetails="true">
          <!--用户管理-->
          <users>
            <user name="user1" group="group1" address="[email protected]" />
            <user name="user2" group="group1" address="[email protected]" />
            <user name="user3" group="group1" address="[email protected]" />
            <user name="user4" group="group2" address="[email protected]" />
            <user name="user5" group="group2" address="[email protected]" />
            <user name="user6" group="group2" address="[email protected]" />
          </users>
           <!--用户分组管理-->
           <!--NotificationType
               Always[每次构建均发送通知]
               Changed[构建结果发生改变时发送通知,例如从success变为fail]
               Failed[当构建失败时发送通知]
               Success[当构建成功时发送通知]
               Fixed[当构建从失败到通知时发送通知]
               Exception[构建发生异常时发送通知]
            --> 
          <groups>
            <group name="group1">
              <notifications>
                 <NotificationType>Failed</NotificationType>  
                 <NotificationType>Fixed</NotificationType>  
              </notifications>
            </group>
            <group name="group2">
              <notifications>
                <NotificationType>Change</NotificationType>
              </notifications>
            </group>
          </groups>
       </email>
    </publishers>
  </project>
</cruisecontrol>

参考网址:
http://www.iteye.com/topic/336142
http://hi.baidu.com/yjg021/item/d1e251155c1e60088fbde455
http://wenku.baidu.com/view/d2a3fb36f111f18583d05a19.html
http://www.colorwingcode.com/Article/NETxinshouqu/8859.shtml

Categories: 语言编程, 零敲碎打 Tags: , ,
  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.