CruiseControl使用总结
CruiseControl:简称CC,持续集成工具,主要提供了基于版本管理工具(如SVN)感知变化或每天定时的持续集成,
并提供持续集成报告,通过Email、IM、RSS等等方式通知相关负责人。
使用CruiseControl的优点
持续集成最大的优点是可以避免传统模式在集成阶段的除虫会议(bug meetings)。
降低风险,尽早的发现bug,静态代码分析
自动化,自动编译、自动测试、自动部署、自动审查
增强项目的可见性,maven site,测试报告
可部署的软件
持续集成主张项目的开发人员频繁的将他们对源码的修改提交(check in)到一个单一的源码库,
并验证这些改变是否对项目带来了破坏。
主要包括三个组件:
1、Build Loop组件:主要负责根据外部的xml配置,定时、周期性的根据外部SCM的状态启动构建任务,
并将构建结果通过Email/IM/RSS等方式通知到相应的客户端
2、JSP的报告组件:提供了一个web页面供我们查看构建结果以及每次构建发布的工件
3、Dashboard组件:提供了一个可视化的界面,让我们可以清楚的看到各个项目的构建状态
CC倾向于通过源码变化来自动触发构建,但仍克定时触发构建,以达到nightly building的效果。
术语:
1、工作目录:是指启动CC的脚步目录。在Stand-alone情况下,就是文件cruisecontrol.bat所在的目录。
如果你把它部署到了应用服务器中,那一般就指bin目录了。
2、Log目录:就是CC存储所有构建项目日志信息的目录,默认值为工作目录下名为logs目录
3、Projects目录:就是CC存储所有构建项目源代码的目录,默认值为工作目录下名为projects目录
如果项目的log文件比较大,或者构建时使用内存较多,可以在cruisecontrol.sh中增加JAVA命令行参数,扩大JVM的内存,以免出现OutOfMemory错误:
CC_OPTS="-Xms128m -Xmx256m"
<?xml version="1.0" encoding="UTF-8"?><cruisecontrol> <!--name必须和projects下面的项目名称一致 buildafterfailed表示构建失败后,在没有代码检入得情况下是否再构建--><project name="jpetstore" buildafterfailed="false"> <!--用于监听项目状态变化--><listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners><!--项目构建之前的准备工作--> <bootstrappers> <!-- 从源码控制系统更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper --> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <!-- 检查各个源码控制系统中是否发生变化;quietperiod: 单位为秒 设定等待的时间 --> <!-- 第一次的取出工作为手动执行 --> <modificationset quietperiod="30"><svn localWorkingCopy="projects/${project.name}" /> </modificationset><!--构建的时间间隔 单位是秒--> <schedule interval="300"><!--<maven2 mvnhome="C:/Program Files/apache-maven-2.2.1" pomfile="projects/${project.name}/pom.xml" goal="-U clean test" />--><maven2 mvnhome="C:/Program Files/apache-maven-2.2.1" pomfile="projects/${project.name}/pom.xml" goal="clean package" /> </schedule><!--指定日志的保存地点--> <log> <merge dir="projects/${project.name}/target/test-results"/> </log><!-- 在 build loop 结束之后运行,发布 build 的结果 --> <publishers> <onsuccess><artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/> </onsuccess><htmlemailbuildresultsurl="http://localhost:8080/cruisecontrol/buildresults/jpetstore" mailhost="pop.corpease.net" username="laughing.yao@xiu.com" password="123456" defaultsuffix="@xiu.com" returnname="CC log" returnaddress="laughing.yao@xiu.com" skipusers="true" charset="UTF-8" xsldir="webapps/cruisecontrol/xsl" css="webapps/cruisecontrol/css/cruisecontrol.css"> <always address="laughing.yao@126.com" /> <success address="laughing.yao@126.com" /> </htmlemail> </htmlemail> </publishers> </project></cruisecontrol>
?
持续集成目标:
自动编译-->自动构建-->自动检查-->自动部署-->自动测试-->自动补丁-->自动发布
持续集成策略:三种构建方式
1、实时构建
2、每日构建
3、手工构建