當紅炸子雞:Continuous Integration

此篇文章最近更新時間為2009-06-01 05:21:05 目前共有5篇留言

關於作者 - JosephJ

任職於 Faria。喜好戶外運動、2008 年 5 月完成「跑步環島」。對於新技術跟程式碼有著強烈的偏執狂。

flickrsendr

今天 Chief Architecturer Raymie 來台演說最近公司持續在做的 Continuous Integration(簡稱 CI)。整理一下上課筆記:


什麼是 Continuous Integration

軟體開發常見的問題就是不同的開發人員不斷地增加 Code,但卻缺乏規範及完整測試,所以經過一段時間的累積程式往往變的難以辨認及維護、其他人也沒辦法接手;或者由於規模變大必須要對程式做翻新以因應需求。所以我們最常有的想法就是「打掉重練」,常常因此這樣浪費了許多的時間。

CI 主要概念

  1. 開發人員將程式碼拆分成小、易維護的片段
  2. 開發人員針對這些片段做測試(例如 Code Sniffering、Documentation、Unit Testing)。
  3. 開發人員每天 Commit 程式到版本控管系統上。
  4. 系統會自動每天在下班時,將程式從版本控管系統上 Update 下來,並經過所有相關測試與工作,產出 Nightly Build 與一份報表(例如 Code Coverage 與錯誤、警告的地方)。

CI 的好處

藉由這樣的流程讓參與的開發人員可以從整體檢驗自己的程式,例如是否跟別人有相衝突,也可以在第一時間解決 Bug,不需要等到 QA 階段或上線後才發現。因此我們隨時都有一個前一天的環境來觀看錯誤、持續修正。另外由於開發者需持續地符合規範、寫文件、做測試,即使哪天原本的人不在了,接手的人在工具一致、規範一致的情況下也可以馬上上手。而程式未來需要因應成長來改寫時也會相對簡單且變動小

成功整合 CI 的衡量點

公司內衡量整合 CI 是否成功有以下幾點:
  1. 是否使用一致的 Version Control ? (一律需要轉換到 SVN )
  2. 是否使用一致的 Tool ? (一律使用 Hudson)
  3. 建立 Build 是否夠快速 ? (標準是 10 分鐘做完所有事情

目前已經做的 CI

這邊較有趣的部份是在 Tool,Hudson 我得找時間了解,據說是個可以安裝很多 Build Plug-ins 的 Framework。目前我們 Team 還沒整合 Hudson,不過有些地方已經開始在做了,像是:
  • 考量 build 的目錄架構。
  • 規定 Coding Convention 將 Code 改寫持續用 PHP_CodeSniffer 來掃。
  • 將 Function 加上 Documentation 用 Doxygen 產生文件。
  • 撰寫 Unit Test Case,用 phpUnit 來跑。
  • 抽 Interface 讓未來的 Scalability 增加。
持續還要做的會是整合 Hudson、自動化打包流程、前端的 JavaScript / CSS 也需要有跟上面對應的工作。

結語

我覺得很好玩,因為是在做對的事情,也比較像是軟體公司應該要有的方向。而 Raymie 也提到我們應該也把 CI 過程中產生的 Best Practice 分享給 Open Source Community。這個點子不錯,當大家的想法接近時,往往可以獲得更多的回饋。
原始 Continous Integration 的概念:http://martinfowler.com/articles/continuousIntegration.html


Comments

  1. Joe 2009-08-19 11:55:52
    We did some trial on the frontend javascript testing and successfully used YUI Test to generate nice report that could fit into Hudson. With backend, we are all set.
  2. clay0529 2009-06-02 16:38:29
    hudson很不錯用喔! 非常推薦!
  3. tempo 2009-06-01 23:37:37
    我們也用 hudson, 用到現在 (之前用 cruise control, continuum) 算是最好的 CI solution~
    不過可以有 commit 就 build, 這樣可以比較快看到結果, 也比較快能夠修好~ (除非 build 要花太久時間)
  4. josephj 2009-06-01 20:58:38
    比較偏 Process 耶:
    每天要 Commit、要建立 Build、所用的工具要統一
    前端的部份像是 YUI Doc / YUI Profile / YUI Test / YUI Build 就是 F2E 要考慮的
    每天要跑這些工具
    也要去建立自動化的測試環境、產生報表
  5. 貝姬 2009-06-01 20:33:07
    感謝分享耶~ 下午因為趕東西沒去聽 原來是講framework啊 :D
暱稱: 必填。
Email: 非必填。若填寫為不公開欄位,僅供站長參考聯繫。
內容: 必填。限 255 個字元以內。
驗證碼:
送出

Facebook Comment