DevOps核心實(shí)踐——持續(xù)交付

DevOps是當(dāng)前炒的很火熱的概念,實(shí)踐DevOps的方法涉及兩個(gè)方面,一是如何持續(xù)管理需求、變更和及時(shí)處理用戶(hù)反饋,通過(guò)工具固化一定的流程,有效的管理需求和變更。另一方面就是如何持續(xù)交付。
作為DevOps流程的核心實(shí)踐持續(xù)交付(Continuous Delivery)在這其中能夠?yàn)檐浖?xiàng)目帶來(lái)什么價(jià)值呢?本文將結(jié)合持續(xù)交付的具體實(shí)踐展開(kāi)分析與討論。

入手持續(xù)交付

持續(xù)交付最基本的原則是:

提前并頻繁地內(nèi)部交付,將幾乎所有事情自動(dòng)化

持續(xù)交付最核心的實(shí)踐是自動(dòng)化,通過(guò)將每一次改動(dòng)都提交到一個(gè)模擬產(chǎn)品環(huán)境中,使用嚴(yán)格 的自動(dòng)化測(cè)試,確保業(yè)務(wù)應(yīng)用和服務(wù)能符合預(yù)期,使用完全的自動(dòng)化過(guò)程來(lái)把每個(gè)變更自動(dòng)的提交到測(cè)試環(huán)境。
實(shí)現(xiàn)自動(dòng)化的持續(xù)交付基于部署流水線模式。

CD pipeline

部署流水線的目的是讓軟件交付過(guò)程中的每個(gè)人都能看到每個(gè)構(gòu)建版本從提交到發(fā)布的整個(gè)過(guò)程,將開(kāi)發(fā)機(jī)構(gòu)的文化、流程和工具整合到一起,這也符合了DevOps的核心理念將開(kāi)發(fā)機(jī)構(gòu)的文化、流程和工具整合到一起。
下面討論部署流水線的細(xì)節(jié)。

腳本化構(gòu)建與部署

腳本化構(gòu)建與部署應(yīng)以迭代的方式來(lái)識(shí)別最困難的步驟,并將其自動(dòng)化,沿著部署流水線,逐步完善自動(dòng)化構(gòu)建和部署能力。腳本化構(gòu)建與部署應(yīng)該遵循如下原則:

  • 為部署流水線的每個(gè)階段創(chuàng)建腳本,表達(dá)構(gòu)建流程。
  • 使用同樣的腳本向所有環(huán)境部署,保證在所有環(huán)境上都能運(yùn)行。
  • 確保部署過(guò)程是冪等的。
  • 增量式部署。

提交

提交階段發(fā)生在像版本控制庫(kù)提交代碼,是流水線的入口。提交階段應(yīng)遵循如下原則:

  • Dev保證本地構(gòu)建成功后提交
  • 測(cè)試不通過(guò)令提交失敗,并記錄錯(cuò)誤信息,反饋Dev盡快修復(fù),Dev對(duì)自己的問(wèn)題負(fù)責(zé)
  • 提交失敗后可以回滾版本
  • 降低構(gòu)造測(cè)試環(huán)境的復(fù)雜性,保證測(cè)試代碼整潔有效性。

自動(dòng)化驗(yàn)收測(cè)試

單元測(cè)試不能保證捕獲所有問(wèn)題,因此需要驗(yàn)收測(cè)試來(lái)保證軟件質(zhì)量。頻繁的手工測(cè)試帶來(lái)高昂成本,采用自動(dòng)化驗(yàn)收測(cè)試便于頻繁發(fā)布軟件。
自動(dòng)化驗(yàn)收測(cè)試使得團(tuán)隊(duì)成員都關(guān)注于真正的工作:業(yè)務(wù)價(jià)值,為軟件能否滿(mǎn)足標(biāo)準(zhǔn)提供了更高得信心,快速向開(kāi)發(fā)團(tuán)隊(duì)反饋問(wèn)題,便于軟件大規(guī)模重構(gòu)。

非功能性需求測(cè)試

非功能需求測(cè)試包括容量、吞吐量以及性能測(cè)試。
將非功能性需求加入到部署流水線上,便于軟件設(shè)計(jì)執(zhí)行實(shí)驗(yàn)場(chǎng)景來(lái)幫助診斷預(yù)測(cè)問(wèn)題。
對(duì)于非功能需求,過(guò)早地關(guān)注容量?jī)?yōu)化是低效且昂貴的,有可能造成過(guò)度設(shè)計(jì),除非性能有問(wèn)題,不在代碼可讀性上讓步

發(fā)布

頻繁地將軟件發(fā)布到不同的測(cè)試環(huán)境中,能夠降低發(fā)布的風(fēng)險(xiǎn),降低上線壓力。
發(fā)布過(guò)程將組織各部門(mén)聯(lián)系起來(lái):運(yùn)維團(tuán)隊(duì),開(kāi)發(fā)團(tuán)隊(duì),測(cè)試團(tuán)隊(duì),技術(shù)支持團(tuán)隊(duì),交付團(tuán)隊(duì),促進(jìn)交流合作。

持續(xù)交付對(duì)于運(yùn)維的改變

DevOps將敏捷方法引入到系統(tǒng)管理與運(yùn)營(yíng),有兩點(diǎn)主要原則:

  • 強(qiáng)調(diào)合作
  • 利用敏捷技術(shù)對(duì)基礎(chǔ)設(shè)施進(jìn)行有效管理

運(yùn)維負(fù)責(zé)將代碼部署到生成環(huán)境中,持續(xù)交付從一開(kāi)始就讓運(yùn)維參與進(jìn)來(lái),兩者共同的利益是
讓發(fā)布有價(jià)值、穩(wěn)定得軟件成為一件低風(fēng)險(xiǎn)的事
持續(xù)交付的核心實(shí)踐 盡可能頻繁的發(fā)布 保證了這一點(diǎn),從而成為了DevOps的關(guān)鍵步驟。

自動(dòng)化環(huán)境管理

對(duì)于運(yùn)維人員的工作,關(guān)鍵的痛點(diǎn)在于部署系統(tǒng)到不同配置的大量基礎(chǔ)設(shè)施上,對(duì)基礎(chǔ)設(shè)置的管理往往利用腳本管理,修改基礎(chǔ)設(shè)施的技術(shù)也應(yīng)該是發(fā)布的一部分。
將基礎(chǔ)設(shè)施的配置自動(dòng)化,納入流水線并配置測(cè)試會(huì)大大便于運(yùn)維的部署管理工作。

另一種方案,使用docker進(jìn)行持續(xù)集成

在業(yè)務(wù)不斷增長(zhǎng)過(guò)程中,企業(yè)的組件也隨之不斷擴(kuò)張,隨之帶來(lái)了對(duì)基礎(chǔ)設(shè)施的復(fù)雜配置管理工作。采用自動(dòng)化部署配置管理無(wú)疑產(chǎn)生巨大成本,使用Docker——以“容器化”的方式去部署應(yīng)用。 Docker像集裝箱一樣,打包了所有依賴(lài),再在其他服務(wù)器上部署很容易,不至于換服務(wù)器后發(fā)現(xiàn)各種配置文件散落一地,這樣就解決了編譯時(shí)依賴(lài)和運(yùn)行時(shí)依賴(lài)的問(wèn)題。
利用Docker進(jìn)行持續(xù)集成的流程如下:

  • 開(kāi)發(fā)者提交代碼;
  • 觸發(fā)鏡像構(gòu)建;
  • 構(gòu)建鏡像上傳至私有倉(cāng)庫(kù);
  • 鏡像下載至執(zhí)行機(jī)器;
  • 鏡像運(yùn)行。

價(jià)值

貫穿持續(xù)交付始終的是自動(dòng)化手段,這也恰恰是軟件行業(yè)所追求的,自動(dòng)化的交付過(guò)程帶來(lái)了諸多益處:

  • 快速發(fā)現(xiàn)錯(cuò)誤。每完成一點(diǎn)更新,就集成到主干,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易。
  • 快速發(fā)布。能夠應(yīng)對(duì)業(yè)務(wù)需求,并更快地實(shí)現(xiàn)軟件價(jià)值。
  • 編碼->測(cè)試->上線->交付的頻繁迭代周期縮短,同時(shí)獲得迅速反饋;
  • 高質(zhì)量的軟件發(fā)布標(biāo)準(zhǔn)。整個(gè)交付過(guò)程標(biāo)準(zhǔn)化、可重復(fù)、可靠,
  • 整個(gè)交付過(guò)程進(jìn)度可視化,方便團(tuán)隊(duì)人員了解項(xiàng)目成熟度;
  • 更先進(jìn)的團(tuán)隊(duì)協(xié)作方式。從需求分析、產(chǎn)品的用戶(hù)體驗(yàn)到交互 設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、運(yùn)維等角色密切協(xié)作,相比于傳統(tǒng)的瀑布式軟件團(tuán)隊(duì),更少浪費(fèi)。
  • 更平滑的開(kāi)發(fā)過(guò)程,減少上線風(fēng)險(xiǎn),增強(qiáng)團(tuán)隊(duì)信心。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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