為什么要做持續(xù)集成
在軟件開(kāi)發(fā)過(guò)程中耸别, 由于各個(gè)模塊之間的聯(lián)系涮因,開(kāi)發(fā)的單個(gè)模塊不能在試運(yùn)行環(huán)境中運(yùn)行装盯,所以在驗(yàn)收階段可能會(huì)出現(xiàn)各種錯(cuò)誤坷虑,集成效率就會(huì)因此降低。有了持續(xù)集成埂奈,每次的修改都可以運(yùn)行迄损,保證了程序的可執(zhí)行性,能夠及時(shí)發(fā)現(xiàn)錯(cuò)誤账磺。
持續(xù)集成需要注意的
- 在持續(xù)集成服務(wù)器上提交自己新的代碼之前芹敌,要確保自己的環(huán)境運(yùn)行正常
- 一旦構(gòu)建失敗要及時(shí)修復(fù)問(wèn)題
持續(xù)集成需要使用的測(cè)試
- 單元測(cè)試:一般是對(duì)一些小單元的行為測(cè)試痊远,比如方法,函數(shù)等氏捞,不需要連接數(shù)據(jù)庫(kù)碧聪,系統(tǒng)文件,或網(wǎng)絡(luò)幌衣,也不需要部署應(yīng)用程序矾削,所以一般運(yùn)行速度非橙烂担快豁护。
- 組件測(cè)試:用于測(cè)試程序中幾個(gè)組件的行為,同樣不需要啟動(dòng)整個(gè)程序欲间,但可能需要連接數(shù)據(jù)庫(kù)楚里,訪問(wèn)文件系統(tǒng)等,運(yùn)行時(shí)間較長(zhǎng)猎贴。
- 驗(yàn)收測(cè)試:驗(yàn)證應(yīng)用程序是否滿足業(yè)務(wù)需求所定義的驗(yàn)收條件班缎。一般推薦將整個(gè)程序運(yùn)行于類(lèi)生產(chǎn)環(huán)境中,運(yùn)行時(shí)間長(zhǎng)她渴。
測(cè)試的作用:確認(rèn)所做的修改不會(huì)破壞現(xiàn)有的功能达址。
構(gòu)建可視化
可以使用外部設(shè)備將構(gòu)建信號(hào)顯示出來(lái),比如燈管信號(hào)趁耗,語(yǔ)音信號(hào)等沉唠。
我們?cè)诎汛a提交到共享的代碼庫(kù)之前一定要在本地的版本庫(kù)運(yùn)行所有的提交測(cè)試,確認(rèn)新增代碼的正確性苛败。
持續(xù)集成需要團(tuán)隊(duì)嚴(yán)格遵循紀(jì)律满葛,在提交代碼后構(gòu)建失敗要及時(shí)修復(fù),或者讓回滾到上一個(gè)可用版本罢屈,保證構(gòu)建能夠持續(xù)正常運(yùn)行嘀韧,在構(gòu)建失敗時(shí),要停止提交代碼缠捌,解決問(wèn)題后再開(kāi)始提交新的代碼锄贷。
小步頻繁提交需要快速運(yùn)行提交測(cè)試,一般我們對(duì)提交測(cè)試的運(yùn)行時(shí)間加以限制曼月,如果超時(shí)就讓構(gòu)建失敗谊却,為可頻繁提交作出保障。這種實(shí)踐需要強(qiáng)壯的測(cè)試十嘿。
本地化版本控制系統(tǒng)
在實(shí)際情況中因惭,我們可能會(huì)遇到因?yàn)榫W(wǎng)絡(luò)或者其他問(wèn)題無(wú)法連接到版本控制服務(wù)的情況,這個(gè)時(shí)候就有必要在本地建立一套持續(xù)集成系統(tǒng)了绩衷。
解決本地化版本控制系統(tǒng)的存取問(wèn)題:
- 將應(yīng)用程序分為多個(gè)組件
- 使用分布式或者支持多主庫(kù)拓?fù)浣Y(jié)構(gòu)的版本控制系統(tǒng)
分布式版本控制系統(tǒng)(Distributed Version Control System)
目前常用的有Git蹦魔,Mercurial
DVCS可以本地提交激率,不受網(wǎng)絡(luò)的影響
其核心特性是,每個(gè)倉(cāng)庫(kù)都包括項(xiàng)目的完整歷史勿决,方便代碼共享
小結(jié)
在寫(xiě)代碼時(shí)要注意代碼的規(guī)范性乒躺,養(yǎng)成良好的習(xí)慣。比如命名習(xí)慣(目前采用駝峰命名法)低缩,代碼的格式等嘉冒。
在使用持續(xù)集成實(shí)踐時(shí),團(tuán)隊(duì)的每個(gè)人都要嚴(yán)格遵循提交的原則咆繁,這樣才能保證構(gòu)建能夠保持運(yùn)行狀態(tài)讳推。這對(duì)于每個(gè)成員來(lái)說(shuō),高度的責(zé)任感是合作的基礎(chǔ)玩般。
分布式版本控制系統(tǒng)银觅,在不連接主服務(wù)器的情況下,也可以提交代碼坏为,適合通信狀態(tài)不佳的情況究驴。實(shí)際上在做持續(xù)集成時(shí)如果能夠改善通信狀況的話,一般不建議換到分布式版本控制系統(tǒng)(備選方案)匀伏。
在使用DVCS比如我們常用的GitHub時(shí)洒忧,要盡量避免使用分支。
疑問(wèn)
- 什么時(shí)候有必要進(jìn)行測(cè)試驅(qū)動(dòng)開(kāi)發(fā)够颠?
- DVCS的使用中為每個(gè)代碼庫(kù)都在持續(xù)集成服務(wù)器上建立一個(gè)構(gòu)建熙侍,分支代碼庫(kù)數(shù)量很多時(shí)對(duì)于服務(wù)器有什么影響?