準(zhǔn)備好在CI/CD中自動(dòng)化持續(xù)部署了嗎?
?許多公司都爭(zhēng)先恐后地實(shí)施持續(xù)集成和持續(xù)交付(CI/CD)管道,以簡(jiǎn)化他們的軟件開發(fā)工作流程。很少有人采取額外的步驟來自動(dòng)化持續(xù)部署,這是一種使用CI/CD管道將更改持續(xù)推送到生產(chǎn)中的做法??梢岳斫獾摹?/p>
每天或每小時(shí)頻繁地將代碼推送到生產(chǎn)環(huán)境的想法讓我不寒而栗。
然而,過去幾年發(fā)生了很大變化,越來越多的devops團(tuán)隊(duì)正在采用技能、實(shí)踐和工具來自動(dòng)化高質(zhì)量和可靠的部署。本文解釋了持續(xù)交付和持續(xù)部署之間的區(qū)別,然后提出了devops團(tuán)隊(duì)在CI/CD管道中自動(dòng)化持續(xù)部署之前應(yīng)該做的五件事。
持續(xù)交付與持續(xù)部署
Capgemini的敏捷和開發(fā)運(yùn)營(yíng)負(fù)責(zé)人KulbirRaina分享了一個(gè)有助于我們區(qū)分持續(xù)交付和持續(xù)部署的定義。他說:“持續(xù)交付是軟件發(fā)布到生產(chǎn)的端到端自動(dòng)化流程,而持續(xù)部署是通過預(yù)先測(cè)試的流程將流程中的軟件包推送到生產(chǎn)后持續(xù)集成的自動(dòng)化流程。”
自動(dòng)化生產(chǎn)部署具有更多風(fēng)險(xiǎn),因?yàn)榻Y(jié)果會(huì)影響業(yè)務(wù)、客戶和最終用戶。如果devops團(tuán)隊(duì)決定自動(dòng)化部署,則部署過程必須包括持續(xù)測(cè)試和強(qiáng)大的錯(cuò)誤處理。否則,部署可能會(huì)在生產(chǎn)中產(chǎn)生性能問題、不可靠的系統(tǒng)、安全漏洞和缺陷。
SPR軟件工程總監(jiān)MikeSaccotelli補(bǔ)充說:“運(yùn)行持續(xù)交付模型與持續(xù)部署模型的組織之間的主要區(qū)別在于其構(gòu)建和部署過程的成熟度和復(fù)雜程度?!?/p>
Devops團(tuán)隊(duì)可以使用以下清單來準(zhǔn)備升級(jí)CI/CD管道以進(jìn)行持續(xù)部署。
1. 評(píng)估商業(yè)利益
作為一項(xiàng)原則,持續(xù)部署可以應(yīng)用于許多應(yīng)用程序,甚至可以應(yīng)用于最受監(jiān)管的行業(yè)。Buildkite的聯(lián)合創(chuàng)始人兼聯(lián)合首席執(zhí)行官TimLucas說:“每個(gè)項(xiàng)目都可以采用持續(xù)部署,最好的組織設(shè)定目標(biāo),將盡可能多的項(xiàng)目轉(zhuǎn)移到這種模式。即使在金融和受監(jiān)管的行業(yè),大多數(shù)項(xiàng)目都可以采用這種模式。我們甚至看到自動(dòng)駕駛汽車公司進(jìn)行持續(xù)部署?!?/p>
雖然devops團(tuán)隊(duì)可以在許多項(xiàng)目中實(shí)施持續(xù)部署,但問題是,它在哪里提供了強(qiáng)大的業(yè)務(wù)案例和顯著的技術(shù)優(yōu)勢(shì)?頻繁部署功能和修復(fù)的項(xiàng)目,以及現(xiàn)代化架構(gòu)簡(jiǎn)化自動(dòng)化的項(xiàng)目,更有希望過渡到持續(xù)部署。
2. 準(zhǔn)備開發(fā)團(tuán)隊(duì)
Lucas分享了在遷移到持續(xù)部署模型之前應(yīng)該成為軟件開發(fā)過程一部分的一些先決條件。他說:“持續(xù)部署是真正的敏捷性,是從代碼更改到生產(chǎn)的最快方式。它需要始終將主分支保持在可交付狀態(tài)、自動(dòng)化測(cè)試以及您可以信任和有信心的高質(zhì)量工具?!?/p>
希望自動(dòng)化持續(xù)部署的開發(fā)人員的一些開發(fā)職責(zé)和規(guī)則包括:
- 使用足夠的代碼覆蓋率進(jìn)行持續(xù)測(cè)試,以確保更改不會(huì)產(chǎn)生新的缺陷。
- 用于測(cè)試安全性、性能和其他代碼質(zhì)量問題的靜態(tài)和動(dòng)態(tài)代碼分析工具。
- 對(duì)左移安全實(shí)踐的承諾,包括圍繞API安全的最佳實(shí)踐。
- 圍繞應(yīng)用程序和微服務(wù)的可觀察性標(biāo)準(zhǔn)。
- 功能標(biāo)記,以便可以打開和關(guān)閉新功能,或控制給部分用戶。
Saccotelli補(bǔ)充說:“持續(xù)部署的前提是開發(fā)團(tuán)隊(duì)對(duì)質(zhì)量代碼有更成熟的理解,這樣這個(gè)過程才能成功。如果代碼很差或未經(jīng)測(cè)試,那將創(chuàng)建一個(gè)不可靠的系統(tǒng),并迅速將錯(cuò)誤和漏洞推向生產(chǎn)環(huán)境?!?/p>
3.準(zhǔn)備運(yùn)營(yíng)團(tuán)隊(duì)
因此CI/CD管道運(yùn)行并將新代碼部署到生產(chǎn)環(huán)境。這是否意味著devops團(tuán)隊(duì)很清楚,他們的工作已經(jīng)完成,每個(gè)人都可以進(jìn)入下一個(gè)版本?
沒那么快。盡管開發(fā)人員為確保構(gòu)建不會(huì)中斷、自動(dòng)化代碼測(cè)試以及控制在生產(chǎn)中啟用哪些代碼所做的所有工作,但仍然存在一些部署可能導(dǎo)致生產(chǎn)問題的風(fēng)險(xiǎn)。監(jiān)控業(yè)務(wù)服務(wù)、應(yīng)用程序和系統(tǒng)是devops中的一項(xiàng)運(yùn)營(yíng)職責(zé),他們支持持續(xù)部署的能力早在啟用部署自動(dòng)化之前就開始了。最佳實(shí)踐包括以下內(nèi)容:
- 使用基礎(chǔ)架構(gòu)即代碼和容器來確保開發(fā)、測(cè)試、生產(chǎn)和其他環(huán)境之間的基礎(chǔ)架構(gòu)配置一致。
- 使用應(yīng)用程序和系統(tǒng)級(jí)別的監(jiān)控工具,這些工具還可以加載和分析由應(yīng)用程序和微服務(wù)創(chuàng)建的可觀察性數(shù)據(jù)。
- 選擇一個(gè)AIOps平臺(tái),該平臺(tái)在從應(yīng)用程序到微服務(wù)和數(shù)據(jù)存儲(chǔ)的整個(gè)堆棧中集成監(jiān)控、警報(bào)和可觀察性數(shù)據(jù),并將事件關(guān)聯(lián)到可管理的事件中。
- 設(shè)置金絲雀版本以控制新部署的切換和流量,并降低更難的切換策略的風(fēng)險(xiǎn)。
- 擁有一套強(qiáng)大的安全工具,包括API網(wǎng)關(guān)、Web應(yīng)用程序防火墻、容器安全、威脅監(jiān)控和敏感數(shù)據(jù)監(jiān)控,以降低高度動(dòng)態(tài)應(yīng)用環(huán)境中的風(fēng)險(xiǎn)。
4. 跨團(tuán)隊(duì)和工具集成ITSM和工作流
即使已經(jīng)建立了所有開發(fā)和運(yùn)營(yíng)能力,我們還沒有完成。假設(shè)devops團(tuán)隊(duì)提交代碼,持續(xù)部署將更改轉(zhuǎn)移到生產(chǎn)中,并且應(yīng)用程序性能監(jiān)控工具正在運(yùn)行。正確的devops團(tuán)隊(duì)成員多久會(huì)收到警報(bào),以便他們可以對(duì)事件進(jìn)行分類、調(diào)查根本原因并快速解決任何問題?
Lucas分享說,在轉(zhuǎn)向持續(xù)部署時(shí),“不穩(wěn)定的測(cè)試是第一大風(fēng)險(xiǎn)”。他列舉了不可靠的CI/CD工具、糟糕的生產(chǎn)監(jiān)控和隨叫隨到的做法,以及工程和IT之間缺乏真正的合作伙伴關(guān)系作為進(jìn)一步的風(fēng)險(xiǎn)。
如果沒有監(jiān)控、AIOps、IT服務(wù)管理(ITSM)、敏捷和通信工具之間的工作流和集成,devops團(tuán)隊(duì)響應(yīng)和解決問題的時(shí)間可能會(huì)落后于其部署速度。這種差距可能會(huì)造成壓力,并削弱開發(fā)和運(yùn)營(yíng)之間的伙伴關(guān)系。最佳實(shí)踐是確保集成IT工具和工作流程,以便開發(fā)運(yùn)維團(tuán)隊(duì)能夠跟上持續(xù)部署產(chǎn)生的任何問題。
5. 定義基于風(fēng)險(xiǎn)的決策門和KPI
Copado產(chǎn)品營(yíng)銷總監(jiān)KristinBaskett提供了持續(xù)部署所需的一個(gè)關(guān)鍵要素。她說:“雖然魯莽的自動(dòng)化可能會(huì)阻礙系統(tǒng),但正確的自動(dòng)化可以幫助組織實(shí)現(xiàn)真正從devops中受益所需的靈活性和一致性。當(dāng)開發(fā)人員可以自動(dòng)集成代碼時(shí),協(xié)作就會(huì)得到改善。通過投資于測(cè)試自動(dòng)化和質(zhì)量門控,組織可以更快地進(jìn)行創(chuàng)新,同時(shí)降低風(fēng)險(xiǎn)?!?/p>
除了測(cè)試自動(dòng)化之外,Baskett還提到了實(shí)施應(yīng)該擴(kuò)展到其他風(fēng)險(xiǎn)評(píng)估的質(zhì)量門。當(dāng)構(gòu)建觸發(fā)持續(xù)部署時(shí),質(zhì)量門會(huì)實(shí)施業(yè)務(wù)規(guī)則,以確定哪些部署可以投入生產(chǎn),哪些可能需要合規(guī)審查或管理簽字。
支持持續(xù)部署的其他最佳管理實(shí)踐包括開發(fā)devops關(guān)鍵績(jī)效指標(biāo)(KPI)、形式化反饋循環(huán)和制定溝通策略。
持續(xù)部署可以產(chǎn)生許多業(yè)務(wù)和技術(shù)優(yōu)勢(shì),但紀(jì)律嚴(yán)明的DevOps團(tuán)隊(duì)和IT組織應(yīng)確保在使用自動(dòng)化提高部署頻率之前擁有最佳實(shí)踐和工具。?