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.配置项目的集成配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <!-- 自定义该项目的状态保存位置,用于保存各种编译结果数据,
         如不设定将默认保存到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.配置引发集成任务开始的触发器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <!-- 引发集成任务的触发器,这里可以配置以下几种,具体参看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管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    <!-- 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管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <!-- 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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

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

使用MSTest

1
2
3
4
5
6
7
8
9
10
11
12
13
      <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.集成成功后的相关配置

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

6.邮件通知配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
      <!--发送邮件通知信息-->
       <email mailhost="mail.domain.com"
              mailhostUsername="user" 
              mailhostPassword="12345678" 
              from="user@domain.com" 
              includeDetails="true">
          <!--用户管理-->
          <users>
            <user name="user1" group="group1" address="user1@domain.com" />
            <user name="user2" group="group1" address="user2@domain.com" />
            <user name="user3" group="group1" address="user3@domain.com" />
            <user name="user4" group="group2" address="user4@domain.com" />
            <user name="user5" group="group2" address="user5@domain.com" />
            <user name="user6" group="group2" address="user6@domain.com" />
          </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配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<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="user@domain.com" 
              includeDetails="true">
          <!--用户管理-->
          <users>
            <user name="user1" group="group1" address="user1@domain.com" />
            <user name="user2" group="group1" address="user2@domain.com" />
            <user name="user3" group="group1" address="user3@domain.com" />
            <user name="user4" group="group2" address="user4@domain.com" />
            <user name="user5" group="group2" address="user5@domain.com" />
            <user name="user6" group="group2" address="user6@domain.com" />
          </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.