- 浏览: 500144 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
michao:
大哥,还有aperture.exe吗? 发我一份,找不到呀,m ...
使用aperture框架让AS3与C++通信,执行本地代码 -
Aaron-Joe-William:
文件被删除了。下不了。
SQLite 数据库加密的一种解决方案 -
hanmiao:
樓主的文章不就是來自IBM Developers里的http: ...
mina 入门 -
howesen:
断包与粘包问题,需要处理下就好了
mina接收数据不全(2) -
sniciq:
git clone --recursive git://git ...
ESB学习笔记(Spring Integration实战)
自动化构建实践之CruiseControl
1.1 准备工作
1. 安装相关的软件:
a) JDK :这里我们使用的是 jdk1.5
b) ClearCase :这里我们采用 NativeClient 方式,可以是静态视图也可以是动态视图。通过 CCRC 创建的视图由于不能执行命令行方式,不能通过执行 cleartool update 获取到资源的最新成果, CruiseControl 不能使用 CCRC 方式来进行使用。
c) 安装 CruiseControl :执行 CruiseControl-2.7.1-RC1.exe 或解压 cruisecontrol-bin-2.7.1-RC1.zip 都可以
d) 复制 docs\main 下的 helloworld 目录到相应的 ClearCase 的 vob 下,保留 src 目录和 clearcase-build.xml 文件,修改文件名 clearcase-build.xml 为 build.xml ,其他的全部删除。然后,把这些保留的文件提交到 ClearCase 配置库。注意:这些文件的原始文件还保留在 docs\main 下,这样以后需要的话还可以使用。
2. 配置环境变量
a) JAVA_HOME
1.2 CruiseControl 目录结构
1) cruisecontrol.bat :启动文件
2) config.xml :配置文件(默认的配置文件名称)
3) apache-ant-1.6.5 : CruiseControl 自带的 ant 环境, CruiseControl 要借助 ant 完成一些指定的任务
4) docs :包括 CruiseControl 的使用文档和一个 helloworld 的使用范例
5) lib :运行需要的 jar 包
6) logs :日志目录,报告中的项目日志存放位置,可以通过 \webapps\cruisecontrol\WEB-INF\web.xml 文件修改。修改其中的 logDir 和 currentBuildStatusFile 参数。 logDir 是指定 CruiseControl 执行后,为报告生成的日志目录位置,而第二个参数是指定日志状态的文件。默认的 logDir 是 logs ,也就是 cruisecontrl 目录下的 logs , currentBuildStatusFile 是 status.txt ,这里我们不作修改。在 config.xml 中配置 log 路径到 logs 下即可
7) project :一个自带的项目 connectfour ,包含了 src 、 lib 、 test 和 build.xml 。
8) webapps : web 应用目录。 CruiseControl 内置了 Jetty 作为 web container ,可以通过 web 方式查看构建结果和手动创建项目
1.3 启动 CruiseControl
1) 启动 CruiseControl
CruiseControl 安装完毕后,在命令行方式,进入 cruisecontrol.bat 所在目录,执行 cruisecontrol.bat 。
2) 控制台输出信息
控制台会输出一大堆的信息,还有一些错误。不要紧,这是由于 CruiseControl 默认的配置是使用 svn 导致的。后面会对此做修改。执行完毕后,程序不会退出,处于等待状态。
如果执行时报端口占用,如:
org.mortbay.util.MultiException[java.net.BindException: Address already in use: JVM_Bind]
可以通过修改 cruisecontrol.bat 文件来修改端口
set EXEC=%JAVA_PATH% %CC_OPTS% -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder -jar "%LAUNCHER%" %* -jmxport 8001 -webport 8089 -rmiport 1099
3) 日志
这时会发现 cruisecontrol 多了一个日志文件 cruisecontrol.log ,文件信息与控制台的信息是一样的。
4) 以 web 方式查看
打开浏览器,访问 http://localhost:8089/ 会看到 CruiseControl 的界面,这里的端口要和 cruisecontrol.bat 中的端口一致。
关闭控制台或 Ctrl+C 退出 CruiseControl ,然后我们进行下一步配置。
1.4 配置
1.4.1 配置 CruiseControl
修改 config.xml ,该文件位于 CruiseControl 安装目录下。
<cruisecontrol>
<project name="HelloWorld">
<listeners>
<currentbuildstatuslistener file="logs\${project.name}\status.txt"/>
</listeners>
<bootstrappers>
<currentbuildstatusbootstrapper file="currentbuild.txt" />
</bootstrappers>
<modificationset quietperiod="30">
<ucm stream="HelloWorld_Int" viewpath="M:\ccadm_HelloWorld_int\HelloWorld_vob" contributors="true"/>
</modificationset>
<schedule interval="30" >
<ant antscript="apache-ant-1.6.5\bin\ant.bat" buildfile="F:\ForCruisecontrol\build-HelloWorld.xml" target="cleanbuild" multiple="5" />
<ant antscript="apache-ant-1.6.5\bin\ant.bat" buildfile="F:\ForCruisecontrol\build-HelloWorld.xml" target="masterbuild" multiple="1" />
</schedule>
<log dir="logs\${project.name}">
<merge dir="F:\ForCruisecontrol\HelloWorld\test-results"/>
</log>
<publishers>
<currentbuildstatuspublisher file="currentbuild.txt" />
<htmlemail mailhost="mail.longtop.com" returnaddress="cruisecontrol" skipusers="true" subjectprefix="[HelloWorld Build Report]" buildresultsurl="http://172.16.114.205:8080/buildresults/HelloWorld">
<!--failure address="ssli@longtop.com" />
<success address="ssli@longtop.com" /-->
<!--map alias="ccadm" address="ssli@longtop.com"/-->
<propertiesmapper file="emailmap.txt"/>
</htmlemail>
<clearcasebaselinepublisher viewtag = "ccadm_HelloWorld_int"
baselineprefix = "HelloWorld_"
full = "true"
component = "HelloWorld_src@\testLocal_pvob"/>
<onsuccess>
<artifactspublisher dir="F:\ForCruisecontrol\HelloWorld\dist"
dest="artifacts\${project.name}\"/>
</onsuccess>
</publishers>
</project>
</cruisecontrol>
\docs\main\configxml.html 是 config.xml 的帮助内容,我们可以从这里面找到所有的配置。其中,部分属性说明如下:
<cruisecontrol>
<cruisecontrol> 是配置文件的根元素,它可以拥有一个或多个 <project> 子元素。本例中它拥有一个项目名为 HelloWorld 。
<project>
<project> 元素是一个完整的 build 任务,包括检查配置管理库是否有新的修改,构建项目并发布项目构建结果。它告诉 CruiseControl 构建什么,何时构建,如何构建以及如何发布构建报告。它有一个必需的属性 name 。
<project> 元素的子元素包括 <listeners> , <bootstrappers> , <modificationset> , <schedule> , <log> , <publishers> , <dateformat> 和 <plugin> ,其中 <modificationset> 和 <schedule> 是必需的元素。
<listeners>
<listeners> 的子元素 <currentbuildstatuslistener> 记录了当前 build 的状态和最近一次状态改变的时间。
<bootstrappers>
<bootstrappers>
元素是启动任务
Plugin
的容器,用于定义构建任务启动前需要执行的任务。常用的
Plugin
包括:
1. <currentbuildstatusbootstrapper>
,定义一个
CruiseControl
的构建状态信息文件。
CruiseControl
的
Build Result JSP
从该文件读取状态信息并显示在页面上。属性
file
用于指定构建状态文件目录和文件名。
2. <clearcasebootstrapper>
,用于在项目构建开始前从
ClearCase
服务器上
update
指定的文件。通常可以用于更新项目的构建脚本。属性
viewpath
指定本地工作目录,属性
file
指定需要
update
的文件名,相对于属性
viewpath
指定的目录。
<modificationset>
<modificationset>
元素用于告诉
CruiseControl
是否需要构建项目,即配置管理库的代码是否存在更新。监控本地工作目录,如果在下面的目录中发生变化则自动执行下面的构建,没有变化则不再执行下面的构建工作。它拥有三个可选属性
requiremodification
、
quietperiod
和
ignoreFiles
。
属性
requiremodification
告诉
CruiseControl
,在配置管理库没有代码更新的情况下,是否需要构建。缺省为
"true"
,即没有更新则无须进行构建。
属性 quietperiod 告诉 CruiseControl ,最新一次代码提交后 CruiseControl 需要等待的时间(秒)。用于防止 CruiseControl 在开发人员提交代码时进行项目构建。缺省为 "60" 秒。
在本例中使用 <ucm> 来检查和工作目录相关的代码在 ClearCase 配置管理库是否有更新。 <ucm> 使用 ”cleartool lshistory ” 命令来检查最新更新工作目录和当前代码库的差异。其中 -since 参数后面的时间保存在 <currentbuildstatuslistener> 的文件中,一般为 status.txt 。 <viewpath> 要加上 vob 路径,否则会报 cleartool: Error: Not an object in a vob: "." 错误
<schedule>
到目前为止,以上的配置文件内容已经定义了 CruiseControl 构建什么以及何时构建。 <schedule> 元素告诉 CruiseControl 每隔多长时间(秒)启动一次构建任务。它有一个可选的属性 interval ,用于定义以秒为单位的时间间隔。缺省为 "300" 秒。
在本例中,属性 interval 设为 "30" ,这意味着 CruiseControl 每隔 30 秒使用 <modificationset> 定义的任务检查一次代码库。如果设置了定时执行,则 interval 的设置就会忽略。定时执行可以在 <ant> 子元素的 time 设置,格式是 HHmm ,如果 multiple 设置了就不能设置 time 。
<ant> 子元素告诉 CruiseControl 何时或每隔几次运行 Ant 来构建项目。
在本例中, antscript 属性设定 Ant 的路径, buildfile 属性设定构建脚本 build file 的目录。
属性 multiple 告诉 CruiseControl 每隔几次执行一次本 <ant> 任务。
除此之外,还可以指定 Ant 的运行时间( time 属性), build file 的 target ( target 属性,不设定则为 build file 的缺省 target )。
<log>
<log> 元素设定 CruiseControl 日志文件的存放目录,并通过 <merge> 子元素指定合并什么样的 XML 文件(构建过程中产生的文件)到 CruiseControl 的日志文件中。
<merge> 子元素的 pattern 属性定义匹配的文件名模式,缺省为 ".xml" ; dir 属性用于指定一个目录,这个目录下所有匹配模式的文件将合并到 CruiseControl 的日志文件中。这个例子合并 junit 产生的日志文件,我们就能在 build 的最终结果看到这些全面的日志
<publishers>
<publishers> 元素用于指定构建任务结束后, CruiseControl 如何发布项目构建结果。项目构建结果的发布方式可以是 Email ,网页,复制代码库到指定的目录,或是发布代码库到 FTP 服务器。
在本例中,用到
<currentbuildstatuspublisher>
,
<htmlemail>
,
<clearcasebaselinepublisher>
和
<artifactspublisher>
这四个
publisher
。
<currentbuildstatuspublisher>
把下次构建的时间写入指定文件,文件名由
file
属性设定。
<htmlemail> 把构建结果以 HTML 格式通过 Email 发布。缺省情况下, HTML 格式的 Emai 和 CruiseControl Web 应用的构建结果 JSP 页面相同。
<clearcasebaselinepublisher> 在指定得视图上建立 UCM 基线。
<artifactspublisher> 元素把项目构建产品复制到指定的目录, dir 属性定义源目录, dest 定义目标目录的父目录(实际目录还要加上构建时的时间戳,如:父目录 /19890604203828 )。
其中 <onsuccess> 表示当 build 成功时执行 publish ,如果是失败用 <onfailure>
更多的配置项请参见 \docs\main\configxml.html 是 config.xml 的帮助内容,我们可以从这里面找到所有的配置。
1.4.2 配置 ant 的构建文件 build.xml
修改 build.xml ,该文件位于 helloworld 目录下。
1) 注释掉 build.compiler 和 build.compiler.emacs
<!--property name="build.compiler" value="jikes"/-->
<!--property name="build.compiler.emacs" value="true"/-->
2) 修改 source.dir 为源码路径
<property name="source.dir" value="M:\lisushi_view\2007_demo_vob\demo_SRC\helloWorld\src"/>
3) 修改 clearcase.viewpath 为 view 路径
<property name="clearcase.viewpath" value="M:\lisushi_view"/>
4) 修改 ccdir 为 CruiseControl 安装路径
<property name="ccdir" value="C:\cruisecontrol"/>
发表评论
-
创业公司CEO每天应该做的13件事
2011-04-11 09:52 975转载:导读:本文由Ja ... -
UML之活动图
2011-03-31 15:34 999做软件三年了,才开始重视UML,杯具,不过还不算晚,现在开始规 ... -
程序员从初级到中级10个秘诀
2010-10-15 14:34 958Justin James曾发表过一 ... -
关于云计算的五种误解
2010-08-31 09:53 591关于云计算的五种误解 2010-08-27 08:4 ... -
软件重构
2010-05-21 20:25 894重构 (Refactoring)就 ... -
[OPEN]几个国外的开源社区
2009-12-27 20:04 1376sourceforge http://www.sourcefo ... -
马云:聘请员工要找最合适的而不是最天才的
2009-11-27 14:45 8482001年的时候,我犯了一 ... -
cruisecontrol 完美实现svn c++ cppunit的持续管理
2009-08-17 18:34 3196做PM真的不容易! 经过三天的配置,终于把c ... -
ANT-build.xml文件详解
2009-08-11 15:05 1060Ant的概念 可能有些读者并不连接什么是Ant以及入可使 ... -
一统天下,使用ANT构建VS.NET工程
2009-08-11 11:37 1564对VS.NET工程进行自动构建工作使用什么?也许大家会异口同声 ... -
CruiseControl持续集成
2009-08-11 11:30 10471. 认识CruiseContr ... -
一个真实的项目经历,很多东西大家可以借鉴下
2009-08-10 10:12 909【背景介绍】 Z公司接 ...
相关推荐
持续集成实践之CruiseControl
主题:持续集成及CruiseControl技术交流 在提升软件质量、降低研发风险、拒绝浪费方面,处于敏捷实践领域的持续集成(Continuous Integration,CI)起到重要作用。持续集成能够解决研发工作中的80%任务(日常),...
基于 CruiseControl 和 Rational 统一变更管理实现的软件开发中的自动化持续构建.mht
cruisecontrol配置定时运行
CruiseControl.NET 是 .NET...CruiseControl是一个针对持续构建程序(项目持续集成)的框架,它包括一个email通知的插件,Ant和各种各样的CVS工具。CruiseControl提供了一个Web接口, 可随时查看当前的编译状况和历史状况。
CruiseControl简介及使用举例
cruisecontrol配置文件,很实用
cruisecontrol简介
CruiseControl-2.8.4.exe
cruisecontrol+maven2配置做持续集成
[CruiseControl]binary安装和启动
cruisecontrol、ant、svn持续集成 己两个多星期以来对持续集成的概念和应用有了一些了解。下面主要对自己配置持续集成的环境进行总结。(看上去简单,但是对我开始对持续集成都没什么了解的人来说确实费了不少周折)
使用CruiseControl构建持续集成服务器.pdf
CruiseControl.NET-1.4.4-Setup.exe
CruiseControl.NET-CCTray-1.8.4.0-Setup.exe
CruiseControl笔记,详细介绍了CruiseControl。net的配置,希望对大家有所帮助
NULL 博文链接:https://eric-gao.iteye.com/blog/899599
持续集成配置 持续集成环境:Maven2 + Subversion + CruiseControl CC原理 以及一些样例
With the emergence of vehicle-to-vehicle communi-cation technology, cooperative adaptive cruise control (CACC) cars can be expected in the near future. In this paper, novel criteria for string ...
CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、...