做这个的时候,查到的资料里代码管理器大多是svn vss这种的,正好单位用的是Clearcase这种个人觉得超难用的代码管理工具,就稍微写点什么,没准以后或者有人用得着。
持续集成工具CruiseControl.NET-1.4.4-Setup
代码管理工具ClearCase
编译环境VS2005
目标:实现每天11点17点两个时间自动从ClearCase上获取源代码,自动编译,对编译结果发邮件通知
其实安装好CruiseControl以后,要做的就是打开$CruiseControl.NET\server\目录,修改ccnet.config文件
这个文件的详细说明文档可以在http://ccnet.sourceforge.net/上找到,下载在上面也有
我最后配置文件内容:
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="IPRA">
<triggers>
<scheduleTrigger time="11:00" buildCondition="ForceBuild"/>
<scheduleTrigger time="17:00" buildCondition="ForceBuild"/>
</triggers>
<sourcecontrol type="clearCase">
<viewPath>D:\work\clearcase\IPRA_dev_2\IPRA_comp</viewPath>
<autoGetSource>true</autoGetSource>
</sourcecontrol>
<state type="state" directory="D:\work\NAnt\CCNetState" />
<labeller type="defaultlabeller">
<prefix>IPRA-</prefix>
<incrementOnFailure>true</incrementOnFailure>
</labeller>
<tasks>
<devenv>
<solutionfile>D:\work\clearcase\IPRA_dev_2\IPRA_comp\Ipra_Src_Net\IPRA Solution.sln</solutionfile>
<configuration>Debug</configuration>
<executable>D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com</executable>
<buildTimeoutSeconds>5000</buildTimeoutSeconds>
</devenv>
<xmllogger logDir="D:\work\NAnt\CCNetState\IPRA\logs" />
</tasks>
<publishers>
<email mailhost="xx.x.xx.xxx" mailport="25" mailhostUsername="xxx" mailhostPassword="xxxxxx" from="xxx@company.com" includeDetails="TRUE">
<users>
<user name="xxx" group="buildmaster" address="xxx@company.com"/>
</users>
<groups>
<group name="buildmaster" notification="always"/>
</groups>
</email>
</publishers>
</project>
</cruisecontrol>
说明:
<project>项目标签,标签里都是对一个解决方案的配置,一个配置文件里可以有多个<project>标签分别对不同的解决方案进行管理
<triggers>触发器标签,定义每天进行编译,获取的时间点,也可以设置成<intervalTrigger seconds="60" />这种每隔一定的时间间隔就开始编译的,这个标签一定要写,不写的话就不会触发下面的所有操作了,简单来说就是它傲娇了...
<sourcecontrol>源代码管理器标签,用type指定源代码管理器类型,标签内容根据type定义的不同会有不同,各种主流的代码管理器都支持,我这里的是clearcase的,其他的写法去上面写的那个网站上看吧
<labeller>标记标签,这个其他源代码管理器需不需要单独定义我不知道,因为每次自动编译完以后会给编译过的版本打上一个标记,默认是数字"1,2,3...",clearcase不支持只有的数字标签,所以我在这里给它加了个前缀(感觉就是小萝莉不合作,怪蜀黍在拿糖果引诱小萝莉跟他走...)
<tasks>工作标签,这个里面可以包含很多东西,详细内容也去网站上看吧...我这里的就是针对doNet的解决方案做的配置。
<publishers>通告标签,通知编译结果,我这里用邮件通知
<email>标签里是邮件服务,我用的公司内网邮件服务器,所以就直接写ip了,也可以用邮箱提供的smtp服务器 <user>里是收件人 <group>组和user里的相互对应就好,不用像有人说的那样一定要是代码管理器上的组。
恩,这个参数文件写错了的话,会出现非常恐怖的一片红色的提示....真是超恐怖的说
PS:觉得自己越来越像怪蜀黍了.....
后记,后来总是报告ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out.的异常,原因是项目文件太多,编译花的时间超过了默认的timeout值(10min)。
查了一下说是源代码管理器标签里有timeout的设置,然后给的解决办法是
我都设到了30分钟超时了还不行超出我容忍的范围了....最后觉得是clearcase加label时间特别长,就想干脆不加labeller算了,找了一下帮助文档,果然有这一项,然后在<sourcecontrol>标签里额外加了一条<useLabel>false</useLabel>,好了 终于不会加label了,时间减少了很多,4min左右就搞定了。不过上面的那个给label加前缀的标签还是的保留,因为最后还是会做一个标识的。
There is a timeout property for the `sourcecontrol` element. Itdefaults to 10 mintues.
Maybe you could try increasing that to 20 minutes and see if thathelps...