持续集成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
Recent Comments