持續(xù)交付第三章

持續(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)建及測試流程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容