持續(xù)集成
3.1準備工作
- 版本控制
與項目相關(guān)的內(nèi)容必須提交到版本控制庫 - 自動化構(gòu)建
人和計算機之間可通過命令行自動執(zhí)行應用的構(gòu)建、測試以及部署的過程 - 團隊共識
修復破壞應用程序的任意修改是最高優(yōu)先級的任務(wù)
3.2一個基本的持續(xù)集成系統(tǒng)
若要提交修改更新的代碼
(1)查看是否有構(gòu)建正在運行
(2)一旦構(gòu)建完成且測試全部通過,就從版本控制庫中將該版本更新到自己的開發(fā)環(huán)境
(3)在自己的開發(fā)機上執(zhí)行構(gòu)建腳本,運行測試,確保機器上的代碼正常運行
(4)如果在本地構(gòu)建成功,將代碼提交到版本控制庫中
(5)等待包含你的這次提交的構(gòu)建結(jié)果
(6)如果構(gòu)建失敗,停下手中的事,在自己的開發(fā)機上立即修復這個問題,跳轉(zhuǎn)到步驟(3)
(7)構(gòu)建成功,開始下一項任務(wù)
3.3持續(xù)集成的前提條件
- 頻繁提交
- 創(chuàng)建全面的自動化測試套件
單元測試:測試某些小單元的行為(方法、函數(shù)、一小組方法或函數(shù)之間的交互)——不需要啟動整個應用,不需要連接數(shù)據(jù)庫,
組件測試:測試應用程序中幾個組件的行為
驗收測試:應用程序是否滿足業(yè)務(wù)需求所定義的驗收條件(如功能、容量、安全性、有效性)——應用程序運行于類生產(chǎn)環(huán)境
- 保持較短的測試和構(gòu)建過程
- 管理開發(fā)工作區(qū)
1.在本地開發(fā)環(huán)境上運行應用程序時,確保所使用的自動化過程與程序集成環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境中的一致。
2.“最新的正確版本”——在持續(xù)集成服務(wù)器上最近一次通過所有自動化測試的那個版本。
3.第三方庫文件和組件版本與正在開發(fā)的源代碼的版本相互匹配(工具:Maven和Ivy)
4.確保自動化測試(冒煙測試)都能夠在開發(fā)機上運行。
對于大型系統(tǒng)——可能要在在開發(fā)機上配置中間件、運行內(nèi)存數(shù)據(jù)庫或單用戶數(shù)據(jù)庫。
3.4使用持續(xù)集成軟件
1.基本操作:
- 一直運行的進程——每隔一段時間就執(zhí)行一個簡單的工作流程
- 提供展現(xiàn)這個流程運行結(jié)果的視圖——通知構(gòu)建和測試是否成功
2.鈴聲和口哨
3.5必不可少的實踐
- 構(gòu)建失敗之后不要提交新代碼
- 提交前在本地運行所有的提交測試,或讓持續(xù)集成服務(wù)器(Pulse、TeamCity、ElectricCommander)完成此事
- 等提交測試通過后再繼續(xù)工作
- 回家之前,構(gòu)建必須處于成功狀態(tài)
- 時刻準備著回滾到前一個版本
- 在回滾之前必須規(guī)定一個修復時間
- 不要將失敗的測試注釋掉
- 為自己導致的問題負責
- 測試驅(qū)動的開發(fā)
3.6推薦的實踐
1.極限編程開發(fā)實踐
重構(gòu)——一系列小的增量式修改來改善代碼結(jié)構(gòu),但不改變軟件的外部行為
2.若違背架構(gòu)原則,就讓構(gòu)建失敗
3.若測試運行變慢,就讓構(gòu)建失敗
生產(chǎn)率提高,錯誤減少、頻繁提交、快速修復。
4.若有編譯警告或代碼風格問題,就讓構(gòu)建失敗
代碼質(zhì)量檢查的開源工具
- Simian——代碼重復;
- JDepend——設(shè)計質(zhì)量評估(Java)
- CheckStyle——對“爛代碼”(嵌套的代碼塊、公共構(gòu)造函數(shù)、比較長的代碼行)做一些檢查(容易擴展)
- FindBugs——Java軟件(CheckStyle的代替品)
3.7分布式團隊
1.流程問題
2.集中式持續(xù)集成
3.技術(shù)問題(網(wǎng)速不佳——建立更高的帶寬通信機制)
4.本地化版本控制系統(tǒng)的存取問題(本地建立持續(xù)集成系統(tǒng))
- 將應用程序分為多個組件
- 使用分布式或支持多主庫拓撲結(jié)構(gòu)的版本控制系統(tǒng)
3.8分布式版本控制系統(tǒng)(DVCS)

git remote add core git://github.com/rapidsms/rapidsms.git
項目主代碼庫的一個分支加到每個CC.rb(持續(xù)集成工具)監(jiān)控的git代碼庫中。每次觸發(fā)構(gòu)建時,CC.rb會嘗試合并且運行構(gòu)建。
git fetch core
git merge --no-commit core/master
構(gòu)建之后CC.rb會運行git reset -hard將本地的儲存庫指向Head;
總結(jié)與感悟
在本章我了解了持續(xù)集成的必要性及其每個成員都必須具備的職業(yè)素養(yǎng)。
持續(xù)集成的益處
- 使應用程序一直處在可工作的的狀態(tài)
- 創(chuàng)建了一個快速的反饋環(huán),使其可以快速的發(fā)現(xiàn)問題、解決問題,修復成本降低。
- 迫使遵循良好的配置管理和創(chuàng)建并維護一個自動化構(gòu)建及測試流程