- 浏览: 261649 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zhagener:
package com.huawei.qyq.impl;imp ...
EasyMock使用说明 -
LetCode:
将String转换成InputStream -
Mr_kimilo:
MyEclipse6.5安装的时候出现问题: JS Test ...
javascript测试工具: JsTestDriver -
jersey109:
我同意楼下的,SQLException和IOException ...
check exception和uncheck exception -
jersey109:
楼主,你不说CODE,我觉得你对RuntimeExceptio ...
check exception和uncheck exception
搭建你的持续集成服务器
CruiseControl是一个不错的持续集成服务器,不过国内社区的普遍反应是:它的配置太麻烦,无从下手。从本篇文章开始,我将逐步介绍 CruiseControl的环境搭建与配置,以及持续集成中的一些实践。我们将从最简单的使用方式(stand-alone)开始,以便您可以快速开始您的持续集成之旅,而不必面对“千奇百怪”的问题。
好!先让我们简单搭建个持续集成服务器再说吧
--------------------------------------------------------------------------------
一、我使用的CruiseControl版本
CruiseControl是一个java开源项目,我将以它最近的一个分支版本来介绍它的使用。CruiseControl最近发布的版本是V2.7.1。这个分支版本就是在V2.7.1基础之上。
这个分支版本包含一个Dashboard,可以方便地看到各项目的构建状态。
这个分支版本当然还支持多个Build Loop,你可以在多个机器上部署独立的Build Loop,从而建立你自己的Build Grid。
二、得到CruiseControl的分支版本
要得到这个分支版本,你可以使用subversion不用任何密码从CruiseControl的Repository中检出。命令如下:
svn checkout https://cruisecontrol.svn.sourceforge.net/svnroot/cruisecontrol/branches/cce/cruisecontrol/
三、构建CruiseControl
0. 你机器上至少要安装有JAVA 1.4,并在环境变量中设置有JAVA_HOME,并把java/bin加入到path中。CruiseControl自带了ANT,所以不用事先安装。
从源代码中构建CruiseControl
如果从源码中构建CruiseControl,要确保你的机器可以访问互联网。因为构建过程中要检查一些license。另外,最好有SVN 客户端软件,因为在构建时,它会用到javahl。
在刚刚checkout出来的CruiseControl目录下,有一个批处理文件,名为release.bat。运行这个批处理文件,你会在 target目录下发现一个压缩文件,名这cruisecontrol-bin-2.7.2-dev.zip。将其解压到一个目录,我们这里解压到C盘根目录下。解压后,目录结构如下:
2. 直接使用已构建完成的CruiseControl
如果你不想做这一步,也可以在binaryrelease目录下发现解压后的文件,把它们拷贝到相应的目录下也可以。
四、运行CruiseControl
CruiseControl可以运行在多种应用服务器中,当然,它自己也捆绑了一个开源应用服务器,那就是Jetty 6。为了尽快建立我们的环境,我们这里暂时使用它自己捆绑的Jetty,快速开始我们的持续集成之旅。
直接运行CruiseControl目录下的CruiseControl.bat,它会自行启动Jetty6,当从Console中看到它启动完毕后,你就可以在浏览器中访问http://localhost:8080/dashboard,此时你会看到一个名为connectFour的示例项目在 Dashboard上显示了。
(如果你足够快的话,你会发现Dashboard 上的小方块是从灰色变成深绿色的。为什么呢?我们以后再说。)
“绿色”表示该项目构建通过。如果要是有多个项目的话,应该看到多个小方块。
点击“Builds” Tab页,就到了 Builds 页。这一页会以列表的方式显示所有的项目。当前只有一个项目,所以在列表中只有一行,如下图所示:
在该页面上点击某个项目时,会打开Build Detail页,显示该项目最近一次Build的信息。页面右侧是该项目所有历史构建信息。你会发现,这时connectFour项目有两个构建历史版本,一个是刚刚构建完成的,另一个是两年前的构建。这些信息是来自于CruiseControl对该项目的日志文件。此时,点击这两个构建结果中的任何一个,都会打开该次构建的Build Detail页面,显示相关的构建历史信息。如下图所示:
了解CuiseControl的配置文件
我们已经看到CruiseControl开始工作了。接下来我们先了解一个它的配置文件,然后再加入你的项目。
CruiseControl的配置文件的确了比较复杂,一方面是因为:它太灵活,太想完成你想达到的任何效果了。另一方面就是:它在文档化方面的确很落后。你只能在用户组中找答案。(不过,这也是学习的一个途径。如果你了解开源的话,你就会习惯于在用户组中找答案啦。)
--------------------------------------------------------------------------------
了解配置文件之前,让我们先定义一下我们可能会用到的术语。
工作目录(也就是CruiseControl的工作目录):是指启动CruiseControl的脚本目录。在Stand-alone情况下,就是文件cruisecontrol.bat所在的目录。如果你把它部署到了应用服务器中,那一般就指bin目录了。
2. Log 目录:就是CruiseControl存储所有构建项目日志信息的目录,默认值为工作目录下名为logs目录。
3. Projects目录:就是CruiseControl存储所有构建项目源代码的目录,默认值为工作目录下名为projects目录。
一、配置文件及其正确位置
配置文件包括两个,一个名为config.xml,另一个名为dashboard-config.xml。默认情况下,这两个文件和cruisecontrol.bat在同一下目录下,即工作目录。
如果在配置文件中,任何路径前面如果没有“/”的话,那就是相对于工作目录的。
另外,CruiseControl是可以改变他们的位置的,但建议在没有深入了解CruiseControl时,不要试图改变它们,因为我们的目标是让CruiseControl在最短的时间里为你创建价值。
二、Config.xml 文件
<cruisecontrol>
<project name="connectfour"> --这里的name应该和你在projects目录下的项目名完全一致。
<listeners> --用于监听项目状态的变化(指building,passed等)
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/> --这里的${project.name}
</listeners> 是指“connectfour”
<bootstrappers> --用于CruiseControl从Repository更新代码
<svnbootstrapper localWorkingCopy="projects/${project.name}" />
</bootstrappers>
<modificationset quietperiod="30"> --用于监听在quietperiod秒内,Repository是否变化
<svn LocalWorkingCopy="projects/${project.name}"/>
</modificationset>
<schedule interval="300"> --用于每隔interval秒,CruiseControl去检查并计划一次构建
<ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
</schedule>
<log> --用于得到并保存log文件。默认情况下,将放在projects/${project.name}的目录下
<merge dir="projects/${project.name}/target/test-results"/> --用于将Build中生成的结果合并
</log> 到log文件中
<publishers> --用于将构建的结果(如二进制文件)发布到指定的位置
<onsuccess> --决定在构建成功的情况下,发布哪些内容
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
</onsuccess>
</publishers>
</project>
</cruisecontrol>
三、dashboard-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
/********************************************************************************
这里省略了一些声明 :)
********************************************************************************/
-->
<dashboard>
<buildloop
logsdir="" --这里指定logs目录,一定要与config.xml文件中一致,否则你会有麻烦。
如果为空串,则默认为工作目录下的logs目录。
artifactsdir="" /> --这里指定artifacts目录,一定要与config.xml文件中一致
如果为空串,则默认为工作目录下的artifacts目录。
<features allowforcebuild=""/> --是否可以在Dashboard上强制构建(force build)
<trackingtool projectname="" baseurl="" keywords=""/> --这是用于与Mingle的集成
<subtabs> --在这里,你可以自己扩展你自己的subtab页,不过要先实现一些接口。
<subtab class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget" />
</subtabs>
</dashboard>
四、配置文件中的注意事项
1、如果logs、artifacts和projects目录不存在,在你运行CruiseControl之前,要手工建立它们。
2、确保两个配置文件中的logs/artifacts目录指向同一个目录。因为CruiseControl core会向其中写数据,而Dashboard会从中读数据。
五、小贴士
在Config.xml文件中,有几个元素的概念要先澄清一下(只针对当前示例,严格定义请参见CruiseControl的文档)。
<listeners> 用于监听状态变化,如waiting for build,queued,building。一般不用改变。
<bootstrappers>用于检出代码,CruiseControl有很多种bootstrapper,示例中使用的是SVN。localWorkingCopy属性是指你把代码检出到安装CruiseControl机器的哪个文件目录。
<modificationset>用于监听Repository的变化频率,如果CruiseControl发现代码有变化,而且在quietperiod秒内没有其它用户检入代码(用于保证被构建的版本完整性),CruiseControl才会检出代码。
<schedule >用于指定CruiseControl去检查Repository的时间间隔。并指定使用哪个构建文件。示例中使用的是ant脚本,构建文件是被检出项目的根目录下的build.xml(即在Repository中)。
<log>用于指定CruiseControl把日志放在哪里,把哪些构建结果放在日志中。如果没有指定任何属性,默认为logs目录下的${project.name}目录。
<publishers> 用于在构建结束后,发布哪些消息和文件。CruiseControl有很多插件可以做各种各样的Publishing。例如,在构建成功后,通过http调用指定的页面,也可以给指定的人发邮件。在失败时,播放音乐,通知team。
向CruiseControl中加入一个新项目
现在我们已经在自己的机器上建立了一个持续集成服务器,并初步了解它的配置文件。
接着我们就要把自己的项目加到其中。 做为一个入门示例,我们先要陈述一下假设条件,以便我们快速推进我们的部署过程。
--------------------------------------------------------------------------------
一、 准备工作(请确认一下)
1、你的项目代码放在Google Code上面(Google Code用的是SVN ),你的项目名称是yourprojectname,项目的源文件就放在trunk目录下。那么,其svn update的链接如下:http://yourprojectname.googlecode.com/svn/trunk/。CruiseControl只会更新文件,不会修改源代码,所以匿名检出就可以了。
2、你的项目是一个JAVA项目,用ANT进行构建,构建文件名为build.xml,放在项目的根目录上,默认的ant task名为all。确保文件中其中所有路径都是相对于项目根目录的,将其Copy到任何目录下,ant all都可以正确运行。(我们的主要目的是建立环境,使其在今后的开发工作中可以发挥作用,而不是要发现我们构建脚本中错误。)
3、你的CruiseControl工作目录是C:/CruiseControl,方便起见,我们以下将用${CC_HOME}代替。
4、你的logs目录是${CC_HOME}/logs。如果你没有独自改动配置的话,它的位置就如前所述。
5、你的projects目录是${CC_HOME}/projects。如果你没有独自改动配置的话,它的位置就如前所述。
6、你的artifacts目录是${CC_HOME}/artifacts。如果你没有独自改动配置的话,它的位置就如前所述。
二、加入项目
1、手工检出文件:
确保将你的项目代码检出到${CC_HOME}/projects/yourprojectname目录下,即在该目录就是你项目的根目录,可以找到名为build.xml文件。
2、修改配置文件(添加你的项目)
将下面的代码段加入到config.xml文件中,位于<CruiseControl>节点下。
<project name="yourprojectname"> --这里一定要与你的projects目录下的项目名相同
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<bootstrappers>
<svnbootstrapper localWorkingCopy="projects/${project.name}" />
</bootstrappers>
<modificationset quietperiod="30">
<svn LocalWorkingCopy="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"/>
<!-- 在上面一句,一定要确保构建失败后可以找到这个dir,如果没有,删除这个元素好了-->
</log>
<publishers>
<onsuccess>
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
<!-- 在上面一句,一定要确保你打包出来的文件名是yourprojectname.jar -->
</onsuccess>
</publishers>
</project>
最终的文件如下:
<cruisecontrol>
<project name="connectfour">
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<bootstrappers>
<svnbootstrapper localWorkingCopy="projects/${project.name}" />
</bootstrappers>
<modificationset quietperiod="30">
<svn LocalWorkingCopy="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>
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
</onsuccess>
</publishers>
</project>
<project name="yourprojectname">
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
</listeners>
<bootstrappers>
<svnbootstrapper localWorkingCopy="projects/${project.name}" />
</bootstrappers>
<modificationset quietperiod="30">
<svn LocalWorkingCopy="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>
<artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
</onsuccess>
</publishers>
</project>
</cruisecontrol>
三、看一下结果
(1) CruiseControl会自动更新这个配置文件,加载时间一般是在任何一个项目需要检查是否有更新时。
(2) 你会看到这个项目在Dashboard上首先是灰色的方块,因为这个项目还从来没有在CruiseControl上构建过,没有任何历史信息,我们称该项目为"inactive"。
(3) 过一会儿,你会看到一个环形动态图标,表示它在构建中(执行build.xml脚本)。
(4) 当环形动态图标消失时,你会看到它变成红色(如果构建失败的话)或绿色(如果构建成功的话)。
我新加的项目名是vcdstore,现在我的dashboard上有两个项目了。
小贴士:
(1) 目前CruiseControl还不支持首次自动检出代码,所以你要先把项目代码手工检出到本地。
(2) 如果你的SVN使用https方式更新代码,你一定要在命令行方式检出代码,并选择永久接受证书。
(3) CruiseControl这个分支版本不支持在UI上增加项目。
(4) 如果你在config.xml文件中把你的项目删除,却不删除它的日志的话,你在Dashboard上还是可以看到这个项目,此时它被标记为"Discontinued",表示你可以看到它的历史信息,但CruiseControl不会再构建它了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/axzywan/archive/2008/11/17/3320576.aspx
发表评论
-
基于teamcity的持续集成实践(安装)
2009-10-19 11:21 1839准备的基础环境是 1。操作系统hp-unix,teamcit ... -
持续集成工具的选择
2009-10-19 11:04 3189持续集成(continuous integra ... -
CruiseControl 的 108 种调度模式
2009-09-24 16:15 1537/*************************/ &q ... -
一些关于cruise control的笔记
2009-09-24 16:11 938cruiseControl learning 最近 ... -
cruisecontrol 完美实现svn c++ cppunit的持续管理
2009-09-24 15:51 1664经过三天的配置,终于把cruisecontrol 配置好了,其 ... -
CruiseControl持续集成
2009-09-24 15:49 15481. 认识CruiseControl ... -
自动化构建实践之CruiseControl
2009-09-24 15:46 1651我们使用 ClearCase 作为配置管理工具, ANT 作为 ... -
用CruiseControl监视你的项目
2009-09-24 15:36 1779官方网站:http://cruisecontrol.sourc ...
相关推荐
SVN+cruisecontrol 搭建持续集成开发环境 持续集成开发环境是软件开发过程中的一种实践,它能够自动地构建、测试和部署软件,提高开发效率和软件质量。SVN(Subversion)是一种版本控制系统,能够帮助开发团队管理...
4. **使用CruiseControl搭建持续集成环境**:Elvis_Chen的技术博客文章可能提供了更深入的实践指导,讲解了如何将CruiseControl整合到实际的开发环境中,包括项目导入、构建脚本编写以及测试结果的展示。 5. **...
搭建CruiseControl+SVN+Maven+Tomcat持续集成环境,主要是为了实现代码的自动构建、测试和部署,从而提高开发效率,减少错误。整个过程涉及到多个工具的安装、配置和集成,确保每个环节都能正确工作,并通过权限管理...
自适应巡航控制(Adaptive Cruise Control, 简称ACC)是一种高级驾驶辅助系统,它在传统的巡航控制基础上增加了车辆自主调节车速的能力,以保持与前车的安全距离。MATLAB是一款广泛应用于数学计算、数据分析和算法开发...
本文将介绍如何利用 Maven2、Subversion 和 CruiseControl 搭建一个持续集成环境。 首先,我们需要创建一个 Maven2 项目。这通常包括定义项目的结构、编写 pom.xml 文件以声明项目依赖、构建目标等。完成项目创建后...
我需要搭建一个C++项目的持续集成的环境 (windows的程序),所以这几天学习了一下CruiseControl.Net(以下简称CCNet),把整个过程跟大家分享一下。如果你没有用过CCNet,跟着我实战一把,相信会领你入门的。本文准备...
自动巡航控制系统(Adaptive Cruise Control,简称ACC)是现代汽车技术中的一项重要功能,它允许车辆在驾驶员设定的速度范围内自动调整行驶速度,以保持与前方车辆的安全距离。这项技术是自动驾驶系统的一个重要组成...
【自适应巡航控制系统(Adaptive Cruise Control,ACC)】是一种高级辅助驾驶系统,它允许车辆在设定的速度下行驶,同时能自动调整车速以保持与前车的安全距离。MATLAB和Simulink是实现ACC系统建模和仿真的强大工具...
在典型的持续集成环境中,开发人员使用版本控制系统提交代码,而CI服务器如CruiseControl会监听这些提交。当检测到代码变更后,服务器会自动执行一系列步骤,包括: - 检出最新代码 - 编译代码 - 运行单元测试 - ...
- **CruiseControl执行脚本**:CruiseControl是一个持续集成服务器,用于自动化构建过程。 - **CruiseControl项目配置文件**:用于定义构建规则、触发条件等。 - **CruiseControl配置文件示例**:展示具体的配置...
文档内容分为两大部分,第一部分介绍使用VMware+CruiseControl搭建自动编译环境,主要面向系统管理员;第二部分则阐述自动编译的使用方法,适合质量保证和项目组人员学习。 **第一部分:VMware+CruiseControl的搭建...
该方法使用CruiseControl工具来设置测试触发条件,运行测试脚本,实现测试参数传递、流程控制和结果自动输出。最后,文章讨论了自动化测试的优点和缺点,总结了自动化测试在软件开发中的重要性。 Linux平台下CT机架...
Adaptive Cruise Control (ACC) 是一种先进的驾驶辅助系统,它允许车辆在设定的速度下自动跟随前方的车辆,保持安全的距离。以下是对ACC搭建步骤的详细解释: 1. **COMPILATION SHEET**: 在开始ACC系统的搭建时,...
标题中的“基于prescan和matlab的ACC视频和配套模型”揭示了本次知识分享的核心,主要涉及两个技术工具——Prescan和MATLAB,以及它们在自适应巡航控制(Adaptive Cruise Control, 简称ACC)系统建模与仿真中的应用。...
通过与测试框架集成,CruiseControl 能够在代码更改后立即执行测试,快速反馈结果。 ##### 5.7 Clover Clover 是一个代码覆盖率工具,用于测量测试覆盖了多少代码。在接口测试中,Clover 可以帮助团队了解测试用例...