在这里以一个项目来简要的说说cc的使用,通常项目对于日构建的类型的需求分为两种:
1、每天的定时自动集成。
2、感知版本管理工具中的变化而进行自动集成。
项目对于日构建的目标通常为:
1、感知版本管理工具的变化,如发现有变化,则进行集成。
2、调用项目编译脚本进行项目集成。
3、合并项目编译脚本产生的单元测试、功能测试的日志。
4、将集成报告发布至网站中。
5、将集成的结果以邮件、jabber等等方式通知相应的负责人。
Configuration Reference(config.xml文件)
<cruisecontrol>
<property/>
<include.projects/>
<system>
<configuration>
<threads/>
</configuration>
</system>
<plugin/>
<project>
<property/>
<plugin/>
<dateformat/>
<labelincrementer/>
<listeners>
<cmsynergysessionmonitor/>
<currentbuildstatusftplistener/>
<currentbuildstatuslistener/>
<currentbuildstatuspagelistener/>
<lockfilelistener/>
</listeners>
<bootstrappers>
<accurevbootstrapper/>
<alienbrainbootstrapper/>
<antbootstrapper/>
<clearcasebootstrapper/>
<clearcaseviewstrapper/>
<cmsynergybootstrapper/>
<currentbuildstatusbootstrapper/>
<currentbuildstatusftpbootstrapper/>
<cvsbootstrapper/>
<execbootstrapper/>
<harvestbootstrapper/>
<lockfilebootstrapper/>
<p4bootstrapper/>
<plasticscmbootstrapper/>
<snapshotcmbootstrapper/>
<starteambootstrapper/>
<surroundbootstrapper/>
<svnbootstrapper/>
<tfsbootstrapper/>
<vssbootstrapper/>
</bootstrappers>
<modificationset>
<accurev>
<alienbrain/>
<alwaysbuild/>
<buildstatus/>
<clearcase/>
<cmsynergy/>
<compound>
<targets/>
<triggers/>
</compound>
<cvs/>
<darcs/>
<filesystem/>
<forceonly/>
<harvest/>
<httpfile/>
<mavensnapshotdependency/>
<maven2snapshotdependency/>
<mks/>
<p4/>
<plasticscm/>
<pvcs/>
<snapshotcm/>
<starteam/>
<surround/>
<svn/>
<tfs/>
<timebuild>
<ucm>
<veto/>
<vss/>
<vssjournal/>
</modificationset>
<schedule>
<ant/>
<maven/>
<maven2/>
<pause/>
<nant/>
<phing/>
<exec/>
<composite/>
</schedule>
<log>
<merge/>
<gzip/>
<delete/>
</log>
<publishers>
<antpublisher/>
<artifactspublisher/>
<clearcasebaselinepublisher/>
<cmsynergybaselinepublisher/>
<cmsynergytaskpublisher/>
<compoundpublisher/>
<currentbuildstatuspublisher/>
<currentbuildstatusftppublisher/>
<email/>
<execute/>
<ftppublisher/>
<htmlemail/>
<jabber/>
<onfailure/>
<onsuccess/>
<rss/>
<sametimeannouncement/>
<scp/>
<sfeedocman/>
<sfeefrs/>
<sfeetracker/>
<socket/>
<weblog>
<x10/>
<xsltlogpublisher/>
<yahoopublisher/>
</publishers>
</project>
</cruisecontrol>
示例:
<cruisecontrol>
<project name="hello">
<listeners>
<currentbuildstatuslistener file="logs/hello/status.txt" />
</listeners>
<!-- 启动任务Plugin的容器,用于定义构建任务启动前需要执行的任务 -->
<bootstrappers>
<cvsbootstrapper localWorkingCopy="projects/hello" />
</bootstrappers>
<!-- 用于告诉CruiseControl是否需要构建项目,即配置管理库的代码是否存在更新,如果更新则自动执行下面的build.xml。属性requiremodification告诉CruiseControl,在配置管理库没有代码更新的情况下,是否需要构建。缺省为"true",即没有更新则无须进行构建;属性quietperiod告诉CruiseControl,最新一次代码提交后CruiseControl需要等待的时间(秒),用于防止CruiseControl在开发人员提交代码时进行项目构建,缺省为"60"秒。 -->
<modificationset quietperiod="30" >
<cvs localWorkingCopy="projects/hello"/>
<cvs localWorkingCopy="projects/hello/main/src/java/com/test/qik"/>
</modificationset>
<!-- 每隔多长时间(秒)启动一次构建任务。可选的属性interval,用于定义以秒为单位的时间间隔,缺省为"300"秒。 -->
<schedule interval="30" >
<ant anthome="apache-ant-1.6.3"
buildfile="projects/hello/build.xml"
target="CI"/><!-- 构建时执行的build.xml -->
</schedule>
<!-- 设定CruiseControl日志文件的存放目录 -->
<log>
<merge dir="projects/hello/test-reports"/>
</log>
<!-- 指定构建任务结束后,CruiseControl如何发布项目构建结果。项目构建结果的发布方式可以是Email,网页,复制代码库到指定的目录,或是发布代码库到FTP服务器等等。 -->
<publishers>
<artifactspublisher dest="artifacts" file="projects/hello/target/hello.jar"/>
</publishers><!-- 发布jar包的位置,我都是在build.xml中将jar包打好放在这个位置 -->
</project>
</cruisecontrol>
参考网文:CruiseContol:持续集成工具(虽然原有的版本比较老了,但是参考一下也是很不错的~~)