對于構建成功或失敗時應當給誰發送電子郵件,CruiseControl 在這方面相當靈活。在這里使用的配置將向最后一次構建之后向版本控制系統中提交變更的每個開發人員發送電子郵件。持續集成構建可能還包含在其他地方開發的開放源碼項目(我將把它們稱作遠程項目),這時,當遠程項目的開發人員弄糟了什么事的時候,可能并不想讓構建系統向他們發送電子郵件。在這種情況下,可以向一個地址發送郵件,這個地址通常是一個郵件列表,如果團隊成員經常想知道構建的狀態,可以訂閱這個郵件列表。這可以讓團隊負責人盡早發現構建發生了損壞。
清單 4 顯示了 meta-config.xml 文件的語法:
清單 4. meta-config.xml 的語法
<projects> <project name="project-name" [interval="seconds"]> <svn/>|<cvs/> <ant/>|<maven/> <clean>goals or targets to clean source tree</clean> <build>goals or targets to build</build> [<srcdir>source directory</srcdir>] [<remote-project/>] [<repo-dependency>groupId</repo-dependency>*] [<srcdir-dependency>project-name</srcdir-dependency>*] [<modificationset>CruiseControl elements</modificationset>] </project>* </projects>
配置文件基本上是個<project>元素列表。每個項目都有一個name屬性?蛇x的interval屬性覆蓋了 CruiseControl 默認的 5 分鐘的構建間隔時間?梢蕴岣哌h程項目的構建間隔,以減輕它們的版本控制倉庫的負擔。
利用<svn/>或<cvs/>空元素,每個項目必須指定自己用來更新源樹的版本控制工具。項目還必須指定要使用的構建工具,或者是<ant/>或者是<maven/>。項目還必須包含兩個元素,說明要使用哪個目標(或哪個 Maven 的目標)清理和構建源樹。對于 Maven,典型的值可能是<clean>clean</clean>和<build>jar:install-snapshot</build>。對于 Ant,可能需要檢查 build.xml 文件來找到目標的名稱。
假設項目的源在 /home/cruise/src 目錄下,根據項目命名,那么name屬性為my-project的項目的源應當在 /home/cruise/src/my-project 中。有些項目擁有大型源樹,擁有可以單獨構建的子目錄;為了處理這種情況,<project>元素可以包含可選的<srcdir>元素,由它指定 /home/cruise/src 目錄的特定子目錄。例如:
<project name="my-utils"> <srcdir>big-project/my-utils</srcdir> ...
CruiseControl 默認的行為是向上次構建之后簽入變更的每個人發送電子郵件。如果是從遠程版本控制倉庫中拉出源代碼,請添加<remote-project/>元素,這可以使電子郵件發送到 meta-config.xsl 文件中指定的developers-address地址。
項目間的依賴關系
CruiseControl 并不知道項目之間的依賴關系?赡苡幸粋項目生成的 JAR 文件包含的工具類集合是其他許多項目依賴的,但是除非向 CruiseControl 解釋這個關系,否則它對這個關系將毫不知情?梢詫ぞ哳惖捻椖窟M行修改,從而造成它被重新構建,但是依賴它的項目不會針對工具類的新版本重新被構建和測試。這可能會降低集成測試的價值,所以出現了對這一問題的一些解決方案。
CruiseControl 為這個目的提供的主要工具是<filesystem>元素?梢园堰@個元素包含在某個項目的<modificationset>小節中,這樣只要文件系統的某些區域發生了修改,項目就會被重新構建。清單 1中初始的 config.xml 文件就采用這種方式,在強制構建目錄中的文件發生修改時,觸發重新構建。所有的項目都會在文件系統的某個位置創建或更新制品。(例如,作為工具類項目的構建結果,會更新自己產生的 JAR 文件。)可以在<filesystem>元素中用這些位置,觸發依賴這些制品的項目進行構建。
文章來源于領測軟件測試網 http://www.kjueaiud.com/