SVN+CruiseControl+ANT环境搭建和配置介绍

开发 开发工具
今天我们要介绍的是使用CruiseControl+SVN+ANT实现持续集成之环境搭建和配置介绍。希望对大家有所帮助。

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

  2.2. build.xml

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

【编辑推荐】

  1. 专家在线答疑:如何进行SVN服务器端与Eclipse中的SVN客户端配置?
  2. SVN1.6服务端和客户端安装配置之专家指导
  3. SVN项目---目录布局详解
  4. 多项目中SVN权限管理精辟解析
  5. 两个简单操作介绍TortoiseSVN项目
责任编辑:彭凡 来源: 博客园
相关推荐

2011-09-15 09:21:46

持续集成

2011-09-20 09:05:08

SVN

2011-11-25 09:09:09

JavaTomcatant

2016-08-12 13:22:01

React Nativ环境搭建创建项目

2011-06-30 13:31:35

MongoDB

2010-05-31 16:42:42

SVN权限配置

2010-09-29 09:28:59

J2ME开发环境

2010-05-22 10:38:15

Symbian开发

2017-06-23 11:17:24

MySQL搭建配置

2009-07-03 16:21:43

2010-02-06 13:18:51

CentOS LAMP

2010-05-31 11:08:01

Mysclipse6.

2020-09-30 08:54:16

鸿蒙

2010-03-04 11:01:06

Python开发环境

2009-07-01 10:12:40

JSP环境配置JSP引擎

2011-03-21 11:33:09

LAMPApache

2011-03-21 11:43:45

LAMPPHP

2011-07-13 09:59:27

2010-06-09 17:07:56

Nagios pnp

2010-05-27 18:49:38

SVN入门
点赞
收藏

51CTO技术栈公众号