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
2
projcet.path=xxx
3
4
projcet.name=xxx
5
6
catalina.home=xxx
7
8
catalina.port=xxx
9
10
catalina.username=xxx
11
12
catalina.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}&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>
此構建文件需要優化,在部署時仍存在各種問題,不夠完善。