使用CruiseControl+SVN+ANT实现持续集成之二环境搭建和配置介绍

 

使用CruiseControl+SVN+ANT实现持续集成之二
--环境搭建和配置介绍

1. 环境搭建
1.1. 下载及目录介绍

从官方站点http://cruisecontrol.sourceforge.net/download.html下载一份最新的 CC 压缩包,最新的版本号为2.8.4

下载了cruisecontrol-bin-2.8.4.zip 直接解压到E盘下,文件结构如下图:

  • apache-ant-1.7.0:CC中使用ANT工具
  • artifacts:CC编译生成发布包
  • etc:自带容器Jetty对应的配置文件
  • lib:自带容器Jetty所需要到的Jar包
  • logs:各项目生成日志存在文件夹
  • projects:存放各项目文件目录,进行程序的编译
  • webapps:CC自带应用程序存放目录
  • cc-config:用于CC环境变量配置
  • cruisecontrol:主应用程序CC目录
  • dashboard:用于编译结果发布程序
  • documentation:CC相关文档
  • config.xml:用于CC编译配置文件,通过修改配置文件引入不同的插件,执行不同的编译流程
  • cruisecontrol.bat:在WINDOWS环境下进行启用CC批处理脚本
  • cruisecontrol.sh:在Linux等环境下启动CC脚本
  • dashboard-config.xml:Dashboard配置文件


1.2. 运行环境
使用JAVA开发的CC,当然需要运行在JDK下并通过Web容器进行发布,具体要求如下:

  • CC需要运行在至少JDK 1.4环境中,在环境变量中设置有JAVA_HOME,并把java/bin加入到path中;
  • CC已经内建集成了ANT,不需要单独引入;
  • CC可以运行在多种应用服务器中,在自带压缩包中捆绑了一个开源应用服务器,那就是Jetty 6,下面为了尽快建立我们的环境,以下将使用该容器。


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自动构建配置信息的规则。
2.1. config.xml

 1  < cruisecontrol >
 2  < project  name ="connectfour" >
 3 
 4       <!--  用来访问项目当前创建的状态   file: 指定了状态文件的位置  -->
 5       < listeners >
 6               < currentbuildstatuslistener  file ="logs/${project.name}/status.txt" />
 7           </ listeners >
 8 
 9           <!--  在 CC 进行创建之前运行,创建前的准备工作  -->
10            < bootstrappers >
11               <!--  从源码控制系统更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper  -->
12                   < antbootstrapper  anthome ="apache-ant-1.7.0"  buildfile ="projects/${project.name}/build.xml"  target ="clean"   />
13            </ bootstrappers >
14 
15           <!--  检查各个源码控制系统中是否发生变化;quietperiod: 单位为秒 设定等待的时间  -->
16           <!--  第一次的取出工作为手动执行  -->
17            < modificationset  quietperiod ="30" >
18               <!--  touch any file in connectfour project to trigger a build  -->
19               < filesystem  folder ="projects/${project.name}" />
20            </ modificationset >
21      
22           <!--  指定了构建的时间间隔 单位为秒 -->
23            < schedule  interval ="300" >
24               < ant  anthome ="apache-ant-1.7.0"  buildfile ="projects/${project.name}/build.xml" />
25            </ schedule >
26 
27           <!--  指定项目日志保存的地点  -->
28            < log >
29               < merge  dir ="projects/${project.name}/target/test-results" />
30            </ log >
31 
32           <!--  在 build loop 结束之后运行,发布 build 的结果  -->
33           < publishers >
34               < onsuccess >
35                 <!-- 用于对创建过程中产生的人工制品进行发布 -->
36                   < artifactspublisher  dest ="artifacts/${project.name}"  file ="projects/${project.name}/target/${project.name}.jar" />
37               </ onsuccess >
38 
39          <!--
40            mailhost=邮件主机
41            returnname=发件人
42            returnaddress=发件地址
43            defaultsuffix=默认邮件后缀
44          -->
45          < htmlemail
46             charset ="UTF-8"
47            mailhost ="test163.com"  
48             defaultsuffix ="@xxx.com"
49             username ="xxx@163.com"
50            password ="xxx"
51             returnname ="CruiseControl"
52             returnaddress ="xxx@163.com"
53             subjectprefix ="构建日志"
54             xsldir ="webapps/cruisecontrol/xsl"
55             css ="webapps/cruisecontrol/css/cruisecontrol.css" >
56             < always  address ="xxx@xxx.com.cn" />
57             < failure  address ="xxx@xxx,yyy@yyy.com.cn" />             
58           </ htmlemail >
59           </ publishers >
60       </ project >
61  </ cruisecontrol >

2.2. build.xml

 1  <! —调用ANT执行集成流程,包括清空目录、编译、休眠、测试、打包 -- >
 2  < project  name ="connectfour"  default ="all" >
 3       < target  name ="all"  depends ="clean, compile, sleep, test, jar" />
 4 
 5       <!--  1. 删除根目录下target 目录 -->
 6       < target  name ="clean" >
 7           < delete  dir ="target"  quiet ="true"   />
 8       </ target >
 9 
10       <!--  2. 编译程序,创建目录并编译程序,编译输出为target/classes目录下 -->
11       < target  name ="compile" >
12           < mkdir  dir ="target/classes" />
13           < javac  srcdir ="src"  destdir ="target/classes" />
14       </ target >
15 
16       <!--  3. 在创建前等待60秒,用于Dashboard观察进程 -->
17       < target  name ="sleep" >
18           < echo  message ="Sleeping for a while so you can see the build in the new dashboard"   />
19           < sleep  seconds ="60"   />
20       </ target >
21 
22       <!--  4. 进行自动化测试,依赖任务为compile -->
23       < target  name ="test"  depends ="compile" >
24           < mkdir  dir ="target/test-classes" />
25           <! —调用junit进行自动化测试-- >
26           < javac  srcdir ="test"  destdir ="target/test-classes" >
27               < classpath >
28                   < pathelement  location ="target/classes" />
29                   < pathelement  location ="lib/junit.jar" />
30               </ classpath >
31           </ javac >
32 
33           <! —创建测试结果存放目录-- >
34           < mkdir  dir ="target/test-results" />
35           < junit  haltonfailure ="no"  printsummary ="on" >
36               < classpath  >
37                   < pathelement  location ="target/classes" />
38                   < pathelement  location ="lib/junit.jar" />
39                   < pathelement  location ="target/test-classes" />
40               </ classpath >
41               < formatter  type ="brief"  usefile ="false" />
42               < formatter  type ="xml"   />
43 
44               <! —测试文件所在文件地址-- >
45               < batchtest  todir ="target/test-results"   >
46                   < fileset  dir ="target/test-classes"  includes ="**/*Test.class" />
47               </ batchtest >
48           </ junit >
49       </ target >
50 
51       <!--  5. 程序打包,依赖与compile任务 -->
52       < target  name ="jar"  depends ="compile" >
53           < jar  jarfile ="target/connectfour.jar"  basedir ="target/classes" />
54       </ target >
55  </ project >

2.3. 执行配置解析
     一个持续集成项目是从project节点开始的,对该项目进行的操作都会作为子节点存在与该根节点之下。对于每一个project节点,CC系统都会将其当作一个处理单元,并在最初建立该项目的时候进行初始化操作。
     name是project节点常用的属性,也是必设且值唯一的属性,该属性的值会在整个CC系统使用,包括配置文件的${project.name}变量值。
     在一个项目节点中,我们可以定义监听器、本地目录位置、变更轮询目录位置、轮询间隔、任务执行、单元测试、日志记录等多种项目操作,同时CC系统支持插件扩展功能,这些扩展插件可以直接在一个项目中使用。
  2.3.1. 轮询版本控制系统
     版本库轮询机制是使用modificationset进行配置的。CC系统内置的轮询模块会根据设定的时间段对版本库进行检测,一旦发现版本库发生变更,就会调用Check Out Build Test Publish等一系列的操作,对最新的代码进行集成,并运行一系列预先设定的任务。
     CC支持十多种版本控制系统,比如CVS、SVN、Starteam、VSS等,对这些版本控制系统的调用,只需要配置相应的节点名称即可。本文以SVN版本管理系统为例。在modificationset节中,我们看到唯一的一个子节点:

< 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官方文档。

 

出處http://www.cnblogs.com/shishanyuan/archive/2011/09/15/2177862.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值