[CruiseControl]配置文件config.xml
一 配置文件config.xml
<property/>
<dashboard/>
<include.projects/>
<system>
<configuration>
<threads/>
</configuration>
</system>
<plugin/>
<project>
<property/>
<plugin/>
<cvslabelincrementer>
<emptylabelincrementer>
<formattedlabelincrementer>
<labelincrementer/>
<p4changelistlabelincrementer>
<propertyfilelabelincrementer>
<svnlabelincrementer>
<listeners>
<cmsynergysessionmonitor/>
<currentbuildstatusftplistener/>
<currentbuildstatuslistener/>
<currentbuildstatuspagelistener/>
<lockfilelistener/>
</listeners>
<bootstrappers>
<accurevbootstrapper/>
<alienbrainbootstrapper/>
<antbootstrapper/>
<clearcasebootstrapper/>
<clearcaseviewstrapper/>
<cmsynergybootstrapper/>
<cmsynergybaselinebootstrapper/>
<cvsbootstrapper/>
<darcsbootstrapper/>
<execbootstrapper/>
<gitbootstrapper/>
<harvestbootstrapper/>
<lockfilebootstrapper/>
<mercurialbootstrapper/>
<p4bootstrapper/>
<plasticscmbootstrapper/>
<snapshotcmbootstrapper/>
<starteambootstrapper/>
<surroundbootstrapper/>
<svnbootstrapper/>
<tfsbootstrapper/>
<vssbootstrapper/>
</bootstrappers>
<modificationset>
<accurev>
<alienbrain/>
<alwaysbuild/>
<buildstatus/>
<clearcase/>
<cmsynergy/>
<compound>
<targets/>
<triggers/>
</compound>
<cvs/>
<darcs/>
<filesystem/>
<forceonly/>
<git/>
<harvest/>
<httpfile/>
<mavensnapshotdependency/>
<maven2snapshotdependency/>
<mercurial/>
<mks/>
<p4/>
<plasticscm/>
<pvcs/>
<snapshotcm/>
<starteam/>
<store/>
<surround/>
<svn/>
<tfs/>
<timebuild>
<ucm>
<veto/>
<vss/>
<vssjournal/>
</modificationset>
<schedule>
<ant/>
<maven/>
<maven2/>
<pause/>
<nant/>
<phing/>
<rake/>
<exec/>
<composite/>
<xcode/>
</schedule>
<log>
<merge/>
<gzip/>
<delete/>
<deleteartifacts/>
</log>
<publishers>
<antpublisher/>
<artifactspublisher/>
<clearcasebaselinepublisher/>
<cmsynergybaselinepublisher/>
<cmsynergytaskpublisher/>
<compoundpublisher/>
<email/>
<execute/>
<ftppublisher/>
<htmlemail/>
<http>
<jabber/>
<onfailure/>
<onsuccess/>
<origo/>
<rss/>
<sametimeannouncement/>
<scp/>
<sfeedocman/>
<sfeefrs/>
<sfeetracker/>
<socket/>
<twitter>
<weblog>
<x10/>
<xsltlogpublisher/>
<yahoopublisher/>
</publishers>
</project>
</cruisecontrol>
二 config.xml的元素<CruiseControl/>和子元素
1)<CruiseControl/>
<CruiseControl/>是配置文件的根节点,可以看做其他的元素容器。
它可以包含子元素:<system>,<project>,<plugin>,<property>,<include.projects>,<dashboard>。
2) <threads> (<system>/<configuration>/<threads>)
<threads> 用来指定CruiseControl可同时build projects的最大数目。默认为1。如果某一时刻需要运行的projects大于threads的count属性指定的值,则多余count的projects将处于等待队列。
它包含属性count。count表示thread的最大数目。
3) <property>
<property> 用来在config.xml中设置一个属性。
它可以包含属性name,value,enviroment,file,toupper。name/value用来表示一个属性;enviroment用来指定可以使用的系统环境变量的前缀,例如当environment为myenv时,表示可以使用系统中的所有的以myenv开始的环境变量,例如myenv.path;file用来加载专门包含<property/>的文件,将所有的property导入到当前config.xml;toupper用来将属性的名字转化为大写。
如下示例:
<cruisecontrol>
<property name="cruisedir" value="/home/cruise"/>
<property name="logdir" value="${cruisedir}/logs"/>
...
<cruisecontrol>
2.Set a collection of global properties from the properties file "config.properties":
<cruisecontrol>
<property file="config.properties"/>
...
<cruisecontrol>
3.Load the system's environment into a collection of global properties. Uppercase all environment variable names:
<cruisecontrol>
<property environment="env" toupper="true"/>
<property name="logdir" value="${env.CCDIR}/logs"/>
...
<cruisecontrol>
4.Define a global property called "buildmanager". Override it's value only within the scope of the project called "project2".
<cruisecontrol>
<property name="buildmanager" value="buildmgr@here.com"/>
<project name="project1">
<!-- ${buildmanager} resolves to "buildmgr@here.com" -->
</project>
<project name="project2">
<property name="buildmanager" value="someoneelse@here.com"/>
<!-- ${buildmanager} resolves to "someoneelse@here.com" -->
</project>
<cruisecontrol>
5.As demonstrated here, properties and plugin pre-configuration can be an extremely powerful combination.
<cruisecontrol>
<!-- Load environment variables -->
<property environment="env" toupper="true"/>
<!-- Commonly used directories -->
<property name="reportdir" value="${env.CCDIR}/report"/>
<property name="projectdir" value="${env.CCDIR}/checkout/${project.name}"/>
<property name="testdir" value="${projectdir}/build/junit-reports"/>
<property name="logdir" value="${env.CCDIR}/logs/${project.name}"/>
<!-- Defaults for email -->
<property name="buildmaster.email" value="buildmaster@example.com"/>
<property name="buildmaster.name" value="Buildmaster"/>
<!-- Preconfigure our plugins -->
<plugin name="log"
dir="${logdir}"/>
<plugin name="currentbuildstatuslistener"
file="${logdir}/buildstatus.html"/>
<plugin name="cvs"
localworkingcopy="${projectdir}"/>
<plugin name="ant"
antscript="${env.ANT_HOME}/bin/ant"
antWorkingDir="${projectdir}"
target="cruise"/>
<plugin name="htmlemail"
buildresultsurl="http://servername/cruisecontrol/buildresults/${project.name}"
mailhost="smtp.example.com"
returnaddress="${buildmaster.email}"
returnname="${buildmaster.name}"
subjectprefix="[BUILD ${project.name}]"
xsldir="${reportdir}/jsp/webcontent/xsl"
css="${reportdir}/jsp/webcontent/css/cruisecontrol.css"/>
<project name="project1"/>
<listeners>
<currentbuildstatuslistener/>
</listeners>
<log>
<merge dir="${testdir}">
</log>
<modificationset>
<cvs/>
</modificationset>
<schedule>
<ant/>
</schedule>
<publishers>
<htmlemail>
<always address="${buildmaster.email}">
<failure address="proj1dev@example.com">
<ignore address="buildmaster">
</htmlemail>
</publishers>
</project>
<project name="project2"/>
<listeners>
<currentbuildstatuslistener/>
</listeners>
<log>
<merge dir="${testdir}">
</log>
<modificationset>
<cvs/>
</modificationset>
<schedule>
<ant/>
</schedule>
<publishers>
<htmlemail>
<always address="${buildmaster.email}">
<failure address="proj2dev@example.com">
</htmlemail>
</publishers>
</project>
</cruisecontrol>
4)<include.projects>
<include.projects>用来将多个config文件合并为config文件。
它包含属性file,表示要include的config文件的相对路径。
5)<dashboard>
<dashboard>用来为build loop指定dashboard。
它包含属性url,postinterval。url为dashboard的url,postinterval表示build loop传输build信息到dashboard的间隔。
6)<project>
<project>是基本的工作单元。包含检查source修改,build,发布build结果。
它包含属性name,buildafterfailed,forcebuildnewproject,requiremodification,forceonly。buildafterfailed为ture表示即使build失败了,cruisecontrol继续保持build;forcebuildnewproject为ture表示如果没有发现project的序列文件(project.ser)就强制project开始build;requiremodification为ture表示当source code有修改时build,但是如果需要定时build或手动测试时,requiremodification需要为false。
它包含子元素<listeners>,<bootstrappers>,<modificationset>,<schedule>,<log>,<publishers>,<plugin>。
完!