近在IBM developerWorks發表的一篇文章中談到了如何使用開源工具將構建過程中的持續集成(Continuous Integration,CI)和代碼檢查這兩項任務自動化。它描述了如何安裝和配置Hudson——一款由java.net社區開發的CI服務器,一旦檢測到源碼發生變化時,它會從Subversion代碼倉庫中獲取新代碼,并運行Ant構建腳本。
作者Andrew Glover將如下三項作為了典型CI環境設置的主要組件:
一個使用構建工具(如Apache Ant)的自動化構建過程。
像CVS或Subversion之類的源碼倉庫。
CI服務器,如Hudson。
Andrew用了一個java應用為例,講述了如何在Hudson服務器上配置java項目,從而運行自動化構建。他還展示了如何通過Hudson的插件擴展將類似于FindBugs和PMD的代碼分析和軟件檢查工具進行集成。
在 文章中,作者闡述了如何使用Hudson來捕獲構建過程的執行時間和測試結果所反映的趨勢。在每一次構建中,CI服務器都會對JUnit結果的XML文件 進行解析,并生成一個趨勢圖,用于展示在相鄰的兩次構建之間,增加了多少個測試。同時,它還可顯示出測試是否通過(藍圖表示通過,紅圖表示失敗)。通過 PMD或者FindBugs發現的代碼沖突或是缺陷,都會在每一次構建后被記錄下來,以供歷史分析。
還可以為Hudson配置一個SMTP服務器,從而在構建失敗時向整個項目團隊發送郵件提醒。它還支持使用RSS作為提醒機制,開發團隊可以通過RSS feeds來訂閱項目的構建狀態頁面。
Hudson同時支持JUnit和TestNG這兩種測試框架。它還可以與其它SCM工具(如CVS,ClearCase或Accurev )和構建工具(如Maven和Gant)進行集成。在Hudson網站上列出了所有的插件,我們可以看到,它可以和眾多的開源或是商業的SCM、代碼覆蓋和問題跟蹤工具進行集成。
在developerWorks上的另外一篇有關CI話題的文章中,Paul Duvall向讀者展示了在建立CI環境時的一些佳實踐,并指出如何避免一些錯誤做法(他把它們稱之為CI反模式)。這些佳實踐是:
開發者應該頻繁提交小段代碼,而不是等上很長時間以后,一次性的提交很多變化;
當構建失敗時,CI服務器應該立刻通知項目團隊;
應當使用類似E-mail或者RSS之類的反饋機制來與項目團隊報告構建狀態;
構建狀態反饋應該簡潔,只應該包括與構建相關的信息;
構建服務器應該有足夠的硬件配置,從而進行更快的構建;
項目團隊應遵循“管道式構建”的原則來異步執行那些需要較長時間才能運行完的構建過程。