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>
<htmlemail
buildresultsurl="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、手工构建