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>
			<htmlemail
buildresultsurl="http://localhost:8080/cruisecontrol/buildresults/jpetstore"
                mailhost="pop.corpease.net" 
                username="[email protected]"
                password="123456"
                defaultsuffix="@xiu.com"
                returnname="CC log"
                returnaddress="[email protected]"
                skipusers="true"
                charset="UTF-8"
                xsldir="webapps/cruisecontrol/xsl"
                css="webapps/cruisecontrol/css/cruisecontrol.css">
                <always address="[email protected]" />   
                <success address="[email protected]" />  
			
      </htmlemail>            </htmlemail>

        </publishers>

    </project>

</cruisecontrol>

持续集成目标:
自动编译-->自动构建-->自动检查-->自动部署-->自动测试-->自动补丁-->自动发布

持续集成策略:三种构建方式
1、实时构建
2、每日构建
3、手工构建

猜你喜欢

转载自yaozhiqiang109.iteye.com/blog/939095