應(yīng)用集成
持續(xù)集成(Continuous Integration)
開(kāi)發(fā)人員提交代碼之后,立即進(jìn)行構(gòu)建、測(cè)試(自動(dòng)化的單元測(cè)試或集成測(cè)試),讓提交的代碼得到快速的質(zhì)量反饋,并確保集成的代碼不會(huì)破壞原有代碼的功能正確性。
持續(xù)集成讓提交的代碼能快速得到反饋,測(cè)試通過(guò)后才能將代碼成功集成到集成分支中,從而減少集成后出現(xiàn)的問(wèn)題。對(duì)于現(xiàn)代的分布式應(yīng)用開(kāi)發(fā)任務(wù)而言,持續(xù)集成是:通過(guò)自動(dòng)化的手段,持續(xù)的構(gòu)建和驗(yàn)證快速演進(jìn)的分布式應(yīng)用所有組成部分,為團(tuán)隊(duì)提供有效的反饋和信心;自動(dòng)化的手段意味著低成本,可重復(fù);有效的反饋,意味著更快的定位問(wèn)題,交付質(zhì)量更高的軟件;有效踐行持續(xù)集成的軟件開(kāi)發(fā)團(tuán)隊(duì)具備更高的軟件開(kāi)發(fā)效能。
從上述的定義出發(fā),有效的持續(xù)集成應(yīng)該具備如下特征:
快速反饋環(huán):有問(wèn)題的變更越往后定位的代價(jià)就越高,每一次集成對(duì)團(tuán)隊(duì)而言都是一次反饋環(huán),所有的反饋都被團(tuán)隊(duì)轉(zhuǎn)換成有效的行動(dòng)項(xiàng),使得問(wèn)題被盡早發(fā)現(xiàn),盡早修復(fù)。
自動(dòng)化:每一次的代碼提交都應(yīng)該觸發(fā)自動(dòng)構(gòu)建和自動(dòng)測(cè)試,并通過(guò)紅綠的顏色告知團(tuán)隊(duì)所有成員。
常見(jiàn)的自動(dòng)觸發(fā),是通過(guò)自動(dòng)化的 CI 服務(wù)或工具,自動(dòng)監(jiān)聽(tīng)代碼庫(kù) Git Push & MR 等事件觸發(fā),常見(jiàn)的工具如 Jenkins、GitlabCI、CircleCI、GithubActions 等等。
持續(xù)交付(Continuous Delivery)
是持續(xù)集成的下一步,持續(xù)頻繁地將軟件的新版本交付到類(lèi)生產(chǎn)環(huán)境(常見(jiàn)的如:測(cè)試、預(yù)發(fā)環(huán)境),交付給測(cè)試、業(yè)務(wù)團(tuán)隊(duì)驗(yàn)收。
持續(xù)交付強(qiáng)調(diào)的是“交付”,不管怎么更新,軟件是隨時(shí)隨地可以交付的,相比持續(xù)集成,持續(xù)交付除了交付到類(lèi)生產(chǎn)環(huán)境之外,還會(huì)執(zhí)行一些集成測(cè)試、API測(cè)試等等,確保交付的產(chǎn)物可以直接交付部署。
持續(xù)部署(Continuous Deployment)
是持續(xù)交付的下一步,“自動(dòng)”將代碼部署到生產(chǎn)環(huán)境,持續(xù)部署強(qiáng)調(diào)的是“部署”,它的目標(biāo)是,代碼在任何時(shí)刻都是可部署的,可以進(jìn)入生產(chǎn)階段。
持續(xù)部署和持續(xù)交付觸發(fā)方式的區(qū)別是,持續(xù)部署是自動(dòng)完成的,持續(xù)交付是手動(dòng)完成的。
CI/CD流水線
云效流水線 Flow 是一款企業(yè)級(jí)、自動(dòng)化的持續(xù)集成和持續(xù)交付工具,通過(guò)構(gòu)建自動(dòng)化、集成自動(dòng)化、驗(yàn)證自動(dòng)化、部署自動(dòng)化,完成從開(kāi)發(fā)到上線的CI/CD全流程,幫助企業(yè)高質(zhì)量、高效率的交付業(yè)務(wù)。
部署策略
在真實(shí)的上線過(guò)程中,如果采用全量發(fā)布,會(huì)給開(kāi)發(fā)運(yùn)維團(tuán)隊(duì)帶來(lái)未知的風(fēng)險(xiǎn),為了減少發(fā)布對(duì)線上業(yè)務(wù)的影響, 在應(yīng)用部署過(guò)程中,建議采用灰度發(fā)布,分批發(fā)布這種模式,可以最大限度的避免不穩(wěn)定發(fā)布對(duì)用戶的影響, 保障業(yè)務(wù)交付穩(wěn)定。
發(fā)布過(guò)程可觀測(cè)
對(duì)于生產(chǎn)系統(tǒng),一旦線上有代碼變更,那就要開(kāi)始關(guān)注業(yè)務(wù)的可觀測(cè)性。可觀測(cè)性主要包括如下三個(gè)方面:
指標(biāo)監(jiān)控:即各種指標(biāo)監(jiān)控,比如基礎(chǔ)資源指標(biāo)(如主機(jī)CPU、內(nèi)存使用率),服務(wù)性能指標(biāo)(響應(yīng)時(shí)間RT上升等),業(yè)務(wù)的調(diào)用指標(biāo)(如用戶登錄失敗數(shù)上升,下單失敗上升等)。指標(biāo)也需要再做下分級(jí),具體可以查看可觀測(cè)性章節(jié)。
日志:要關(guān)注各種設(shè)備和服務(wù)的運(yùn)行日志監(jiān)控,特別要關(guān)注是否有異常或Error日志。
調(diào)用鏈:關(guān)注當(dāng)前發(fā)布的應(yīng)用其上下游調(diào)用鏈分析。
發(fā)布回滾
一旦代碼發(fā)布到生產(chǎn)之后,服務(wù)或業(yè)務(wù)如果有影響,優(yōu)先執(zhí)行回滾,確保業(yè)務(wù)平穩(wěn)。在回滾過(guò)程中需要考慮服務(wù)是否具備平滑,數(shù)據(jù)是否存在臟寫(xiě)等問(wèn)題。
企業(yè)選擇相關(guān)CI/CD工具的時(shí)候也要關(guān)注需要支持快速回滾的能力。阿里云云效服務(wù)提供回滾操作,用戶可在流水執(zhí)行記錄下的部署歷史中,查看到該流水線所有執(zhí)行的部署歷史記錄,并可選擇其中任意一條歷史記錄進(jìn)行回滾操作。云效流水線會(huì)根據(jù)當(dāng)時(shí)運(yùn)行的部署腳本和構(gòu)建制品重新執(zhí)行部署任務(wù),以實(shí)現(xiàn)回滾的效果。