Site icon Soul & Shell Blog

Continuous Integration 【持續整合】與 Nightly Build【每日建置】+ Hudson 介紹

淺談 CI, Continuous Integration (持續整合)

當系統開發過程處於 Team Work 的情況下,我們通常會使用版本控制(像是SVN, CVS)的機制進行程式碼的同步開發,但有時會產生 Integration Hell (整合地獄) 這種讓人抓狂的情況。什麼是 Integration Hell 呢?就是當你想 Commit 程式碼的時候發現發生衝突,或者無緣無故 Update 之後先前所撰寫的程式碼被覆蓋,甚至憑空消失。雖然可以由版本控制系統來回復這些檔案,或者花上更多時間來處理程式碼合併的問題,然而我們何不透過良好的 Commit 習慣來減少與避免這些麻煩的產生。

當軟體專案執行的過程越長,所累積的程式碼也越複雜,整合變得相當不容易,持續整合目 的就是在解決與改進這樣的問題。持續整合顧名思義就是隨時整合,無時無刻都在進行整合,整合的過程會驗證程式碼的正確性與單元測試等等。當程式碼被更新與 改變時,立即進行自動化的整合作業,自動化在持續整合中扮演重要的角色,我想你不會希望每 Commit 一次就招集各個子系統的開發人員進行手動測試。

當程式碼一改變就進行整合,這樣的好處為不必等到整合出現重大問題的時候才來改寫系統,此外透過自動化的整合與測試工作,隨時做好品質管理,提昇系統品質。伴隨著建置報表的分析可以讓管理者發現系統的潛在問題,提早做出預防措施,降低專案失敗的風險。

在 Agile Software Development (敏捷開發) 方法論與其著名的 XP, eXtreme Programming (極限編程) 實作理念中皆有提出持續整合的重要性,在 M$ VSTS 2010 (Visual Studio Team System 2010) 也使用的一樣的概念。可現持續整合對於軟體工程來說越來越受到重視。

持續整合的概念上希望開發者做到以下幾個重點:

  • Maintain a Single Source Repository
    使用版本控制來管理程式碼,像是 SVN, CVS等。
  • Everyone Commits To the Mainline Every Day
    每天都 Commit 撰寫的程式碼,減少程式碼衝突的情況。
  • Every Commit Should Build the Mainline on an Integration Machine
    每一次 Commit 都進行建置 (Build)與整合,提早發現程式錯誤。
  • Automate the Build
    專案自動建置,每一個 Commit (程式碼上傳) 都進行建置工作。
  • Make Your Build Self-Testing
    程式碼進行有效的切割,使得程式變得更容易維護。並且撰寫單元測試,將片段式的程式在建置後進行自我測試。
  • Test in a Clone of the Production Environment
    提供一個穩健的建置與測試環境,這個環境必須相當接近真實的執行環境,採用 VM 來實作 Nightly Build 是不錯的選擇。

持續整合 = 平時要用功,不可臨時抱佛腳。

Hudson 持續整合與自動建置工具

Hudson 為一套實作持續整合與自動建置的工具,功能與另一套 CruiseControl 並列前茅。Hudson 使用 Java 開發完成,使用 WAR 檔的方式進行安裝,除了本身提供的功能外,還有其他許多的 Plugin 支援。

後記:後來 Hudson 掛上 ORACLE 之後,我就改用 Jenkins 囉(跟 Hubson 一樣而且管家長的比較可愛!)

Hudson 安裝教學

  1. 下載 hudson.war 網址如下:
    http://hudson-ci.org/latest/hudson.war
  2. 下載任何一項支援 Servlet 的 Web Container (Jetty 或 Tomcat 都可以),將 hudson 放在 webapps 目錄中,啟動伺服器這樣就安裝完成了。
  3. 連進網址 http://127.0.0.1:8080/hudson 會看到以下畫面

結論

在 實作與執行持續整合的過程中是痛苦的,必須規劃出專案的標準結構,且需要對開發人員進行適當的教育訓練。在建立自動化建置也會花上許多時間,畢竟要將原本 手動操作的安裝打包佈署工作進行自動化。在程式設計師沒有優良的素質下也不容易撰寫出可進行測試的程式碼,但是持續整合確實能夠有效提高系統品質。藉由這 樣的系統開法手法來牽制程式設計師所撰寫的程式品質,未來在維護上也有很大的幫助。對於整的專案進行的過程中,可以幫助團隊掌握開發節奏。

參考資料

Exit mobile version