CruiseControl是一种持续集成过程的框架,包括了邮件通知,ant和各种源码控制工具的插件。并提供了web接口,用于查看当前和以前的创建的结果。下面将用CC来代表CruiseControl。

首先来安装运行一个CC自带的示例:

1.  CC下载

下载地址:http://cruisecontrol.sourceforge.net/

2.  CC安装成功后,目录结构如下

CC目录下面有一个apache-ant-1.7.0的目录,是CC所集成Ant程序。artifacts里面放了项目生成JAR文件,ect是CC内置的Jetty服务器的配置文件。lib里放了CC引用的一些库。log文件夹不用说,是CC的操作日志,在Project文件夹中,我们可以放入我们要集成的项目。Webapp文件夹是Jetty应用程序的文件夹。

3.  启动CC

双击安装目录下的cruisecontrol.bat文件,就会启动CC。CC用Jetty用为服务器,端口为8080,如果想要修改端口,可以修改etc/jetty.xml文件。

4.  CC默认的配置文件config.xml

在config.xml里,CC会每隔300秒构建一次projects文件夹下的connectfour项目。

<cruisecontrol><project name="connectfour"><listeners><currentbuildstatus listenerfile="logs/${project.name}/status.txt"/></listeners><bootstrappers><antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="clean" /></bootstrappers><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><publishers><onsuccess><artifacts publisherdest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/></onsuccess></publishers></project>
</cruisecontrol>

5.  CC构建结果

我们可以通过http://localhost:8080/cruisecontrol/testresults/connectfour来查看CC的构建结果,如下图。

6.  CC帮助文档

我们可以通过http://localhost:8080/documentation/overview.html来查看CC的详细帮助文档。

接下来我们有必要研究一下CC的框架, 这对我们了解 CC 的设计原理和 CC对持续集成的支持程度很有帮助。通过前面对CC的演示,我们看看CC持续集成的几个要点。

持续集成的要点:

1.  单一代码源:CC 通过相应的插件支持对 CVS,VSS (Visual SourceSafe) ,ClearCase等各类版本控制软件的源码库的访问。

2.  自动化创建脚本:CC通过BuildLoop支持自动化创建,并通过 CC 插件支持 ant,maven 等创建工具。CC对创建的支持实际上是通过一个代理(proxy)来完成的,你可以选择 Ant,Maven这些流行的创建工具。

3.  自测试的代码:间接通过 ant 等自动化创建工具来支持对自测试的调用,但是这取决于项目自身是否提供自测试代码,CC 只是通过 ant 等工具激活对测试代码的调用。

4.  主创建:间接通过 ant 等自动化创建工具支持,要求相应的ant或者maven脚本提供了主创建任务。

5.  检入代码:属于版本控制的范畴,要求开发人员自己检入代码。

CC设计思想是one-size-fits-all,也就是CC是由一个很精小(但是很强大)的核心(Build Loop)以及一些外部插件组成,这给使用者提供了很大的扩展空间,使用者可以根据需要扩展 CC的功能(提供新的插件),而且CC是开源项目,你还可以查看源码并修改CC提供的插件。 CC提供了不同类型的插件:bootstrapper, modificationset, publisher 以及listener等。CC 的配置是围绕这些插件展开的,下面对这些插件进行一个简单的介绍:

1.  bootstrapper:在CC进行创建之前运行,是创建前的准备工作

2.  modificationset:查看源码自上一次Build之后是否被修改过

3.  publisher:用于发布创建的结果,可以通过email的方式通知开发人员。

4.  listener:用于处理一些项目有关的事件(CC2.2之后提供的新的功能)。

CC的配置文件用于build loop,默认文件名为config.xml,该文件的Builder插件部分会引用相应的build文件,如ant的build文件。关于CC配置文件的各配置项参数的详细资料,请参考官方文档: http://cruisecontrol.sourceforge.net/main/configxml.html。这里只讨论配置文件中常用的各元素之间的关系。 主配置文件config.xml的根元素是<cruisecontrol>,该元素很简单,没有什么需要配置的属性。<cruisecontrol>下支持三种元素,如下:

<cruisecontrol><system/><plugin/><project/>
</cruisecontrol> 

在这只讨论<project>元素,其他两个元素在常规的场合可以不用,目前CC支持多个项目(multiproject), 因此可以有多个并行的<project>元素。在<project>元素下面都是跟 CC 插件有关的配置项,结构如下:

<cruisecontrol><project><plugin/><dateformat/><labelincrementer/><listeners/><bootstrappers/><modificationset/><schedule/><log/><publishers/></project>
</cruisecontrol>

下面对其中几个常用的元素的意义和用法进行详细的讲解。

1. <bootstrappers>

<bootstrappers>的子元素就是Bootstrapper插件的配置信息,<bootstrappers>在创建之前运行,这个前面我们已经讲过了,<bootstrappers>下面的每一个子元素都是相互独立的,因此可以同时配置有多个bootstrapper。

CC提供的bootstrapper包括了两个种类,一种用于向其他插件提供项目当前创建的状态,还有一种是从某个源码控制系统更新本地文件,其中最常用到的bootstrapper是<currentbuildstatusbootstrapper>和<svnbootstrappers>如果读者使用Visual SourceSafe或者 ClearCase,那么这里应该分别使用<vssbootstrappers>或<clearcasebootstrappers>)。

前者<currentbuildstatusbootstrapper>指定了状态文件的位置,主要是用来访问项目当前创建的状态,CC的<currentbuildstatuspublisher>会将创建的状态写入这个文件。顺带讲一下<currentbuildstatusftpbootstrapper> ,其作用跟<currentbuildstatusbootstrapper>完全一样,不同的是状态文件保存在一个FTP上。

后者<svnbootstrapper>的作用有点难理解,因为我们每次项目的创建都应该基于最新的代码,因此在创建之前就要获得最新的项目文件,如果你使用的是ant,这个工作是由ant的buildfile来完成的,如果这个buildfile本身在创建开始之前发生了变化,我们是不是应该先更新这个buildfile,然后才通过buildfile来对项目进行创建呢?<svnbootstrapper>就是为从源码控制系统更新buildfile文件而设计的。

<bootstrappers>应用举例:

<bootstrappers><svnbootstrapper localworkingcopy="projects/${project.name}" />
</bootstrappers>

2. <modificationset>

<modificationset>包括了SourceControl 插件的配置信息,用于检查各个源码控制系统中是否发生变化,<schedule>会用到这里面的配置信息,如果检测到变化,会触发创建过程。

<modificationset>的属性 quietperiod(单位为秒)定义了一个时间值。如果CC检查到了变化,会自检查到变化的源码控制系统的最后一次 check in 的时间开始等待,等待的时间由quietperiod决定,等待结束之后才触发创建(build)过程,主要是防止有人在check in的过 程当中就触发创建过程(可能check in只做了一半, 这个时候触发创建显然是不正确的)。

下面给一个svn的例子:

<modificationset quietperiod="30"><svn localworkingcopy="projects/${project.name}"/>
</modificationset>

3. <schedule>

<schedule >指定了创建的时间间隔,新的版本已经支持定义某个具体时间触发创建,这个新的特征是为了满足Nightly build 的需要。

<schedule>定时驱动<modificationset>,如果检测到变化,就执行所指定的builder的任务。 例子:

<schedule interval="300"><ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="make"/>
</schedule> 

4. <log>

<log >指定项目日志保存的地点,主要是合并项目创建过程 junit 测试结果的报表文件(xml)。<log>的用法很简单,通常是指定CC的合并日志的目录就可以了,例如:

<log>  <merge dir="projects/${project.name}/target/test-results"/>
</log> 

5. <publishers>

<publishers>的子元素包括了Publisher插件的配置信息在build loop结束之后将运行 Publishers,无论 build 是成功还是失败,都会运行publisher,发布build的结果。

<publishers>下面最常用的publisher插件是<currentbuildstatuspublisher>, <email>和<artifactspublisher>。

<currentbuildstatuspublisher>的主要作用是用来显示build loop的结果,包括了编译信息,JUnit测试结果信息,以及谁做了变更的信息。该插件和<currentstatusbootstrapper>插件访问的文件是同一个文件。

而<email>主要是用来通知使用者。最常用的用法是根据不同的结果发送到不同的邮件列表,如每次build,无论成功失败都发送给某个邮件列表,还有失败的时候才发送的邮件列表。

<artifactspublisher>用于对创建过程中产生的人工制品进行发布。当CC启动ant build时,ant是作为独立的java进程被调用的,ant的关键文件为build.xml。

参考资料:

http://wenku.baidu.com/view/3adee161caaedd3383c4d359.html

http://wenku.baidu.com/view/4630d4d233d4b14e852468bd.html

CruiseControl入门简介相关推荐

  1. Markdown入门简介

    参考 http://sspai.com/25137 作者: Te_Lee 文章来源: 少数派 Markdown入门简介(使用工具Haroopad) 一.使用的工具----haroopad(http:/ ...

  2. 分布式文件系统—HDFS—入门简介

    原文作者:Zh_Y_G 原文地址:HDFS入门简介 目录 HDFS是什么? 设计目标: 安装配置 HDFS读写流程图解 CheckPoint HDFS是什么? 易于扩展的分布式文件系统 运行在大量普通 ...

  3. Logstash入门简介

    Logstash入门简介 介绍 Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到最喜欢的存储库中(我们的存储库当然是ElasticSearch) ...

  4. android 教程概要,Android精通教程-第一节Android入门简介

    前言 大家好,我是 Vic,今天给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cea ...

  5. 车联网大数据框架_大数据基础:ORM框架入门简介

    作为大数据开发技术者,需要掌握扎实的Java基础,这是不争的事实,所以对于Java开发当中需要掌握的重要框架技术,也需要有相应程度的掌握,比如说ORM框架.今天的大数据基础分享,我们就来具体讲一讲OR ...

  6. 掌握 Ajax,第 1 部分: Ajax 入门简介

    2019独角兽企业重金招聘Python工程师标准>>> 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作原理,构建网站的一种有效方法 Ajax 由 HTM ...

  7. 大数据与Hadoop有什么关系?大数据Hadoop入门简介

    学习着数据科学与大数据技术专业(简称大数据)的我们,对于"大数据"这个词是再熟悉不过了,而每当我们越去了解大数据就越发现有个词也会一直被提及那就是--Hadoop 那Hadoop与 ...

  8. Linux防火墙入门:简介(转)

    Linux防火墙入门:简介(转) 前言 一旦连上网络,就充满各种危机. 许多人基于各式各样的理由,想侵入你的系统,这种人俗称为 cracker.尤有甚者,近年来,cracker 圈里流行一种结合病毒行 ...

  9. QT——开发入门简介

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <嵌入式Linux开发实战> 1.你了解Qt吗? ...

  10. 橙子01-大数据基础入门简介

    橙子01-大数据基础入门简介 大数据的概念 volume variety velocity value 大数据技术 大数据处理的基本流程 云计算的三个关键技术 大数据的应用 相关视频内容可在b站观看大 ...

最新文章

  1. 【北大-阿里巴巴】深度哈希方法综述,23页pdf,A Survey on Deep Hashing Methods
  2. 把windows一个目录mount到Ubuntu下,非root用户没有写权限
  3. java获取当前方法
  4. 1090 Highest Price in Supply Chain (25 分)【难度: 一般 / 知识点: 树的遍历】
  5. list(map(list,zip(*a)))
  6. MySQL之架构与历史(二)
  7. 设计模式---组合模式
  8. 用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...
  9. 小程序开发学习(1)---app.json详解篇
  10. 有生之年必看!千古第一奇书《山海经》到底是怎样的一本书?
  11. 操作系统linux配置php,操作系统--Linux的详细介绍
  12. YAF 接口 2016-10-27
  13. 管理c语言源代码,c语言源代码---------------个人图书管理系统
  14. python selenium文件下载
  15. Apache Pulsar 中文社区先锋奖与年度优秀案例出炉!
  16. gini指数与cart 决策树
  17. 编程随想 关系图_邹军:想成为编程工程师,玩透数控宏程序编程,这里有一个大招分享给你...
  18. C语言-基础入门-学习笔记(13):结构体
  19. python numpy安装失败_Mac下安装Python的numpy库失败的解决方法
  20. 刘军吉林大学计算机学院,刘桂霞-吉林大学计算机科学与技术学院

热门文章

  1. 软件测试的功能点理解
  2. 注册登录后才可以下载的源码_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...
  3. python开发简单计算器下载_python简单计算器
  4. 五点菱形格式MATLAB,五点菱形格式-拉普拉斯第一边值问题-计算实习报告.docx
  5. WORD中的格式控制符号
  6. 华为简单静态路由配置
  7. deepin系统文本编辑器
  8. 中南大学c语言课程设计报告,中南大学 C++课程设计报告.doc
  9. 港口水域电子海图数据快速检索算法及应用
  10. 基于SpringBoot+Vue开发的物流仓储管理系统源码