CruiseControl服务器安装配置

阅读更多

1. 认识CruiseControl

CruiseControl CI 服务器的老者,诞生已是多年,在许多方面, CruiseControl 服务器已经成为持续集成实践的同义词。而现在, CruiseControl 已发展成为一个家族式系统,包括 CruiseControl.java CruiseControl.net CruiseControl.ruby 等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比你的。而在这里,我只介绍该家族的本家 CruiseControl.java ,即 CruiseControl
下图是 CruiseControl 系统的架构图:
CruiseControl服务器安装配置_第1张图片
CruiseControl系统架构图
图中我们可以看到, CruiseControl 系统的主体是 Build Loop 机制,它采用了 Source Code 轮询机制,对持续集成环境的状态进行定时检测,并根据 config.xml 配置信息做出相应处理。 CruiseControl 服务器则使用 HTTP RMI 机制将持续集成服务公开到 Reporting 模块,同时使用 XML 数据格式对每次集成的数据进行归档。同时 CruiseControl 还可以集成了 RSS IM E-MAIL 等信息发布机制,最大程度将信息广播到团队的每个成员。
CruiseControl 系统集成循环的流程图见下图,图中显示了 CruiseControl 使用轮询机制对版本库进行检测,并对发生变更的代码进行预定操作的流程:
CruiseControl服务器安装配置_第2张图片
CruiseControl系统运行流程图
2. CruiseControl的安装
CruiseControl 的安装有许多方式。例如,如果使用 Windows ,会发现最简单的方式是下载二进制可执行文件,当然下载最新版本,然后运行它。要是高兴想研究,还可以下载源代码。
安装之后, CruiseControl 预先配置了一个配置文件,轮询 SVN (或其它版本控制系统)存储库并执行 ANT 构建脚本。服务环境不需要安装 Web 服务器, CruiseControl 已经内嵌了 Jetty web 服务程序。
3. CruiseControl的配置
CruiseControl 服务器启动时,会自动检测配置信息中的任务信息,并对其进行校验和初始化,之后所有的工作,都是依据该配置信息进行的。
CruiseControl 的配置使用了其安装目录下的 config.xml 文件,我们可以通过任一文本编辑器打开该配置文件,编辑各种配置信息。配置信息的定义遵循了标准 XML 文件格式,同时遵循了 ANT 自动构建配置信息的规则,因此建立一个普通工程的配置信息并非难事。
config.xml的节点配置说明如下:

xmlversion='1.0'encoding='gb2312' ?>
2 < cruisecontrol >
3 < project name ="projectName" >
4
5
6 < listeners >
7
8 < currentbuildstatuslistener file ="logs/${project.name}/status.txt" />
9 listeners >
10
11
12 < bootstrappers >
13
14 < svnbootstrapper localWorkingCopy ="projects/${project.name}" />
15 bootstrappers >
16
17
18
19 < modificationset quietperiod ="300" >
20 < svn localWorkingCopy ="projects/${project.name}" />
21 modificationset >
22
23
24 < schedule interval ="60" >
25 < ant anthome ="apache-ant-1.7.0" buildfile ="projects/${project.name}/build.xml" />
26 schedule >
27
28
29 < log >
30
31 < merge dir ="projects/${project.name}/test-reports" />
32 log >
33
34
35 < publishers >
36
37
38
40
41
46 < htmlemail
47 charset ="UTF-8"
48 mailhost ="test163.com"
49 defaultsuffix ="@xxx.com"
50 username ="[email protected]"
51 password ="xxx"
52 returnname ="CruiseControl"
53 returnaddress ="[email protected]"
54 subjectprefix ="构建日志"
55 xsldir ="webapps/cruisecontrol/xsl"
56 css ="webapps/cruisecontrol/css/cruisecontrol.css" >
57 < always address ="[email protected]" />
58 < failure address ="xxx@xxx,[email protected]" />
59
60 htmlemail >
61
62 publishers >
63
64 project >
65 cruisecontrol >

配置文件有一个 cruisecontrol 根结点,其下则是代表一个项目的 project 子节点,再下层是项目的具体配置,在此示例中,存在了 listeners bootstrappers modificationset schedule log 几个节点,分别代表了监听器、本地目录、变更目录、构建任务、日志工作。
3.1. 创建一个项目
...............


项目工程下的build.xml说明:

xmlversion="1.0"encoding="UTF-8" ?>
2
3
4 < project default ="CI" name ="xxx" basedir ="." >
5
6
7
8 < property file ="build.properties" />
9
10
11
12
13 < property name ="projectName_CN" value ="xxx" />
14
15 < property name ="projectFolder" value ="${projcet.path}/${projcet.name}" />
16
17
18 < property name ="sourceFolder" value ="${projectFolder}/src/main/java" />
19
20 < property name ="configFolder" value ="${projectFolder}/src/main/config" />
21
22 < property name ="testFolder" value ="${projectFolder}/src/test/java" />
23
24 < property name ="libFolder" value ="${projectFolder}/WebRoot/WEB-INF/lib" />
25
26 < property name ="classFolder" value ="${projectFolder}/WebRoot/WEB-INF/classes" />
27
28
29 < property name ="reportFolder" value ="${projectFolder}/test-reports" />
30
31 < property name ="reportFileName" value ="junit-noframes.html" />
32
33
34
35
36 < property name ="warFile" value ="${projectFolder}/${projcet.name}.war" />
37
38 < property name ="webFile" value ="${projectFolder}/WebRoot/WEB-INF/web.xml" />
39
40 < property name ="warSource" value ="${projectFolder}/target/classes" />
41
42
43
44
45 < path id ="compilePath" >
46
47 < pathelement path ="${classFolder}" />
48
49 < path refid ="libPath" />
50 path >
51
52
53 < path id ="jUnitPath" >
54
55 < pathelement path ="${classFolder}" />
56
57 < path refid ="libPath" />
58 path >
59
60
61 < path id ="libPath" >
62
63 < fileset dir ="${libFolder}" >
64 < include name ="**/*.jar" />
65 fileset >
66 path >
67
68
69
70
71 < target name ="CI" depends ="init,compile,test,makewar,deploy-catalina" description ="持续集成" />
72
73
74 < target name ="init" description ="初始化" >
75
76 < echo > 正在删除编译程序目录 echo >
77 < delete dir ="${classFolder}" />
78 < echo > 正在创建编译程序目录 echo >
79 < mkdir dir ="${classFolder}" />
80
81 < echo > 正在删除单元测试报告目录 echo >
82 < delete dir ="${reportFolder}" />
83 < echo > 正在创建单元测试报告目录 echo >
84 < mkdir dir ="${reportFolder}" />
85 target >
86 http://www.blogjava.net/Images/OutliningIndica
Global site tag (gtag.js) - Google Analytics

你可能感兴趣的:(单元测试,Ant,SVN,XML,Web)