wml

CruiseControl 配置

CruiseControl 的概念和好处,我就不在复诉,下面是我的配置环境与配置文件。

配置环境:

CruiseControl : cruisecontrol-bin-2.7.zip

Apache-Ant : 1.7.0

Junit : 4.0

JRE : 5.0_12

Eclipse :

在此环境中,要保持Ant与Junit的版本协调,最初使用Cruisecontrol-2.7随包发布的apache-ant-1.6.5进行单元测试时,会报 No tests found in .... ,Ant1.7是支持JUnit4的,所以将Ant升级为1.7.0的版本,问题解决。

1、设置环境变量

     由于使用ZIP的版本,所以需要设置 JAVA_HOME 的路径。注意由ANT的版本已升级为1.7.0,所以在config.xm中应该指定ant_home的路径。

2、CruiseControl 的config.xml

 

 1<?xml version='1.0' encoding='gb2312'?>
 2<cruisecontrol>
 3    <project name="projectName">
 4
 5        <!-- 用于处理一些项目有关的事件 -->
 6        <listeners>
 7            <!-- 用来访问项目当前创建的状态   file: 指定了状态文件的位置 -->
 8            <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
 9        </listeners>
10        
11        <!-- 在 CC 进行创建之前运行,是创建前的准备工作 -->
12        <bootstrappers>
13            <!-- 从源码控制系统更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper -->
14            <svnbootstrapper localWorkingCopy="projects/${project.name}" />
15        </bootstrappers>
16
17        <!-- 检查各个源码控制系统中是否发生变化;quietperiod: 单位为秒 设定等待的时间 -->
18        <!-- 第一次的取出工作为手动执行 -->
19        <modificationset quietperiod="600">
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            <!-- 通常是指定 CC 的合并日志的目录 -->
31            <merge dir="projects/${project.name}/test-reports"/>
32        </log>
33        
34        <!-- 在 build loop 结束之后运行,发布 build 的结果 -->
35        <publishers>
36            <!--onsuccess-->
37                <!--用于对创建过程中产生的人工制品进行发布-->
38                <!--artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
39            </onsuccess-->
40
41            <!--
42                mailhost=邮件主机
43                returnname=发件人
44                returnaddress=发件地址
                       defaultsuffix=默认邮件后缀
45            -->
46            <htmlemail
47                charset="UTF-8"
48                mailhost="smtp.163.com" 
49                defaultsuffix="@xxx.com"
50                username="xxx@163.com"
51                password="xxx"
52                returnname="CruiseControl"
53                returnaddress="xxx@163.com"
54                subjectprefix="构建日志"
55                xsldir="webapps/cruisecontrol/xsl"
56                css="webapps/cruisecontrol/css/cruisecontrol.css">
57                <always address="xxx@xxx.com.cn"/>
58                <failure address="xxx@xxx,yyy@yyy.com.cn"/>
59                
60            </htmlemail>
61
62        </publishers>
63
64    </project>
65</cruisecontrol>


2、build.xml的特性文件

 1
 2projcet.path=xxx
 3
 4projcet.name=xxx
 5
 6catalina.home=xxx
 7
 8catalina.port=xxx
 9
10catalina.username=xxx
11
12catalina.password=xxx


3、工程的build.xml

 

  1<?xml version="1.0" encoding="UTF-8" ?>
  2
  3<!-- Continuous Integration 工程名称 Gms 默认任务 CI -->
  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    <!-- lib目录 -->
 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    <!-- 生成war文件 -->
 36    <property name="warFile" value="${projectFolder}/${projcet.name}.war"/>
 37    <!-- web.xml文件 -->
 38    <property name="webFile" value="${projectFolder}/WebRoot/WEB-INF/web.xml"/>
 39    <!-- 生成war文件的基础路径 -->
 40    <property name="warSource" value="${projectFolder}/target/classes"/>
 41
 42    <!-- ================================ 路径设置 ================================ -->
 43    
 44    <!-- 编译过程中用到的路径 -->
 45    <path id="compilePath">
 46        <!-- 编译程序目录 -->
 47        <pathelement path="${classFolder}" />
 48        <!-- 编译时lib路径 -->
 49        <path refid="libPath" />
 50    </path>
 51
 52    <!-- 单元测试时用到的路径 -->
 53    <path id="jUnitPath">
 54        <!-- 编译程序目录 -->
 55        <pathelement path="${classFolder}" />
 56        <!-- 编译时lib路径 -->
 57        <path refid="libPath" />
 58    </path>
 59
 60    <!-- 编译时lib路径 -->
 61    <path id="libPath">
 62        <!-- lib目录 -->
 63        <fileset dir="${libFolder}">
 64            <include name="**/*.jar" />
 65        </fileset>
 66    </path>
 67    
 68    <!-- ================================ 持续集成 ================================ -->
 69    
 70    <!-- 集成流程 暂时没有加入 Test -->
 71    <target name="CI" depends="init,compile,test,makewar,deploy-catalina" description="持续集成"/>
 72
 73    <!-- 1.初始化目标目录, class ; report -->
 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
 87    <!-- 2.编译程序生成目标类 -->
 88    <target name="compile" depends="init" description="编译">
 89        <echo>编译源程序</echo>
 90        <!-- classpathref="编译路径" destdir="${编译程序目录}" -->
 91        <javac classpathref="compilePath" fork="true" memorymaximumsize="128m"
 92               destdir="${classFolder}" debug="true" deprecation="false"
 93               failonerror="false" verbose="false">
 94            <!-- 源程序目录 -->
 95            <src path="${sourceFolder}" />
 96            <!-- 测试程序目录 -->
 97            <src path="${testFolder}" />
 98            <!-- 配置文件目录 -->
 99            <src path="${configFolder}" />
100            
101            <include name="**/*.java" />
102        </javac>
103        <copy todir="${classFolder}">
104            <fileset dir="${configFolder}">
105                <include name="**/*.*"/>
106            </fileset>
107            <fileset dir="${sourceFolder}">
108                <include name="**/*.xml"/>
109            </fileset>
110        </copy>
111    </target>
112
113    <!-- 3.运行JUnit测试 -->
114    <target name="test" description="执行单元测试">
115        <echo>运行单元测试用例</echo>
116        <!-- haltonfailure="true" 出现fail即终止build -->
117        <junit printsummary="true">
118            <classpath refid="jUnitPath" />
119            <!-- 指定测试结果类型 -->
120            <formatter type="xml"/>
121            <!-- 批量测试集 todir="${reportFolder}" 单元测试报告目录 -->
122            <batchtest todir="${reportFolder}">
123                <!-- dir="${classFolder}" 编译程序目录 -->
124                <fileset dir="${classFolder}">
125                    <!-- 包含 -->
126                    <include name="**/*Test.class"/>
127                </fileset>
128            </batchtest>
129        </junit>
130        
131        <echo>生成单元测试报告</echo>
132        <!-- XSLT格式化XML,生成HTML的报告 todir="${reportFolder}" 单元测试报告目录 -->
133        <junitreport todir="${reportFolder}" description="生成单元测试报告">
134            <fileset dir="${reportFolder}">
135                <!-- formatter生成报告文件的默认命名规范是TEST-*.xml -->
136                <include name="TEST-*.xml" />
137            </fileset>
138            <!-- format="frames" 生成有框架 noframes 无框架-->
139            <report format="frames" todir="${reportFolder}" />
140        </junitreport>
141    </target>
142
143    <!-- 4.打包成war文件 -->
144    <target name="makewar" depends="" description="发布WAR文件">
145        <echo>打包成war文件</echo>
146        <war destfile="${warFile}" webxml="${webFile}">
147            <!-- 添加web文件,过滤web.xml与测试类 -->
148            <fileset dir="${projectFolder}/WebRoot" excludes="WEB-INF/web.xml,WEB-INF/classes/**/*Test.class"/>
149        </war>     
150    </target>
151    
152    <!-- ================================ 依赖TOMCAT管理部署 ================================ -->
153    
154    <!--5.部署 此种部署方式有时会导致内存溢出 -->
155    <target name="deploy-catalina" depends="remove-local-catalina,deploy-local-catalina" description="部署到TOMCAT服务器">
156        
157    </target>
158    
159    <!-- 执行remove-local-catalina任务后,在应用中有几个jar文件无法删除 
160         解决办法是在 MEAT-INF目录下 创建context.xml 内容为:
161         <?xml version="1.0" encoding="UTF-8"?>
162         <Context reloadable="true" antiResourceLocking="true"/>
163    -->
164    <target name="remove-local-catalina" depends="" description="删除TOMCAT上部署的应用">
165        <!--fail unless="env.CATALINA_HOME" message="Tomcat6 Not Found"/-->
166        <property name="deploy.local.remove.url" value="http://localhost:${catalina.port}/manager/remove"/>
167        <!-- src="${deploy.local.remove.url}?path=/${projcet.name}" 这个URL是删除命令 -->
168        <get dest="deploy-local-remove.txt" 
169             src="${deploy.local.remove.url}?path=/${projcet.name}"
170             username="${catalina.username}"
171             password="${catalina.password}"/>
172        <loadfile property="deploy.local.remove.result"
173                  srcfile="deploy-local-remove.txt"/>
174        <echo>${deploy.local.remove.result}</echo>
175    </target>
176    
177    <target name="deploy-local-catalina" depends="" description="部署应用到TOMCAT">
178        <property name="deploy.local.urlpath" value="file:///${warFile}"/>
179        <property name="deploy.local.url.params" value="path=/${projcet.name}&amp;war=${deploy.local.urlpath}"/>
180        <property name="deploy.local.url" value="http://localhost:${catalina.port}/manager/install"/>
181        <get src="${deploy.local.url}?${deploy.local.url.params}" 
182             dest="deploy-local.txt" 
183             username="${catalina.username}"
184             password="${catalina.password}"/>
185        
186        <loadfile property="deploy.local.result"
187                  srcfile="deploy-local.txt"/>
188        <echo>${deploy.local.result}</echo>
189    </target>
190    
191    <!-- ================================ 拷贝部署:Tomcat启动后,处于运行状态,Ant始终无法获得返回状态 ================================ -->
192    
193    <target name="deploy-tomcat" depends="stop-tomcat,copy-tomcat,start-tomcat" description="拷贝方式部署到TOMCAT服务器"/>
194    
195    <target name="stop-tomcat" description="调用批处理停止TOMCAT">
196        <exec dir="${catalina.home}/bin" 
197              executable="${catalina.home}/bin/shutdown.bat" 
198              os="Windows 2003, Windows XP, Windows 2000, Windows NT" > 
199              <arg line="-S" /> 
200        </exec>
201        <sleep seconds="5" description="Tomcat关闭后,等待使用文件的释放"/>
202        <delete dir="${catalina.home}/webapps/${projcet.name}" description="删除应用目录"/>
203    </target>
204    
205    <target name="start-tomcat" description="调用批处理启动TOMCAT">
206        <exec dir="${catalina.home}/bin" resolveexecutable="true"
207              executable="cmd" 
208              os="Windows 2003, Windows XP, Windows 2000, Windows NT" > 
209            <arg value="/C startup.bat"/>
210        </exec> 
211    </target>
212
213    <target name="copy-tomcat" description="部署WAR到TOMCAT">
214        <copy todir="${catalina.home}/webapps" file="${warFile}"/>
215    </target>
216
217    <!-- ================================ Tomcat扩展Ant部署 ================================ -->
218    
219    <target name="deploy" depends="remove-local-catalina,copy-tomcat,start" description="拷贝方式部署到TOMCAT服务器"/>
220    
221    <!-- 定义ant扩展的classpath -->
222    <path id="catalina.ant" location="${catalina.home}/lib/catalina-ant.jar"/>
223    
224    <!-- 扩展 start 标签 -->
225    <taskdef name="start" classname="org.apache.catalina.ant.StartTask" classpathref="catalina.ant"/>
226    <!-- 扩展 stop 标签 -->
227    <taskdef name="stop" classname="org.apache.catalina.ant.StopTask" classpathref="catalina.ant"/>
228
229    <target name="start" description="Start Tomcat application">
230        <start url="http://localhost:${catalina.port}/manager/" username="${catalina.username}" password="${catalina.password}" path="/${projcet.name}" />
231    </target>
232
233    <target name="stop" description="Stop Tomcat application">
234        <stop url="http://localhost:${catalina.port}/manager/" username="${catalina.username}" password="${catalina.password}" path="/${projcet.name}" />
235    </target>
236    
237</project>


此构建文件需要优化,在部署时仍存在各种问题,不够完善。

posted on 2007-06-06 17:26 wml 阅读(4531) 评论(10)  编辑  收藏 所属分类: CruiseControl

评论

# re: CruiseControl 简单配置 2007-06-21 10:05 spt

是否可以与我交流一下,我QQ30266191需要你的帮助,我正在搭建CruiseControl2.7谢谢  回复  更多评论   

# re: CruiseControl 简单配置 2007-06-25 13:35 wml

@spt

不好意思,几天没上来,不知你的问题解决没有,我的公司不方便用QQ沟通,CC的配置文件,与BUILD.XML我更新了一下,看能否对你有帮助,仍有问题可留下你的EMAIL  回复  更多评论   

# re: CruiseControl 配置[未登录] 2007-07-19 09:36 豆子

你好,我在配置cruisecontrol时,老是出现如下
警告:编码GBK的不可映射字符
我统一使用的是UTF-8的编码格式,不明白为什么还会出现这种错误  回复  更多评论   

# re: CruiseControl 配置 2007-08-15 15:54 lady-killer

请教:
我的config.xml文件和你的配置一样,但运行时总是告诉我update命令错误。
我现在最不清楚的地方,就是CC如何能够从CVS上拿到最新的版本到指定目录,多谢指教。  回复  更多评论   

# re: CruiseControl 配置 2007-09-12 15:16 QIU

您好,我最近也在搭建CC,但是在发邮件的时候,能不能在发邮件的时候设置那些人更新文件没有成功,就给他发一封邮件呢??  回复  更多评论   

# re: CruiseControl 配置[未登录] 2007-10-11 10:25 wml

@lady-killer

在你的CC服务期环境中,是否配置了CVS的环境变量呢?我使用的是SUBVERSION,安装后会自动配置环境变量.你可尝试着,配置下环境变量  回复  更多评论   

# re: CruiseControl 配置 2008-08-23 09:00 小陈同学

Hi! 大哥哥. 我打开页面. 出现这种错误. 可以指定下我么?
http://localhost:8180/cruisecontrol/?auto_refresh=true

Context parameter logDir needs to be set to a directory. Currently set to "logs"

degui.chen@qq.com  回复  更多评论   

# re: CruiseControl 配置 2009-01-20 13:57 lennoli

难题求助高手:“SVN+Cruisecontrol”环境下,系统无法发送邮件
情况描述:

1.在公司的内部局域网上使用“SVN+CruiseControl”来进行版本的控制和Delay Build工作。
2.要求在发现build失败后可以将相关的失败邮件发送给提交该部分代码的开发人员。
3.公司域内的项目组成员的SVN帐户全部放在了authz文件中,格式为:domain\username
4.公司域内成员的邮件系统采用MS-OuLook. 成员的邮件地址格式为:“username@domain.com”
5.在“CruiseControl”配置已经完成,如果将邮件地址写死,则整个发送邮件的工作完全正常
6.在“CruiseControl”配置中和自动动态派发邮件的配置项只有一个:defaultSuffix="@domain.com".
7.现在的出现的情况是:当build失败后,系统无法自动的将build失败的邮件发送给当事人。查看log后得到相关信息:
无效的邮件地址:“domain\username+@domain.com”。(假设domain为:soft,用户为:bond)
----> 即得到了这样的一个邮件地址: soft\bond@soft.com
8.很显然,CruiseControl是通过拼字符串的方式来得到邮件地址的(但是这样得到的邮件地址明显错误)
9.其中“soft\bond”部分来源于SVN,后面的“@soft.com”来源于CruiseControl自身的配置项。
10.我试着修改SVN中用户帐户的格式,不要域信息。修改完毕后发现帐户无法访问SVN了。查阅相关资料后得知:SVN在域内使用的时候,域内用户的帐户必须遵循“domain\username”的格式。
  回复  更多评论   

# re: CruiseControl 配置 2009-02-12 17:55 liyq

Hi!你好,我在配置完cruisecontrol打开页面
http://127.0.0.0:8080/cruisecontrol/?auto_refresh=true

出现提示:

Context parameter logDir needs to be set to a directory. Currently set to "logs"

happylixia169@hotmail.com  回复  更多评论   

# re: CruiseControl 配置[未登录] 2014-08-20 09:31 smile

CC设置的自动执行project的时间,为什么一段时间后总是停止不动呢,点击build也没有反应。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问