《持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法》讀書(shū)筆記
什么是部署流水線
部署流水線是指軟件從版本控制到用戶(hù)手中這一過(guò)程的自動(dòng)化表現(xiàn)形式。
價(jià)值流圖
產(chǎn)品可行性評(píng)估 | 產(chǎn)品探索 | 產(chǎn)品計(jì)劃與評(píng)估 | 開(kāi)發(fā) | 最后測(cè)試與審核 | 發(fā)布 | |||||
---|---|---|---|---|---|---|---|---|---|---|
3天 | 1周 | 7天 | 10天 | 10天 | 10天 | 3天 | 7周 | 1周 | 2天 | 2小時(shí) |
- 開(kāi)發(fā)到發(fā)布的流水線:會(huì)有很多次構(gòu)建通過(guò)這一流程走向最后的發(fā)布
- 流水線各個(gè)階段:
交付團(tuán)隊(duì)->版本控制庫(kù)->構(gòu)建和單元測(cè)試->自動(dòng)化驗(yàn)收測(cè)試->用戶(hù)驗(yàn)收測(cè)試->發(fā)布 - 一般而言埋虹,只要某個(gè)構(gòu)建使這個(gè)流程任一階段失敗猜憎,都會(huì)停止,不會(huì)進(jìn)入下一個(gè)階段搔课。
- 提交階段【自動(dòng)化測(cè)試(主要是單元測(cè)試)胰柑,代碼分析】
- 自動(dòng)化驗(yàn)收測(cè)試階段【功能與非功能測(cè)試】
- 手工測(cè)試階段【對(duì)自動(dòng)化測(cè)試的補(bǔ)充,探索性測(cè)試爬泥,集成測(cè)試等】
- 發(fā)布階段【部署到生產(chǎn)環(huán)境或試運(yùn)行環(huán)境】
最基本的部署流水線
基本的部署流水線
部署流水線的相關(guān)實(shí)踐
- 只生成一次二進(jìn)制包柬讨。對(duì)于不需要編譯的語(yǔ)言,二制包指的是所有源文件的集合袍啡。這些二進(jìn)制包應(yīng)保存在文件系統(tǒng)的某個(gè)位置踩官,讓流水線后續(xù)階段能夠輕松訪問(wèn)到,但不要放在版本控制庫(kù)中境输。二進(jìn)制包應(yīng)與環(huán)境無(wú)關(guān)蔗牡。
- 對(duì)不同環(huán)境采用同一部署方式
- 使用屬性文件保存配置信息。比如分別為每個(gè)環(huán)境保存一個(gè)屬性文件嗅剖,并將其放在版本控制庫(kù)中辩越,部署時(shí),通過(guò)本地服務(wù)器的主機(jī)名來(lái)查找到正確的配置信粮,如果環(huán)境中有多臺(tái)服務(wù)器黔攒,可以將環(huán)境變量提供給部署腳本
- 將配置放在一個(gè)目錄服務(wù)中(LDAP或ActiveDiretory)或數(shù)據(jù)庫(kù)中
- 對(duì)部署進(jìn)行冒煙測(cè)試
當(dāng)應(yīng)用程序部署時(shí),應(yīng)用一個(gè)自動(dòng)化腳本做下冒煙測(cè)試强缘。這個(gè)測(cè)試的流程是:- 啟動(dòng)用戶(hù)程序
- 檢查主頁(yè)面
- 檢查應(yīng)用程序所依賴(lài)的服務(wù)督惰,比如數(shù)據(jù)庫(kù),消息隊(duì)列等
- 向生產(chǎn)環(huán)境的副本中部署
如果預(yù)算充足旅掂,可以建立與生產(chǎn)環(huán)境一樣的環(huán)境 - 每次變更都要立即在流水線中傳遞
對(duì)于一些特殊情況赏胚,驗(yàn)收測(cè)試是比較耗時(shí)的,版本在驗(yàn)收測(cè)試時(shí)可能會(huì)產(chǎn)生沖突商虐,這時(shí)可以在單元測(cè)試結(jié)束時(shí)栅哀,將最近還沒(méi)構(gòu)建的所有變更全部拿來(lái)進(jìn)行構(gòu)建 - 只要有環(huán)節(jié)失敗,就停止整個(gè)流水線
提交階段
- 編譯代碼
- 運(yùn)行一套提交測(cè)試【單元測(cè)試称龙,容易失敗的特定測(cè)試】
- 為后續(xù)階段創(chuàng)建二進(jìn)制包
- 執(zhí)行代碼分析檢查代碼的健康狀況
- 為后續(xù)階段準(zhǔn)備工作,比如準(zhǔn)備后續(xù)測(cè)試所用的數(shù)據(jù)庫(kù)
自動(dòng)化驗(yàn)收測(cè)試之門(mén)
- 每次提交后戳晌,應(yīng)立即運(yùn)行提交測(cè)試鲫尊,提交階段完成后,立即做驗(yàn)收測(cè)試沦偎,簡(jiǎn)單的驗(yàn)收測(cè)試為:運(yùn)行代碼疫向,查看主頁(yè)
- 盡管驗(yàn)收測(cè)試非常有價(jià)值咳蔚,但它們的創(chuàng)建與維護(hù)成本也非常高,所以牢記不要把所有驗(yàn)收測(cè)試條件盲目的自動(dòng)化
后續(xù)的測(cè)試階段
部署流水線應(yīng)支持測(cè)試人員根據(jù)自己的需求將任意一個(gè)版本部署到自己的測(cè)試環(huán)境
- 手工測(cè)試
- 非功能測(cè)試
發(fā)布準(zhǔn)備
把發(fā)布環(huán)節(jié)視為部署流水線的一個(gè)自然結(jié)果
- 讓參與項(xiàng)目交付過(guò)程的人共同創(chuàng)建維護(hù)一個(gè)發(fā)布計(jì)劃
- 通過(guò)盡可能多的自動(dòng)化過(guò)程最小化人的錯(cuò)誤發(fā)生的可能性
- 在類(lèi)生產(chǎn)環(huán)境中經(jīng)常做發(fā)布流程演練
- 如果事情并沒(méi)有按計(jì)劃執(zhí)行搔驼,要有撤銷(xiāo)本次發(fā)布的能力
- 作為升級(jí)和撤銷(xiāo)過(guò)程的一部分谈火,制定配置遷移和數(shù)據(jù)遷移策略
自動(dòng)部署與發(fā)布
- 在具有代表性環(huán)境上執(zhí)行自動(dòng)化驗(yàn)收測(cè)試套件
- 對(duì)生產(chǎn)環(huán)境的任何修改都應(yīng)該通過(guò)自動(dòng)化過(guò)程完成【程序的部署,配置舌涨,軟件棧糯耍,網(wǎng)絡(luò)拓?fù)洌瑺顟B(tài)的所有修改)
- 管理生產(chǎn)環(huán)境的流程囊嘉,也應(yīng)用于測(cè)試環(huán)境
- 使用虛擬化技術(shù)温技,最佳配置管理降低成本
變更的撤銷(xiāo)策略
- 讓舊版本仍舊處于可用狀態(tài),保持一段時(shí)間
- 從頭部署舊版本
實(shí)現(xiàn)一個(gè)部署流水線
- 對(duì)價(jià)值流建模扭粱,創(chuàng)建一個(gè)可工作的簡(jiǎn)單框架
- 將構(gòu)建和部署流程自動(dòng)化
- 將單元測(cè)試和代碼分析自動(dòng)化
- 將驗(yàn)收測(cè)試自動(dòng)化
- 將發(fā)布自動(dòng)化
注意以下幾點(diǎn): - 增量實(shí)現(xiàn)整個(gè)流水線舵鳞,如果有手工操作部分,記錄開(kāi)始結(jié)束時(shí)間琢蛤,想辦法把它自動(dòng)化
- 部署流水線是構(gòu)建蜓堕、部署、測(cè)試和發(fā)布整個(gè)流程中有效博其,也是最重要的統(tǒng)計(jì)數(shù)據(jù)來(lái)源
- 不斷改進(jìn)部署流水線
度量
最重要的全局度量指標(biāo)是流水線周期時(shí)間套才。用約束理論來(lái)對(duì)流水線進(jìn)行優(yōu)化:
- 識(shí)別系統(tǒng)中的約束
- 確保最大限度地提高流程中這部分的產(chǎn)出
- 根據(jù)這一約束調(diào)整其他環(huán)節(jié)的產(chǎn)出
- 為約束環(huán)節(jié)擴(kuò)容,增加資源
- 理順約束環(huán)節(jié)贺奠,找到下一個(gè)約束點(diǎn)