目前為止運行的 CruiseControl 安裝把每個構建的結果用電子郵件消息發送給開發人員。但是開發過程可能包含不是這些消息收件人的人員 —— 例如,項目管理人員或測試人員。CruiseControl 包含一個簡單的 Web 應用程序,可以讓這些人員監視持續集成構建。
CruiseControl Web 應用程序在 Apache Tomcat 應用程序服務器中運行,使用的是包含在 Fedora Core 4 發行版中的拷貝。需要安裝 tomcat5
和 tomcat5-admin-webapps
包:
[root@fcvm ~]# yum install tomcat5 tomcat5-admin-webapps
[...]
Installed: tomcat5.i386 0:5.0.30-5jpp_6fc tomcat5-admin-webapps.i386 0:5.0.30-5jpp_6fc
Dependency Installed: tomcat5-jasper.i386 0:5.0.30-5jpp_6fc
Complete!
[root@fcvm ~]# |
還需要安裝 Java 事務 API(JTA)的一個實現?梢杂 JPackage 中(請參閱 參考資料)的 RPM 規范文件構建自己的 JTA RPM,但是最簡單的選擇就是安裝來自 Fedora 倉庫的 geronimo-specs
和 geronimo-specs-compat
:
[root@fcvm ~]# rpm -Uvh http://download.fedora.redhat.com/\ pub/fedora/linux/core/development/i386/Fedora/RPMS/\ geronimo-specs-1.0-0.M2.2jpp_4fc.i386.rpm Preparing... ################################### [100%] 1:geronimo-specs ################################### [100%] [root@fcvm ~]# rpm -Uvh http://download.fedora.redhat.com/\ pub/fedora/linux/core/development/i386/Fedora/RPMS/\ geronimo-specs-compat-1.0-0.M2.2jpp_4fc.i386.rpm Preparing... ################################### [100%] 1:geronimo-specs-compat ################################### [100%] [root@fcvm ~]# |
使用默認的 Tomcat 安裝,CruiseControl Web 應用程序會找不到合適的 JAXP TransformerFactory
實現,所以需要向選定的類目錄添加默認 JAXP XML 轉換器:
[root@fcvm ~]# cd /usr/share/tomcat5/common/endorsed [root@fcvm endorsed]# ln -s /usr/share/java/jaxp_transform_impl.jar \ \[jaxp_transform_impl\].jar [root@fcvm endorsed]# ls -l total 12 lrwxrwxrwx 1 root root 36 Sep 19 01:33 [jaxp_parser_impl].jar -> /usr /share/java/jaxp_parser_impl.jar lrwxrwxrwx 1 root root 39 Sep 19 01:47 [jaxp_transform_impl].jar -> / usr/share/java/jaxp_transform_impl.jar lrwxrwxrwx 1 root root 36 Sep 19 01:33 [xml-commons-apis].jar -> /usr /share/java/xml-commons-apis.jar [root@fcvm endorsed]# |
CruiseControl Web 應用程序可以繪制重要的構建統計圖,例如成功構建與失敗構建的比例。畫圖的庫要使用 Java AWT,所以需要確保 JVM 運行在 headless 模式。要做到這一點,請編輯 /etc/tomcat5/tomcat5.conf 文件,并插入下面這一行:JAVA_OPTS="-Djava.awt.headless=true"
,位置大約在第 10 行。
現在,在 /etc/tomcat5/Catalina/localhost 下創建一個叫作 cruisecontrol.xml 的文件,把 CruiseControl Web 應用程序添加到 Tomcat 的配置。清單 5 顯示了這個文件的內容:
清單 5. /etc/tomcat5/Catalina/localhost/cruisecontrol.xml 的內容
<Context path="/cruisecontrol" docBase="/home/cruise/pkg/cruisecontrol-2.2.1/reporting/jsp/d ist/cruisecontrol.war"> <Parameter name="logDir" value="/home/cruise/log/build" override="false"/> <Parameter name="cacheRoot" value="/var/cache/tomcat5/cruisecontrol" override="false"/> </Context> |
請注意,清單 5 中的第二行出于顯示的原因進行了回繞。docBase
屬性在創建的文件中應該單獨占一行。
還需要為 CruiseControl Web 應用程序創建一個保存頁面緩存的目錄:
[root@fcvm ~]# cd /var/cache/tomcat5 [root@fcvm tomcat5]# mkdir cruisecontrol [root@fcvm tomcat5]# chgrp tomcat cruisecontrol [root@fcvm tomcat5]# chmod g+w cruisecontrol [root@fcvm tomcat5]# ls -l total 24 drwxrwxr-x 2 root tomcat 4096 Sep 16 09:32 cruisecontrol drwxrwxr-x 2 root tomcat 4096 May 10 11:57 temp drwxrwxr-x 3 root tomcat 4096 Sep 15 22:53 work [root@fcvm tomcat5]# |
現在可以啟動 Tomcat,并把它設置成在系統啟動時重啟。啟動腳本目前會生成一些警告信息,但是可以忽略它們:
[root@fcvm ~]# service tomcat5 start Starting tomcat5: find: warning: you have specified the -mindepth opti on after a non-option argument -type, but options are not positional ( -mindepth affects tests specified before it as well as those specified after it). Please specify options before other arguments. find: warning: you have specified the -maxdepth option after a non-opt ion argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Pleas e specify options before other arguments. Using CATALINA_BASE: /usr/share/tomcat5 Using CATALINA_HOME: /usr/share/tomcat5 Using CATALINA_TMPDIR: /usr/share/tomcat5/temp Using JAVA_HOME: /usr/lib/jvm/java [ OK ] [root@fcvm ~]# chkconfig tomcat5 on [root@fcvm ~]# chkconfig --list tomcat5 tomcat5 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@fcvm ~]# |
現在應當能夠用瀏覽器在 http://localhost:8080/cruisecontrol/ 上訪問 CruiseControl Web 應用程序了。圖 1 顯示了將會看到的輸出的示例:
圖 1. CruiseControl Web 應用程序

在我總結之前,我要指出兩個配置和運行自己的持續集成服務器所涉及的安全性問題。首先,我沒有解決構建服務器的訪問安全問題。您應當參考其他信息來源以確保您的系統安全,或者在提供適當保護的內部網絡上運行它。
其次,對于要在持續集成服務器上構建的外部項目的開發人員,您要考慮對他們要信任到什么程度。項目的構建過程和單元測試可以訪問服務器的資源,包括服務器連接的網絡。自動構建過程意味著提交給遠程版本控制倉庫的變更會在沒有人為干預的情況下,自動下載到構建服務器并在上面執行。這就把構建服務器置于提交給源樹的 bug 和惡意代碼的風險之下。您可能想限制在構建服務器上構建的外部項目,或者做些工作來保護系統和網絡不受正在構建的項目的影響。
這篇文章介紹了運行 CruiseControl 的持續集成服務器的設置步驟。您安裝了 CruiseControl 并學習了保持服務器一直運行需要做的工作,還了解了持續集成服務器的日常管理工作。而且還把配置的重要元素提取到更簡單的 XML 文檔中,包括版本控制和構建工具的選擇以及用來構建每個項目的目標。
現在您學會了如何指定項目之間的依賴性。對于 Maven 項目來說指定比較容易,因為它們擁有一致的構建過程,生成的制品也有共享的倉庫。Ant 則把這些機制留給每個項目,但是如果許多 Ant 項目都有公共的構建過程,那么可以用生成的 <filesystem>
元素對配置進行擴展,模擬這些項目之間的依賴性。CruiseControl 還有其他許多控制,可以用來增強持續集成過程?梢酝ㄟ^我介紹的 XSLT 樣式表輕松地利用它們。
我快速介紹了運行 CruiseControl Web 應用程序需要的步驟,但是您可以提高自己安裝的安全性和可靠性。更安全的配置可以使用 Apache 的 httpd
處理請求并把它們交給 Tomcat。讓 daemontools
管理 Tomcat JVM(就像配置它來管理 CruiseControl 本身那樣)可能更可靠。除此之外,還應當考慮構建服務器和構建服務器所在網絡的安全需求,并嘗試 Linux 提供的一些安全工具。
這篇文章的目的是通過采取持續集成方式,讓開發過程更敏捷并提高軟件的質量。創建構建服務器是具體而實用的一步,采用敏捷開發方法的更多實踐還會得到進一步提高。我鼓勵您閱讀關于這些方法的更多內容(請參閱 參考資料)并用它們的想法來提高和調整開發過程。
文章來源于領測軟件測試網 http://www.kjueaiud.com/