天天看點

cruisecontrol、ant、svn持續內建

自己兩個多星期以來對持續內建的概念和應用有了一些了解。下面主要對自己配置持續內建的環境進行總結。(看上去簡單,但是對我開始對持續內建都沒什麼了解的人來說确實費了不少周折)

一 本次持續內建環境的搭建所使用的工具有

cruisecontrol、ant、svn、junit、Slik-Subversion-1.5.6-win32、svnant-1.1.0-RC2.zip

cruisecontrol:是一種持續內建過程的架構,包括了郵件通知,ant 和各種源碼控 制工具的插 件。并提供了web接口,用于檢視目前和以前的建立的結果.

ant:建構工具。

svn:版本控制工具。

junit:單元測試工具。

slik-subversion:是為了調用svn的用戶端指令安裝的。

svnant:主要是用到它裡面的lib中的jar包,它具體使用還不是很清楚

另外本次的輔助環境還有jdk,相信大家都再也熟悉不過了。

二 環境的搭建步驟:

jdk的安裝:根據jdk安裝包的提示安裝jdk。設定系統的環境變量:

a) JAVA_HOME指明JDK安裝路徑,就是剛才安裝時所選擇的路徑D:\java\jdk1.5.0_08,此路徑下包括lib,bin,jre等檔案夾(此變量最好設定,因為以後運作tomcat都需要依賴此變量);

b) Path使得系統可以在任何路徑下識别java指令,設為%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

c)CLASSPATH為java加載類(class or lib)路徑,隻有類在 classpath中,java指令才能識别,設為:.;JAVA_HOME\lib\dt.jar;JAVA_HOME% \lib\tools.jar (要加.表示目前路徑);%JAVA_HOME%就是引用前面指定的JAVA_HOME;不過本人還是比較相信絕對路徑的。

2 ant的安裝:ant是內建建構工具,想必大家都不太陌生了。隻需要到ant.apache.org的網站下載下傳ant的适當版本解壓縮後,配置系統的環境變量:ANT_HOME:d:\apache-ant-1.7.0, path:d:\apache-ant-1.7.0\bin 後,ant就可以在任意目錄下運作了,如cmd下運作ant,顯示:buildfile:build.xml does not exsit。。。。。

3 安裝svn,因為cruisecontrol要用到svn(不知道這兩個有什麼先後順序沒,因為cc要用svn就先裝cc喽)。svn的安裝TortoiseSVN-1.5.3.13783-win32-svn-1.5.2.msi安裝提示裝就可以了。

4 安裝tomcat ,設定系統環境變量CATALINA_HOME=c:\tomcat,CLASSPATH=C:\tomcat\common\lib(加載必要的包)。

5 cuisecontrol的安裝,因為本文使用的作業系統為XP,就使用CruiseControl-2.8.2.exe安裝就可以了(.exe檔案還是很受大家喜歡的)。配置系統的環境變量:CC_HOME=d:\cruisecontrol

6 安裝slik-subversion,它會自動寫入到path=D:\SlikSvn\bin\ 如果沒有寫入的話,要麻煩手動加入到系統的環境變量path中,本人曾經遇到過,cmd視窗已經打開但是配置檔案執行過程中svn的指令總不能識别發現此處的路徑沒有加入到path中。

7下載下傳svnant-1.1.0-RC2.zip,把lib包中的jar考到ant的jar中。

三 以上的準備工作已經基本搞定,下面就介紹一下配置檔案。此次環境的搭建配置檔案是很關鍵的,因為他們各自有自己的标簽,是以還要想達到什麼功能慢慢查找,(如果有時間系統學習一下就好了)。

1 ant的關鍵檔案為build.xml(當然也可以起别的名稱,自己還要改它的啟動檔案,就用這個名稱吧)下面是一個執行個體:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

定義basedir目前的根目錄,default預設執行的标簽,name工程名

<project basedir="." default="all" name="framework">

<property environment="env" />

定義tomcat的安裝目錄

<property name="TOMCAT_DIR" location="D:/Tomcat 5.5" />

定義debug的級别

<property name="debuglevel" alue="source,lines,vars" />

為了引用tomcat固有包友善是以增加次屬性

<property name="coolink.dist.path" location="D:/Tomcat 5.5/webapps/txsd/WEB-INF" />

指定要編譯的工程目錄

<property name="CLASS_DIR" location="D:/CruiseControl/projects/framework" />

<property name="target" value="1.5" />

<property name="source" value="1.5" />

編譯時候所使用的類路徑,id為引用的名稱

<path id="Apache Tomcat v5.5 [Apache Tomcat v5.5].libraryclasspath">

<pathelement location="${TOMCAT_DIR}/common/lib/commons-el.jar" />

....

<pathelement location="${TOMCAT_DIR}/common/lib/servlet-api.jar" />

</path>

<path id="Web App Libraries.libraryclasspath">

<pathelement location="${coolink.dist.path}/lib/activation.jar" />

.............

<pathelement location="${coolink.dist.path}/lib/xmlParserAPIs.jar" />

</path>

<path id="ant.svn.classpath">

<fileset dir="D:/CruiseControl/apache-ant-1.7.0/lib">

<include name="*.jar" />

</fileset>

</path>

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask">

<classpath refid="ant.svn.classpath" />

</taskdef>

<path id="txsd.classpath">

<path refid="Apache Tomcat v5.5 [Apache Tomcat v5.5].libraryclasspath" />

<path refid="Web App Libraries.libraryclasspath" />

</path>

clean操作,如果build之前不執行此操作,build檢查到原有的class檔案就不再編譯。

<target name="clean">

<delete file="${CLASS_DIR}/longcon-framework.jar" />

<delete dir="target" quiet="true" />

<delete dir="${CLASS_DIR}/source/classes" />

</target>

要build子產品的名稱build-framework看來可以随便起名字,但是有人說必須和子產品名稱一緻,至今還不知道為什麼

<target name="build-framework">

<echo message="${ant.project.name}: ${ant.file}" />

<mkdir dir="${CLASS_DIR}/source/classes" />

<copy includeemptydirs="false" todir="source/classes">

<fileset dir="${CLASS_DIR}/source" excludes="***.java" />

</copy>

<javac debug="true" debuglevel="${debuglevel}" destdir="${CLASS_DIR}/source/classes" source="${source}" target="${target}" encoding="UTF-8">

<src path="${CLASS_DIR}/source" />

<exclude name="**/.svn*.class" />

</batchtest>

</junit>

</target>

打包放到指定目錄

<target name="jar">

<jar destfile="${CLASS_DIR}/longcon-framework.jar" encoding="UTF-8" update="false" excludes="***.launch, ***.jar"/>

</fileset>

<pathelement location="classes"/>

<dirset dir="build">

<include name="appsclasses"/>

<exclude name="apps*Test*"/>

</dirset>

<filelist refid="third-party_jars"/>

</classpath>

b <target name="test" depends="clean">depends表示依賴關系

2 cruisecontrol的config檔案,CC啟動的時候會自動尋找此檔案,當然你可以通過修改啟動檔案修改config.xml名稱,隻要兩處一緻就能找到,下面是一個config檔案的執行個體:

<cruisecontrol>//cc的固有标簽,cc中可以有多個project

<project name="framework">// 工程名稱

<plugin name="labelincrementer" classname="net.sourceforge.cruisecontrol.labelincrementers.SVNLabelIncrementer"/>

<labelincrementer workingcopypath="projects/${project.name}"/> // 顯示svn的版本号

listeners:監聽器,來報告cc的此項目的運作資訊

<listeners>

<currentbuildstatuslistener file="logs/${project.name}/status.txt" />

</listeners>

bootstrappers從svn源碼控制程式更新本地版本,據說還有向其它插件提供目前建立的狀态

<bootstrappers>

<svnbootstrapper localWorkingCopy="projects/${project.name}" username="luojing" password="luojing" />

</bootstrappers>

<bootstrappers>//向ant提供目前資訊

<antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="jar" />

</bootstrappers>

<modificationset quietperiod="30">// 通過svn更新原代碼

<!-- touch any file in connectfour project to trigger a build -->

<svn localWorkingCopy="projects/${project.name}" username="luojing" password="luojing" />

</modificationset>cruisecontrol、ant、svn持續內建