SVN+CruiseControl+ANT環(huán)境搭建和配置介紹
51CTO向您推薦《使用SVN+CruiseControl+ANT實現持續(xù)集成》
1. 環(huán)境搭建
1.1. 下載及目錄介紹
從官方站點http://cruisecontrol.sourceforge.net/download.html下載一份最新的 CC 壓縮包,最新的版本號為2.8.4
下載了cruisecontrol-bin-2.8.4.zip 直接解壓到E盤下,文件結構如下圖:
apache-ant-1.7.0:CC中使用ANT工具
artifacts:CC編譯生成發(fā)布包
etc:自帶容器Jetty對應的配置文件
lib:自帶容器Jetty所需要到的Jar包
logs:各項目生成日志存在文件夾
projects:存放各項目文件目錄,進行程序的編譯
webapps:CC自帶應用程序存放目錄
cc-config:用于CC環(huán)境變量配置
cruisecontrol:主應用程序CC目錄
dashboard:用于編譯結果發(fā)布程序
documentation:CC相關文檔
config.xml:用于CC編譯配置文件,通過修改配置文件引入不同的插件,執(zhí)行不同的編譯流程
cruisecontrol.bat:在WINDOWS環(huán)境下進行啟用CC批處理腳本
cruisecontrol.sh:在Linux等環(huán)境下啟動CC腳本
dashboard-config.xml:Dashboard配置文件
1.2. 運行環(huán)境
使用JAVA開發(fā)的CC,當然需要運行在JDK下并通過Web容器進行發(fā)布,具體要求如下:
CC需要運行在至少JDK 1.4環(huán)境中,在環(huán)境變量中設置有JAVA_HOME,并把java/bin加入到path中;
CC已經內建集成了ANT,不需要單獨引入;
CC可以運行在多種應用服務器中,在自帶壓縮包中捆綁了一個開源應用服務器,那就是Jetty 6,下面為了盡快建立我們的環(huán)境,以下將使用該容器。
1.3. 快速啟動CC
運行根目錄下批處理文件cruisecontrol.bat,出現如下界面:
運行成功后,我們可以在瀏覽器輸入 http://localhost:8080/cruisecontrol/來驗證一下結果(采用Jetty默認的設置,端口號為 8080)
如果看到上圖結果,恭喜你已經成功啟動CC。
另外CC提供了更加人性化結果展示Dashboard界面,在瀏覽器輸入 http://localhost:8080/dashboard/
2. 配置介紹
當CC服務器啟動時,會自動檢測配置信息中的任務信息,并對其進行校驗和初始化,之后所有的工作,都是依據該配置信息進行的。
CC的配置使用了其安裝目錄下的config.xml文件,我們可以通過文本編輯器打開該配置文件,編輯各種配置信息。配置信息的定義遵循了標準XML文件格式,同時遵循了ANT自動構建配置信息的規(guī)則。
2.1. config.xml
- <cruisecontrol>
- <project name="connectfour">
- <!-- 用來訪問項目當前創(chuàng)建的狀態(tài) file: 指定了狀態(tài)文件的位置 -->
- <listeners>
- <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
- </listeners>
- <!-- 在 CC 進行創(chuàng)建之前運行,創(chuàng)建前的準備工作 -->
- <bootstrappers>
- <!-- 從源碼控制系統更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper -->
- <antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="clean" />
- </bootstrappers>
- <!-- 檢查各個源碼控制系統中是否發(fā)生變化;quietperiod: 單位為秒 設定等待的時間 -->
- <!-- 第一次的取出工作為手動執(zhí)行 -->
- <modificationset quietperiod="30">
- <!-- touch any file in connectfour project to trigger a build -->
- <filesystem folder="projects/${project.name}"/>
- </modificationset>
- <!-- 指定了構建的時間間隔 單位為秒-->
- <schedule interval="300">
- <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
- </schedule>
- <!-- 指定項目日志保存的地點 -->
- <log>
- <merge dir="projects/${project.name}/target/test-results"/>
- </log>
- <!-- 在 build loop 結束之后運行,發(fā)布 build 的結果 -->
- <publishers>
- <onsuccess>
- <!--用于對創(chuàng)建過程中產生的人工制品進行發(fā)布-->
- <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
- </onsuccess>
- <!--
- mailhost=郵件主機41 returnname=發(fā)件人42 returnaddress=發(fā)件地址43 defaultsuffix=默認郵件后綴44 -->
- <htmlemail46 charset="UTF-8" mailhost="test163.com" 48 defaultsuffix="@xxx.com" username="xxx@163.com"
- password="xxx"
- returnname="CruiseControl"
- returnaddress="xxx@163.com"
- subjectprefix="構建日志"
- xsldir="webapps/cruisecontrol/xsl"
- css="webapps/cruisecontrol/css/cruisecontrol.css">
- <always address="xxx@xxx.com.cn"/>
- <failure address="xxx@xxx,yyy@yyy.com.cn"/> 58 </htmlemail>
- </publishers>
- </project>
- </cruisecontrol>
2.2. build.xml
- <!—調用ANT執(zhí)行集成流程,包括清空目錄、編譯、休眠、測試、打包 -->
- <project name="connectfour" default="all">
- <target name="all" depends="clean, compile, sleep, test, jar"/>
- <!-- 1. 刪除根目錄下target 目錄-->
- <target name="clean">
- <delete dir="target" quiet="true" />
- </target>
- <!-- 2. 編譯程序,創(chuàng)建目錄并編譯程序,編譯輸出為target/classes目錄下-->
- <target name="compile">
- <mkdir dir="target/classes"/>
- <javac srcdir="src" destdir="target/classes"/>
- </target>
- <!-- 3. 在創(chuàng)建前等待60秒,用于Dashboard觀察進程-->
- <target name="sleep">
- <echo message="Sleeping for a while so you can see the build in the new dashboard" />
- <sleep seconds="60" />
- </target>
- <!-- 4. 進行自動化測試,依賴任務為compile-->
- <target name="test" depends="compile">
- <mkdir dir="target/test-classes"/>
- <!—調用junit進行自動化測試-->
- <javac srcdir="test" destdir="target/test-classes">
- <classpath>
- <pathelement location="target/classes"/>
- <pathelement location="lib/junit.jar"/>
- </classpath>
- </javac>
- <!—創(chuàng)建測試結果存放目錄-->
- <mkdir dir="target/test-results"/>
- <junit haltonfailure="no" printsummary="on">
- <classpath >
- <pathelement location="target/classes"/>
- <pathelement location="lib/junit.jar"/>
- <pathelement location="target/test-classes"/>
- </classpath>
- <formatter type="brief" usefile="false"/>
- <formatter type="xml" />
- <!—測試文件所在文件地址-->
- <batchtest todir="target/test-results" >
- <fileset dir="target/test-classes" includes="**/*Test.class"/>
- </batchtest>
- </junit>
- </target>
- <!-- 5. 程序打包,依賴與compile任務-->
- <target name="jar" depends="compile">
- <jar jarfile="target/connectfour.jar" basedir="target/classes"/>
- </target>
- </project>
2.3. 執(zhí)行配置解析
一個持續(xù)集成項目是從project節(jié)點開始的,對該項目進行的操作都會作為子節(jié)點存在與該根節(jié)點之下。對于每一個project節(jié)點,CC系統都會將其當作一個處理單元,并在最初建立該項目的時候進行初始化操作。
name是project節(jié)點常用的屬性,也是必設且值唯一的屬性,該屬性的值會在整個CC系統使用,包括配置文件的${project.name}變量值。
在一個項目節(jié)點中,我們可以定義監(jiān)聽器、本地目錄位置、變更輪詢目錄位置、輪詢間隔、任務執(zhí)行、單元測試、日志記錄等多種項目操作,同時CC系統支持插件擴展功能,這些擴展插件可以直接在一個項目中使用。
2.3.1. 輪詢版本控制系統
版本庫輪詢機制是使用modificationset進行配置的。CC系統內置的輪詢模塊會根據設定的時間段對版本庫進行檢測,一旦發(fā)現版本庫發(fā)生變更,就會調用Check Out Build Test Publish等一系列的操作,對最新的代碼進行集成,并運行一系列預先設定的任務。
CC支持十多種版本控制系統,比如CVS、SVN、Starteam、VSS等,對這些版本控制系統的調用,只需要配置相應的節(jié)點名稱即可。本文以SVN版本管理系統為例。在modificationset節(jié)中,我們看到唯一的一個子節(jié)點:
<svn localWorkingCopy="projects/CM/${project.name}/src/${project.name}"/>
該節(jié)點使用了svn關鍵字,表示當前工程使用的版本控制系統是SVN,localWorkingCopy屬性的值是告訴CC本地的拷貝目錄,其余的工作則由CC內置的操作模塊進行。
2.3.2. 執(zhí)行構建腳本
實質上,執(zhí)行構建腳本也是CC的一個可定制任務,但由于自動構建是持續(xù)集成的一個重要組成部分,因此在此單獨提出。
CC的自動構建是使用ANT工具來進行的,當然我們也可以使用其它的自動構建工具來替代(比如Maven),這些的工具僅僅是體現在一個任務配置語句上,在此,以ANT工具為例。
在schedule節(jié),我們同樣使用了一個子節(jié)點來描述自動構建工作:
<ant anthome="ant6" buildfile="projects/CM/${project.name}/src/${project.name}/build.xml"/>
該節(jié)點使用了ant關鍵字,表示該任務使用了ant來進行自動構建任務,anthome屬性則指定了ANT工具的具體位置,buildfile屬性則指定了ANT進行自動構建所使用的配置文件Build.xml文件的路徑。
這樣,在CC決定進行自動構建任務時,會根據設定找到執(zhí)行所使用到的信息。
2.3.3. 執(zhí)行單元測試
CC可以自動偵測自動構建配置文件中單元測試的任務,并在代碼集成完畢將執(zhí)行結果反饋到相應的模塊。
ANT支持xUnit系列的單元測試框架,只需要在配置文件中加入一個target節(jié),即可在自動構建完成之后,進行單元測試工作,有關的詳細配置,請參閱ANT官方文檔。
原文鏈接:http://www.cnblogs.com/shishanyuan/archive/2011/09/15/2177862.html
【編輯推薦】