2005 年 10 月 24 日
極限編程和敏捷方法建議開發過程要包含持續集成和單元測試。支持這些實踐的一個實際方法是設置一個自動系統,每次在源代碼發生變化時,都自動構建和測試源代碼的最新版本。這篇文章將介紹為Java™ 項目建立基于 Linux™ 的構建服務器時涉及的實際問題。這篇文章介紹的是 CruiseControl,這是一個開放源碼軟件,可以用它對有多個開發人員參與的軟件項目自動進行構建和單元測試。我將解釋為什么自動化構建對于成功的開發團隊是至關重要的,并一步步介紹運行 CruiseControl 的持續集成系統的配置、安裝和維護。
為什么要自動進行構建?
目前的一般實踐是使用版本控制系統,例如 CVS 或 Subversion(請參閱參考資料)。當有多個開發人員在同一個系統上工作時,這類協調就至關重要了。另一個正在流行起來的實踐是編寫單元測試,并把它們作為構建過程的一部分來運行。例如,Maven 這個構建工具就把運行 JUnit 單元測試作為正常構建過程的一部分(請參閱參考資料)。但是采用這些實踐僅僅是個開始。它們構成了近幾年發展起來的許多輕量和實用軟件開發方法的基礎。
mozilla.org 上的持續集成
從 Mozilla 項目使用的開發方法中,可以學到許多東西,這是以公開方式進行的最大的開發項目之一。Mozilla 團隊過程的關鍵部分,就是保持樹的構建,而且他們還記錄下了他們采用的實踐。他們的一個重要工具就是 tinderbox 系統,它持續地在許多不同的平臺上構建和測試源樹(請參閱參考資料)。
當有許多開發人員在同一個項目上工作時,重要的就是要確保構版本控制系統中代碼的最新版本一直被構建。。這對于擁有封閉開發團隊的項目來說是個好的實踐;當開發人員周期性地把自己的工作區與主干同步時,一個不進行構建的源樹會繼續進行開發,直到能修正它為止。對于開放源碼項目,保持主干可以工作是至關重要的。潛在的新開發人員可以在任何時候檢出代碼,但是如果代碼不能構建,新開發人員可能就被擋在了做貢獻的隊伍之外。
極限編程(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 包(請參閱參考資料)。
文章來源于領測軟件測試網 http://www.kjueaiud.com/