CruiseControl配置說明
CruiseControl是一個持續集成工具,持續集成是一個很好的敏捷實踐。在項目中搭建CruiseControl環境,通過執行頻繁的項目構建,及時暴露出隱藏的Bug,從而減少定位以及修改Bug的時間和代價。本文介紹了配置CruiseControl的步驟。配置環境為Ubuntu
9.10,CruiseControl
2.8.3 Binary,版本管理工具為SVN。
一.準備工作
1.配置Java環境
calvin@calvin-desktop:~$
sudo gedit /etc/profile
在文件末尾添加Java環境變量:
#set
java environment
export
JAVA_HOME=/home/calvin/development/jdk
export
JRE_HOME=/home/calvin/development/jdk/jre
export
CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
登出再登入生效。
2.解壓CruiseControl
解壓到CruiseControl-2.8.3-bin.zip
到/home/calvin/development/cruisecontrol/cruisecontrol-bin-2.8.3中,其中三個值得注意的目錄是:
目錄
內容
projects
存放CruiseControl從源代碼倉庫中檢出的代碼。
logs
存放構建報告和日志。
artifacts
存放構建成功后產生的輸出文件(如jar包,apk包等)。
3.從SVN倉庫中checkout出源碼
CruiseControl第一次不支持自動檢出代碼,所以在構建項目之前要先把項目代碼手工checkout到本地。本文假設項目名為sampleproject,SVN源代碼倉庫位于/home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository中。
calvin@calvin-desktop:~$
sudo apt-get install subversion
calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$
mkdir sampleproject
calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$
svn checkout
file:////home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository
sampleproject
二.配置config.xml
cruisecontrol根據config.xml中配置的項目信息執行構建。
<cruisecontrol>
<!--
這里的name應該和projects目錄下的項目名一致
-->
<project
name="sampleproject">
<!--監聽項目狀態的變化
-->
<listeners>
<currentbuildstatuslistener
file="logs/${project.name}/status.txt"/>
</listeners>
<!--
build之前從svn服務器上更新本地代碼
-->
<bootstrappers>
<svnbootstrapper
localWorkingCopy="projects/${project.name}/trunk" />
</bootstrappers>
<modificationset
quietperiod="30">
<svn
localWorkingCopy="projects/${project.name}/trunk" />
</modificationset>
<!--
設定每隔interval秒,CruiseControl去檢查并執行一次構建
-->
<schedule
interval="60">
<ant
anthome="apache-ant-1.7.0"
buildfile="projects/${project.name}/trunk/build.xml"
target="all"/>
</schedule>
<!--
發布構建結果
-->
<publishers>
<onsuccess>
<!--
將構建的結果(如jar包,apk包等)發布到指定的位置
-->
<artifactspublisher
dir="projects/${project.name}/trunk/dist"
dest="../logs/SampleCCProject"
/>
</onsuccess>
<!--htmlemail
buildresultsurl="http://211.94.155.199:8080/cruisecontrol/buildresults/mobiletv
mailhost="localhost" returnname="CruiseControl
result" returnaddress="localhost@localhost"-->
<!--failure
address="caojie@cienet.com.cn" />
<success
address="${mail.address.mobiletv" />
</htmlemail
<htmlemail>
<success
address="${mail.address.mobiletv}"/>
<failure
address="caojie@cienet.com.cn"/>
</htmlemail>-->
<email
mailhost="smtp.263xmail.com"
returnaddress="calvinlee@cienet.com.cn"
skipusers="true"
reportsuccess="fixes"
subjectprefix="[CruiseControl]"
buildresultsurl="http://buildserver:8080/cruisecontrol/buildresults">
<failure
address="calvinlee@cienet.com.cn" />
<success
address="calvinlee@cienet.com.cn" />
</email>
</publishers>
</project>
</cruisecontrol>
三.配置cruisecontrol.sh
cruisecontrol.sh是cruisecontrol的啟動腳本,通過這個腳本中初始化一些環境變量,開始執行build
loop,并開啟jetty服務器。
打開cruisecontrol.sh,在文件末尾找到
$JAVA_HOME/bin/java
$CC_OPTS
-Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder
"-Dcc.library.dir=$LIBDIR" "-Djetty.logs=$JETTY_LOGS"
-jar "$LAUNCHER" $@ -jmxport 8000 -webport 8080 -rmiport
1099 &
去掉
&
符號,這樣啟動cruisecontrol時,阻止將其放到后臺執行,要關閉cruisecontrol時,按下
Ctrl+C
即可。
修改-jmxport、-webport、-rmiport等參數可以自定義項目構建結果的發布端口。
PS:
如果項目的log文件比較大,或者構建時使用內存較多,可以在cruisecontrol.sh中增加JAVA命令行參數,擴大JVM的內存,以免出現OutOfMemory錯誤:
CC_OPTS="-Xms128m
-Xmx256m"
四.配置dashboard-config.xml
dashboard用來顯示cruisecontrol管理的所有項目的構建狀態信息。
dashboard-config.xml用來配置dashboard的顯示,其中,配置<features
allowforcebuild="true"/>,那么在每個項目的右側有一個按鈕,單擊該按鈕將強迫該項目進行構建,而不必等到其下一次檢查,也不必等到它有版本變化。
<dashboard>
<buildloop
logsdir=""
artifactsdir=""
/>
<features
allowforcebuild="true"/>
<trackingtool
projectname="" baseurl="" keywords=""/>
<subtabs>
<subtab
class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget"
/>
</subtabs>
</dashboard>
五.運行cruisecontrol
1.給cruisecontrol.sh
添加執行權限
calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$
sudo chmod +x cruisecontrol.sh
2.運行
cruisecontrol.sh
腳本
calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$
./cruisecontrol.sh
六.查看項目構建結果
1.通過http://localhost:8080/dashboard/
訪問項目構建結果。
其中,項目有三種狀態:
Discontinued:表示CruiseControl可以找到該項目的日志文件,但在config.xml中并沒有配置該項目,這種情況下CruiseControl不會去構建它。
Inactive:表示在config.xml中配置了該項目,但是沒有發現關于這個項目的Log信息,即在CruiseControl的日志目錄中還沒有該項目的日志文件,或日志文件被人為刪除了。CruiseControl會根據配置信息對這個項目進行檢查新版本并進行構建。
Active:表示CruiseControl即可以找到該項目的日志文件,又在config.xml中可以發現它。此時,這個項目可能是構建成功,也可能是構建失敗,還可能是構建中。
2.通過http://localhost:8080/cruisecontrol/
查看項目構建計劃