自動(dòng)化測試優(yōu)先于持續(xù)集成
然而,基于主干的開發(fā)方式需要?jiǎng)?chuàng)建更有效的自動(dòng)化測試。Gary Gruver 說:“如果沒有自動(dòng)化測試,持續(xù)集成只能產(chǎn)生一大堆沒有經(jīng)過編譯而且不能正確運(yùn)行的垃圾。”在剛開始時(shí),完整
地執(zhí)行一套手動(dòng)測試需要6周的時(shí)間。
Ward Cunningham 開發(fā)了世界上第一個(gè)維基系統(tǒng),也創(chuàng)造了“技術(shù)債務(wù)”一詞。他在描述技術(shù)債務(wù)時(shí)說,如果不能主動(dòng)地重構(gòu)代碼庫,它就會(huì)慢慢地變得難以修改和維護(hù),新特性的增加速度也會(huì)因此而下降。
技術(shù)債務(wù)只能通過重構(gòu)來解決的話,成本十分高昂,頻繁的重構(gòu)本身也不現(xiàn)實(shí)。
在第一版產(chǎn)品設(shè)計(jì)、實(shí)現(xiàn)、改進(jìn)的過程中,將所有的特性需求都記錄下來,重構(gòu)時(shí)可以作為參考。對于每一條特性都需要思考 :
*新的版本是否仍然需要滿足該特性?
*新的版本是否已經(jīng)從根本上提供該特性(老版本可能是通過加一層來解決的)?
*該特性是否是時(shí)效型需求,當(dāng)前已經(jīng)不再需要?
*該特性是否有重大價(jià)值,是否可以放棄?

搞了半天的結(jié)果是每周發(fā)布一次。中國很多企業(yè)靠堆人工也能做到每周發(fā)布一次。所以持續(xù)集成有吸引力嗎?這種案例拿出來沒法說服領(lǐng)導(dǎo)給錢。
基于主干的開發(fā)方式可能是本書中最具爭議的實(shí)踐。許多工程師都認(rèn)為它行不通,他們更喜歡在自己的分支上工作,不必與其他開發(fā)人員協(xié)作 然而, Puppet Labs 的《 2015年DevOps 現(xiàn)狀報(bào)告》表明,基于主干的開發(fā)方式能帶來更高的生產(chǎn)力、更好的穩(wěn)定性 ,甚至更高的工作滿意度和更低的職業(yè)倦怠率。
雖然在開始時(shí)很難說服開發(fā)人員,但是 旦他們認(rèn)識到顯著的優(yōu)勢,就會(huì)徹底改變,
中國的開發(fā)人員倒是非常喜歡在主干開發(fā),無需說服。
自動(dòng)化部署流程
將代碼打包成便于部署的格式;
創(chuàng)建預(yù)配置的虛擬機(jī)鏡像或容器;
將中間件的部署和配置自動(dòng)化;
將安裝包或者文件復(fù)制到生產(chǎn)服務(wù)器;
重啟服務(wù)器、應(yīng)用或者服務(wù);
基于模板生成配置文件;
通過執(zhí)行自動(dòng)化冒煙測試,確保系統(tǒng)能正常運(yùn)行,并且配置正確;
運(yùn)行各種測試程序;
將數(shù)據(jù)庫遷移工作腳本化和自動(dòng)化。
數(shù)據(jù)庫遷移工作是指為了搭建新環(huán)境而遷移數(shù)據(jù)庫,還是數(shù)據(jù)庫版本更新?私下揣測應(yīng)該是指后者。
如果是數(shù)據(jù)庫版本更新,那么數(shù)據(jù)庫腳本化和自動(dòng)化有若干問題:
1、腳本的環(huán)境差異。由于數(shù)據(jù)庫內(nèi)的數(shù)據(jù)在各環(huán)境有差異,導(dǎo)致的腳本語句也需要有差異,并非每次都有,但可能存在,需要和配置文件一樣,做環(huán)境差異管理。而配置文件通過模板生成,數(shù)據(jù)庫腳本卻不可以,需要以其他方案實(shí)現(xiàn);
2、容錯(cuò)和預(yù)檢查。腳本需要預(yù)先檢查問題,而且還要考慮出錯(cuò)時(shí)的處理機(jī)制。數(shù)據(jù)庫許多操作一旦執(zhí)行,無法逆向回退或者難以回退,出錯(cuò)時(shí)的處理機(jī)制需要提前考慮。
3、備份與回退。大型數(shù)據(jù)庫備份時(shí)間和資源成本都很高,部署頻繁的時(shí)候,每次都備份和回退不現(xiàn)實(shí),可以考慮加設(shè)開關(guān),在預(yù)審版本時(shí),考慮是否打開開關(guān)。
應(yīng)用自動(dòng)化的自助式部署
為了更好地促進(jìn)工作,需要一個(gè)可以由開發(fā)人員或運(yùn)維人員來執(zhí)行的代碼發(fā)布流程,并且在理想情況下,應(yīng)該不需要任何手動(dòng)操作或工作交接。這個(gè)流程的步驟如下
????構(gòu)建: 部署流水線必須基于版本控制系統(tǒng)構(gòu)建可部署到任何環(huán)境( 包括生產(chǎn)環(huán)境)的軟件包。
????測試:任何人都應(yīng)該能夠在他們的工作站上或測試系統(tǒng)中運(yùn)行任何一個(gè)自動(dòng)化測試套件。
????部署:任何人都應(yīng)該能夠?qū)⑦@些軟件包部署到具有訪問權(quán)限的任何環(huán)境,通過執(zhí)行(已提交到版本控制系統(tǒng)中的)腳本來完成部署。
以上實(shí)踐有助于成功地執(zhí)行部署,誰來執(zhí)行并不重要。