CruiseControl持续集成.doc_第1页
CruiseControl持续集成.doc_第2页
CruiseControl持续集成.doc_第3页
CruiseControl持续集成.doc_第4页
CruiseControl持续集成.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CruiseControl持续集成 1. 认识CruiseControlCruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseC、CruiseControl.ruby等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比你的。而在这里,我只介绍该家族的本家CruiseControl.java,即CruiseControl。下图是CruiseControl系统的架构图:CruiseControl系统架构图图中我们可以看到,CruiseControl系统的主体是Build Loop机制,它采用了Source Code轮询机制,对持续集成环境的状态进行定时检测,并根据config.xml配置信息做出相应处理。CruiseControl服务器则使用HTTP和RMI机制将持续集成服务公开到Reporting模块,同时使用XML数据格式对每次集成的数据进行归档。同时CruiseControl还可以集成了RSS、IM、E-MAIL等信息发布机制,最大程度将信息广播到团队的每个成员。CruiseControl系统集成循环的流程图见下图,图中显示了CruiseControl使用轮询机制对版本库进行检测,并对发生变更的代码进行预定操作的流程:CruiseControl系统运行流程图2. CruiseControl的安装CruiseControl的安装有许多方式。例如,如果使用Windows,会发现最简单的方式是下载二进制可执行文件,然后运行它。不用担心,还可以下载源代码。安装之后,CruiseControl预先配置了一个配置文件,轮询CVS(或其它版本控制系统)存储库并执行ANT构建脚本。服务环境不需要安装Web服务器,CruiseControl已经内嵌了Jetty web服务程序。3. CruiseControl的配置当CruiseControl服务器启动时,会自动检测配置信息中的任务信息,并对其进行校验和初始化,之后所有的工作,都是依据该配置信息进行的。CruiseControl的配置使用了其安装目录下的config.xml文件,我们可以通过任一文本编辑器打开该配置文件,编辑各种配置信息。配置信息的定义遵循了标准XML文件格式,同时遵循了ANT自动构建配置信息的规则,因此建立一个普通工程的配置信息并非难事。一个典型的配置文件如下所示: 配置文件有一个cruisecontrol根结点,其下则是代表一个项目的project子节点,再下层是项目的具体配置,在此示例中,存在了listeners、bootstrappers、modificationset、schedule、log几个节点,分别代表了监听器、本地目录、变更目录、构建任务、日志工作。3.1. 创建一个项目 .一个持续集成项目是从project节点开始的,可以对该项目进行的操作都会作为子节点存在与该节点之下。对于每一个project节点,CruiseControl系统都会将其当作一个处理单元,并在最初建立该项目的时候进行初始化操作。name是project节点常用的属性,也是必设且值唯一的属性,该属性的值会在整个CruiseControl系统使用,包括配置文件的$变量值。在一个项目节点中,我们可以定义监听器、本地目录位置、变更轮询目录位置、轮询间隔、任务执行、单元测试、日志记录等多种项目操作,同时CruiseControl系统支持插件扩展功能,这些扩展插件可以直接在一个项目中使用。3.2. 轮询版本控制系统版本库轮询机制是使用modificationset进行配置的。CruiseControl系统内置的轮询模块会根据设定的时间段对版本库进行检测,一旦发现版本库发生变更,就会调用Check OutBuildTestPublish等一系列的操作,对最新的代码进行集成,并运行一系列预先设定的任务。CruiseControl支持十多种版本控制系统,比如CVS、SVN、Starteam、VSS等,对这些版本控制系统的调用,只需要配置相应的节点名称即可。本文以SVN版本管理系统为例。在modificationset节中,我们看到唯一的一个子节点:该节点使用了svn关键字,表示当前工程使用的版本控制系统是SVN,localWorkingCopy属性的值是告诉CruiseControl本地的拷贝目录(拷贝目录概念详见SVN官方文档),其余的工作则由CruiseControl内置的操作模块进行。3.3. 执行构建脚本实质上,执行构建脚本也是CruiseControl的一个可定制任务,但由于自动构建是持续集成的一个重要组成部分,因此在此单独提出。CruiseControl的自动构建是使用ANT工具来进行的,当然我们也可以使用其它的自动构建工具来替代(比如Maven),这些的工具仅仅是体现在一个任务配置语句上,在此,以ANT工具为例。在schedule节,我们同样使用了一个子节点来描述自动构建工作:该节点使用了ant关键字,表示该任务使用了ant来进行自动构建任务,anthome属性则指定了ANT工具的具体位置,buildfile属性则指定了ANT进行自动构建所使用的配置文件Build.xml文件的路径。这样,在CruiseControl决定进行自动构建任务时,会根据设定找到执行所使用到的信息。3.4. 执行单元测试CruiseControl可以自动侦测自动构建配置文件中单元测试的任务,并在代码集成完毕将执行结果反馈到相应的模块。ANT支持xUnit系列的单元测试框架,只需要在配置文件中加入一个target节,即可在自动构建完成之后,进行单元测试工作,有关的详细配置,请参阅ANT官方文档。4. CruiseControl的使用4.1. 启动CruiseControl服务器通过上一节的配置,CruiseControl系统已经可以正常运行并管理项目了。我们可以通过执行其安装目录下的cruisecontrol.bat文件来启动CruiseControl。控制台显示“BuildQueue - BuildQueue started”,则说明CruiseControl服务器已成功启动,如下图:CruiseControl服务器已成功启动在启动服务器之前,我们可以打开cruisecontrol.bat文件并修改倒数第三行相应功能的端口数值来指定服务器占用的系统端口,在本例中我们将-webport指定到了8082端口。4.2. 管理工程服务器启动之后,我们便可以使用http:/IP:8082/来访问CruiseControl的Web服务器(注:将IP替换成CruiseControl服务器所在主机的IP地址)。如下图所示:CruiseControl服务器主界面上图中我们可以看到,当前CruiseControl系统存在5个工程,列表中显示了各个工程的相关信息,包括当前状态、上次失败时间、上次成功时间、构建次数等信息,同时Build按钮可以让CruiseControl立即检测工程状态。点击相应工程名称,则可以进入该工程的详细页面首页,我们在这里以BMSViewer工程为例,点击进入,如下图所示:BMSViewer工程详细信息首页BMSViewer工程详细信息首页清晰明了,主要包括了构建历史信息、最近构建结果、最近构建版本库信息等,该页面可以让我们对当前工程的集成信息一目了然,便于我们对不同的集成结果做出相应的处理。页面上部的导航按钮可以让我们进入不同信息的查看界面,包括测试结果、XML详细日志文件、状态统计等信息。这些导航按钮根据工程设置的不同扩展任务而有所不同。4.3. 工程状态统计图通过工程首页可以清晰的看到当前工程代码级别的集成信息,但对于更加上层的统计图示信息,我们就需要进入Metrics页面,查看其构建衰减图、代码违背图,如图所示:BMSViewer的工程状态统计图图中主要显示了构建衰减图的比例图示和时间动态分布图,便于我们对工程的集成工作进行统一的控制和调配。4.4. 使用publish扩展在CruiseControl的主界面和工程的详细界面,我们都可以看到一个RSS的图标,该图标表示了当前CruiseControl系统提供了RSS新闻聚合功能,对于工程的构建结果,我们便可以使用RSS阅读器来获得,而不必登录Web服务器,如图所示:工程详细页面的RSS按钮下图则为使用Foxmail读取RSS聚合信息的截图:Foxmail读取RSS聚合信息5. 总结持续集成为我们带来诸多好处,大量降低集成时间的同时,更重要的是它可以迅速对我们的工作做出反馈,增加了我们的勇气和信心,保证了项目的质量。持续集成已经不像以前只存在于理论的名词,只要你

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论