極限編程和敏捷方法建議開發過程要包含持續集成和單元測試。支持這些實踐的一個實際方法是設置一個自動系統,每次在源代碼發生變化時,都自動構建和測試源代碼的最新版本。這篇文章將介紹為 Java™ 項目建立基于 Linux™ 的構建服務器時涉及的實際問題。
這篇文章介紹的是 CruiseControl,這是一個開放源碼軟件,可以用它對有多個開發人員參與的軟件項目自動進行構建和單元測試。我將解釋為什么自動化構建對于成功的開發團隊是至關重要的,并一步步介紹運行 CruiseControl 的持續集成系統的配置、安裝和維護。
目前的一般實踐是使用版本控制系統,例如 CVS 或 Subversion(請參閱 參考資料)。當有多個開發人員在同一個系統上工作時,這類協調就至關重要了。另一個正在流行起來的實踐是編寫單元測試,并把它們作為構建過程的一部分來運行。例如,Maven 這個構建工具就把運行 JUnit 單元測試作為正常構建過程的一部分(請參閱 參考資料)。但是采用這些實踐僅僅是個開始。它們構成了近幾年發展起來的許多輕量和實用軟件開發方法的基礎。
![]() |
|
當有許多開發人員在同一個項目上工作時,重要的就是要確保構版本控制系統中代碼的最新版本一直被構建。。這對于擁有封閉開發團隊的項目來說是個好的實踐;當開發人員周期性地把自己的工作區與主干同步時,一個不進行構建的源樹會繼續進行開發,直到能修正它為止。對于開放源碼項目,保持主干可以工作是至關重要的。潛在的新開發人員可以在任何時候檢出代碼,但是如果代碼不能構建,新開發人員可能就被擋在了做貢獻的隊伍之外。
極限編程(XP)方法論主張 持續集成。開發人員應當盡可能頻繁地把他們的代碼集成進主干 —— 典型的是幾小時一次,同時還要確保所有單元測試都能通過。其他敏捷方法論也同意這個建議。
要采用持續集成和單元測試,需要團隊接受這些方法和實踐,但是這通常還不夠。目前的實踐依賴手工步驟 —— 集成代碼、運行測試、在合適的時間檢入代碼,這樣的實踐有可能造成錯誤。讓自動系統來構建代碼、運行單元測試,可能是更可靠的解決方案。
這篇文章剩下的部分將介紹使用 CruiseControl 為 Java 項目配置構建服務器所涉及的步驟,CruiseControl 是一個管理自動構建過程的軟件(請參閱 參考資料)。CruiseControl 需要一臺可靠的機器,擁有充足的剩余磁盤空間,但并不需要特別快。(需要的是定期構建,但是構建過程本身需要花 2 分鐘還是 20 分鐘并不是問題。)將要構建的服務器基于 Fedora Core 4,這是一個由 Red Hat 資助的社區開發版的 Linux 發行版(請參閱 參考資料),所以需要有一些 Unix 經驗。這篇文章涉及的主要任務有:
- 系統的初始配置,以及設置一個運行 CruiseControl 的用戶帳戶
- 安裝 CruiseControl 并配置第一個構建
- 讓 CruiseControl 一直運行
- 簡化 CruiseControl 配置
- 設置可選的基于瀏覽器的界面,用來監視 CruiseControl 構建
第一件事是確保在系統上安裝了 Java 的基本開發所需要的全部軟件。Fedora Core 4 包含基于 gcj(來自 GNU 編譯器集合(gcc)項目的 Java 編譯器)的 Java 工具鏈,但是出于兼容性的原因,最好是安裝來自 IBM 或 Sun 的 JDK。最干凈的方法是按照 jpackage.org 上的說明(請參閱 參考資料),構建和安裝自己的 Java RPM。Fedora Core 4 自帶的 xerces-j2 包構建得不正確,造成 Xalan XSLT 實現不能工作。所以還需要從 Fedora 開發倉庫安裝更新的 xerces-j2 包(請參閱 參考資料)。
還需要使用其他一些軟件:
- XMLStarlet,一個有用的命令行程序,用來管理 XML 文檔(請參閱 參考資料)。稍后 將用它來簡化 CruiseControl 配置文件的維護。
- CVS 和 Subversion:需要安裝這些工具,以便從構建的源樹中下載更新。幸運的是,Fedora Core 4 中包含這兩個工具。
要執行這些步驟,必須以 root 登錄。首先,下面是系統上應當有的 RPM:
[root@fcvm ~]# ls
java-1.4.2-sun-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-alsa-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-demo-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-devel-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-fonts-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-jdbc-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-plugin-1.4.2.08-1jpp.i586.rpm
java-1.4.2-sun-src-1.4.2.08-1jpp.i586.rpm
xerces-j2-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-demo-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-javadoc-apis-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-javadoc-dom3-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-javadoc-impl-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-javadoc-other-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-javadoc-xni-2.6.2-5jpp_2fc.i386.rpm
xerces-j2-scripts-2.6.2-5jpp_2fc.i386.rpm
xmlstarlet-1.0.1-1.i586.rpm
[root@fcvm ~]# |
安裝 Java、Xerces、XMLStarlet 和 Subversion 包:
[root@fcvm ~]# rpm -ivh java-1.4.2-sun-1.4.2.08-1jpp.i586.rpm \ java-1.4.2-sun-alsa-1.4.2.08-1jpp.i586.rpm \ java-1.4.2-sun-devel-1.4.2.08-1jpp.i586.rpm \ java-1.4.2-sun-fonts-1.4.2.08-1jpp.i586.rpm \ java-1.4.2-sun-plugin-1.4.2.08-1jpp.i586.rpm \ java-1.4.2-sun-src-1.4.2.08-1jpp.i586.rpm Preparing... ################################# [100%] 1:java-1.4.2-sun ################################# [ 17%] 2:java-1.4.2-sun-alsa ################################# [ 33%] 3:java-1.4.2-sun-devel ################################# [ 50%] 4:java-1.4.2-sun-fonts ################################# [ 67%] 5:java-1.4.2-sun-plugin ################################# [ 83%] 6:java-1.4.2-sun-src ################################# [100%] [root@fcvm ~]# java -version java version "1.4.2_08" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03) Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode) [root@fcvm ~]# rpm -Uvh xerces-j2-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-demo-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-javadoc-apis-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-javadoc-dom3-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-javadoc-impl-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-javadoc-other-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-javadoc-xni-2.6.2-5jpp_2fc.i386.rpm \ xerces-j2-scripts-2.6.2-5jpp_2fc.i386.rpm Preparing... ################################# [100%] 1:xerces-j2 ################################# [ 13%] 2:xerces-j2-demo ################################# [ 25%] 3:xerces-j2-javadoc-apis ################################# [ 38%] 4:xerces-j2-javadoc-dom3 ################################# [ 50%] 5:xerces-j2-javadoc-impl ################################# [ 63%] 6:xerces-j2-javadoc-other################################# [ 75%] 7:xerces-j2-javadoc-xni ################################# [ 88%] 8:xerces-j2-scripts ################################# [100%] [root@fcvm ~]# rpm -ivh xmlstarlet-1.0.1-1.i586.rpm Preparing... ################################# [100%] 1:xmlstarlet ################################# [100%] [root@fcvm ~]# yum install subversion [...] Installed: subversion.i386 0:1.2.3-2.1 Complete! [root@fcvm ~]# |
還需要在服務器上創建一個新的用戶帳戶,由它擁有運行 CruiseControl 時涉及的文件和進程:
[root@fcvm ~]# useradd cruise [root@fcvm ~]# su - cruise [cruise@fcvm ~]$ pwd /home/cruise [cruise@fcvm ~]$ |
最后,因為將要構建的某些項目要使用 Maven 構建工具,所以需要下載、安裝它,并設置適當的環境變量(請參閱 參考資料)。(JAVA_HOME
應當設置為 /usr/lib/jvm/java。)我的習慣是把 Maven 和 CruiseControl 這樣的外部包放在叫作 pkg 的目錄中。在 Maven 的 Web 站點上有完整的安裝說明,所以我在這里就不詳細介紹這個步驟了:
[cruise@fcvm ~]$ mkdir pkg [cruise@fcvm ~]$ cd pkg [cruise@fcvm pkg]$ [install Maven] |
文章來源于領測軟件測試網 http://www.kjueaiud.com/