1. 环境搭建
1.1. 下载及目录介绍
从官方站点http://cruisecontrol.sourceforge.net/download.html下载一份最新的 CC 压缩包,最新的版本号为2.8.4
下载了cruisecontrol-bin-2.8.4.zip 直接解压到E盘下,文件结构如下图:
1.2. 运行环境
使用JAVA开发的CC,当然需要运行在JDK下并通过Web容器进行发布,具体要求如下:
1.3. 快速启动CC
运行根目录下批处理文件cruisecontrol.bat,出现如下界面:
运行成功后,我们可以在浏览器输入 http://localhost:8080/cruisecontrol/ 来验证一下结果(采用Jetty默认的设置,端口号为 8080)
如果看到上图结果,恭喜你已经成功启动CC。
另外CC提供了更加人性化结果展示Dashboard界面,在浏览器输入 http://localhost:8080/dashboard/
2. 配置介绍
当CC服务器启动时,会自动检测配置信息中的任务信息,并对其进行校验和初始化,之后所有的工作,都是依据该配置信息进行的。
CC的配置使用了其安装目录下的config.xml文件,我们可以通过文本编辑器打开该配置文件,编辑各种配置信息。配置信息的定义遵循了标准XML文件格式,同时遵循了ANT自动构建配置信息的规则。
config.xml
<cruisecontrol>
<project name="connectfour">
<!-- 用来访问项目当前创建的状态 file: 指定了状态文件的位置 -->
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<!-- 在 CC 进行创建之前运行,创建前的准备工作 -->
<bootstrappers>
<!-- 从源码控制系统更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper -->
<antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="clean" />
</bootstrappers>
<!-- 检查各个源码控制系统中是否发生变化;quietperiod: 单位为秒 设定等待的时间 -->
<!-- 第一次的取出工作为手动执行 -->
<modificationset quietperiod="30">
<!-- touch any file in connectfour project to trigger a build -->
<filesystem folder="projects/${project.name}"/>
</modificationset>
<!-- 指定了构建的时间间隔 单位为秒-->
<schedule interval="300">
<ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
</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>
<!--
mailhost=邮件主机
returnname=发件人
returnaddress=发件地址
defaultsuffix=默认邮件后缀
-->
<htmlemail
charset="UTF-8"
mailhost="test163.com"
defaultsuffix="@xxx.com"
username="[email protected]"
password="xxx"
returnname="CruiseControl"
returnaddress="[email protected]"
subjectprefix="构建日志"
xsldir="webapps/cruisecontrol/xsl"
css="webapps/cruisecontrol/css/cruisecontrol.css">
<always address="[email protected]"/>
<failure address="xxx@xxx,[email protected]"/>
</htmlemail>
</publishers>
</project>
</cruisecontrol>
build.xml
<!-调用ANT执行集成流程,包括清空目录、编译、休眠、测试、打包 --> <project name="connectfour" default="all"> <target name="all" depends="clean, compile, sleep, test, jar"/> <!-- 1. 删除根目录下target 目录--> <target name="clean"> <delete dir="target" quiet="true" /> </target> <!-- 2. 编译程序,创建目录并编译程序,编译输出为target/classes目录下--> <target name="compile"> <mkdir dir="target/classes"/> <javac srcdir="src" destdir="target/classes"/> </target> <!-- 3. 在创建前等待60秒,用于Dashboard观察进程--> <target name="sleep"> <echo message="Sleeping for a while so you can see the build in the new dashboard" /> <sleep seconds="60" /> </target> <!-- 4. 进行自动化测试,依赖任务为compile--> <target name="test" depends="compile"> <mkdir dir="target/test-classes"/> <!-调用junit进行自动化测试--> <javac srcdir="test" destdir="target/test-classes"> <classpath> <pathelement location="target/classes"/> <pathelement location="lib/junit.jar"/> </classpath> </javac> <!-创建测试结果存放目录--> <mkdir dir="target/test-results"/> <junit haltonfailure="no" printsummary="on"> <classpath > <pathelement location="target/classes"/> <pathelement location="lib/junit.jar"/> <pathelement location="target/test-classes"/> </classpath> <formatter type="brief" usefile="false"/> <formatter type="xml" /> <!-测试文件所在文件地址--> <batchtest todir="target/test-results" > <fileset dir="target/test-classes" includes="**/*Test.class"/> </batchtest> </junit> </target> <!-- 5. 程序打包,依赖与compile任务--> <target name="jar" depends="compile"> <jar jarfile="target/connectfour.jar" basedir="target/classes"/> </target> </project>2.3. 执行配置解析
<svn localWorkingCopy="projects/CM/${project.name}/src/${project.name}"/>
该节点使用了svn关键字,表示当前工程使用的版本控制系统是SVN,localWorkingCopy属性的值是告诉CC本地的拷贝目录,其余的工作则由CC内置的操作模块进行。
2.3.2. 执行构建脚本
实质上,执行构建脚本也是CC的一个可定制任务,但由于自动构建是持续集成的一个重要组成部分,因此在此单独提出。
CC的自动构建是使用ANT工具来进行的,当然我们也可以使用其它的自动构建工具来替代(比如Maven),这些的工具仅仅是体现在一个任务配置语句上,在此,以ANT工具为例。
在schedule节,我们同样使用了一个子节点来描述自动构建工作:
<ant anthome="ant6" buildfile="projects/CM/${project.name}/src/${project.name}/build.xml"/>
该节点使用了ant关键字,表示该任务使用了ant来进行自动构建任务,anthome属性则指定了ANT工具的具体位置,buildfile属性则指定了ANT进行自动构建所使用的配置文件Build.xml文件的路径。
这样,在CC决定进行自动构建任务时,会根据设定找到执行所使用到的信息。
2.3.3. 执行单元测试
CC可以自动侦测自动构建配置文件中单元测试的任务,并在代码集成完毕将执行结果反馈到相应的模块。
ANT支持xUnit系列的单元测试框架,只需要在配置文件中加入一个target节,即可在自动构建完成之后,进行单元测试工作,有关的详细配置,请参阅ANT官方文档。