一些关于cruise control的笔记
cruiseControllearning
最近看了些关于持续构建的内容,才知道差了好多,下面是自己的一些记录,可能比较乱,而且也不全是关于cruiseControl的,希望对大家有用
...........................
一个continuousintegration工具,能团队进行敏捷开发,每过一段时间来进行集成,以便随时能发现引入的错误。当build失败后,将会通知提交者,使其能够更改代码。
cruiseControl(CC)的配置是围绕六个插件来展开的。
在提交之后,build失败了,如果不希望在再次提交代码之前重复的构建,可以有如下设置<projectname="integration"buildafterfailed="false">
----
1.Bootstrapper:cc创建之前运行,是创建前的准备工作....Bootstrappersarerunbeforeabuildtakesplace
<bootstrappers>
<currentbuildstatusbootstrapper>指定了状态文件的位置,主要是用来访问项目当前创建的状态
<cvsbootstrappers>可以是其他的源码控制系统,.....就是为从源码控制系统更新ant的buildfile文件而设计的.....
因为我们每次项目的创建都应该基于最新的代码,因此在创建之前就要获得最新的项目文件,如果你使用的是ant,这个工作是由ant的buildfile来完成的。
2.SourceControl:访问源码控制系统,查看源码自上次build之后是否被修改。并据此决定是否需要进行下一次Build
<modificationset>,用于检查各个源码控制系统中是否发生变化,<schedule>会用到这里面的配置信息,如果检测到变化,会触发创建过程。
3.Builder:对项目进行创建,(包括对项目源码的的编译,测试,打包)
<schedule>定时驱动<modificationset>,如果检测到变化,就执行所指定的builder的任务。
当<modificationset>检测到修改时,如果没有调用build,下次也不会调用build,因为下次没有检测到失败。
但是build失败时,会一直要重新构建,直到构建成功。................??????????
因此build失败后,再此成功时,至少有两次被修改了,即modifications为2
----------------------------------------------------------------
<scheduleinterval="60">
<antanthome="apache-ant-1.7.0"buildfile="cc-build.xml"saveLogDir="projects/${project.name}"antworkingdir="projects/${project.name}"
target="build"/>
</schedule>
当ant节点的antworkingdir属性设定之后,buildfile的起始位置将是antworkingdir的位置,切记。(ant应用中)ant调用其他文件时,好像也是样的吧,需要查查
-------------------------------------------------------------
4.LabelIncrementer:对源码打标签,自动增加标签的编号
5.Publisher:发布创建的结果,可以通过email的方式通知开发人员()。。。。
IRCPublisher将结果发入一irc服务器,需要一个ircPublicsher插件,http://confluence.public.thoughtworks.org/display/CC/IRCPublisher
--------------------------------
当提交的人提交的内容导致了错误,将发送错误消息给他,配置如下:需要注意的一点是,如果cvs用户名是"Paulwei"形式,用户名之间有空格的,CC只提取前面一部分,作为用户名,所以需要加个<mapalias="Paul"address="**@**"
/>
<publishers>
<onsuccess>
<artifactspublisherdest="artifacts/${project.name}"file="projects/${project.name}/target/${project.name}.jar"/>
</onsuccess>
<currentbuildstatuspublisherfile="logs/${project.name}/status.txt"/>
<emailmailhost="smtp.host"
returnaddress="[email protected]"
skipusers="false"
reportsuccess="fixes"
subjectprefix="[CruiseControl]"
buildresultsurl="http://192.168.0.15:8080/buildresults/integration"
>
<mapalias="Paul"address="[email protected]"/>
</email>
</publishers>
------------------------------------
6.Listener:用于处理一些项目有关的事件???
============================
其他的一些问题,
1.当报下面的错误时:即antlogfile找不到,
-exceptionattemptingbuildinprojectintegration
net.sourceforge.cruisecontrol.CruiseControlException:antlogfile**\log.xmlisempty.Yourbuildprobablyfailed.CheckyourCruiseControllogs.
请往这句话的上面查看,很可能是其他地方出错了,比如构建文件找不到。下面是我曾遇到过的一种情况
2008-04-1110:21:22,091[Thread-8]INFOProject-Projectintegration:nowbuilding
2008-04-1110:21:22,091[Thread-8]INFOProjectController-integrationController:buildprogressevent:nowbuilding
2008-04-1110:21:22,857[Thread-16]INFOScriptRunner-Buildfile:projects\integration\cc-build.xmldoesnotexist!
2008-04-1110:21:22,889[Thread-15]WARNScriptRunner-Buildfailed
下面这个blog是另一种情况,内存不够
http://www.bxm.at/blogs/java/2007/08/19/cruisecontrolexception_ant_logfile_does_
........
2.ant的cvs如果要执行add或者update等命令时,需要相对路径,绝对路径时会出错。
<cvscvsroot="${cvsroot}"command="update../ab/ch.txt"/>
......
----------------------------------------
从javadevelopmentwithant中一些关于cruisecontrol的tips
?CruiseControlrecommendsthatyouuseJikesinsteadofjavacbecauseitis
fasterandleakslessmemory.
?Likewise,ifyoudousethejavaccompileroranotherbigJavaprogram,set
fork="true".
?GetamobilephonewithSMSmessagingandsetupanemailalias,andthen
youcangetpagedwhenthingsgowrong—andwhentheystartworkingagain.