在軟件設(shè)計(jì)和開發(fā)中,提升速度的關(guān)鍵是被稱為CI/CD的一系列操作原則和實(shí)踐,因?yàn)槠湔狭顺掷m(xù)集成(CI)和持續(xù)交付(CD)。CI/CD讓軟件開發(fā)團(tuán)隊(duì)能夠更加頻繁和可靠地交付代碼更改,從而能夠更快地滿足業(yè)務(wù)及其客戶的需求。
持續(xù)集成是一種編碼哲學(xué)和實(shí)踐,旨在推動開發(fā)團(tuán)隊(duì)進(jìn)行少量更改,并經(jīng)常性地將代碼放入版本控制存儲庫進(jìn)行檢查。鑒于目前大多數(shù)應(yīng)用程序都要求團(tuán)隊(duì)使用不同的平臺和工具來開發(fā)代碼,因此團(tuán)隊(duì)需要有一種方法來集成和驗(yàn)證其更改的結(jié)果。
持續(xù)集成的目的是創(chuàng)建一種統(tǒng)一的自動化方式來構(gòu)建、打包和測試軟件應(yīng)用程序。集成過程中的一致性使得開發(fā)團(tuán)隊(duì)可以更為頻繁地修改代碼,從而強(qiáng)化協(xié)作和提升軟件質(zhì)量。
持續(xù)集成之后的持續(xù)交付可使應(yīng)用程序被自動交付到指定的基礎(chǔ)設(shè)施環(huán)境中。如今,除了在生產(chǎn)環(huán)境(包括測試環(huán)境)外,大多數(shù)開發(fā)團(tuán)隊(duì)還在多種其他環(huán)境中工作,持續(xù)交付可確保更改后的代碼能夠被自動推送到這些不同的環(huán)境中。
持續(xù)集成和持續(xù)交付需要連續(xù)測試,因?yàn)槟繕?biāo)是向最終用戶交付高質(zhì)量的且安全的應(yīng)用程序和代碼。持續(xù)測試常常被作為自動化回歸、性能等測試的一部分。
持續(xù)集成和持續(xù)交付(CI/CD)包含了相同的文化、操作原則以及一系列可加速軟件開發(fā)過程的實(shí)踐。其實(shí)現(xiàn)途徑被稱為CI/CD管道,被認(rèn)為是DevOp團(tuán)隊(duì)的最佳實(shí)踐之一。
行業(yè)專家稱,由于希望改善內(nèi)部或客戶使用的軟件應(yīng)用程序的設(shè)計(jì)、開發(fā)和交付,越來越多的企業(yè)開始采用CI/CD。
市場研究機(jī)構(gòu)Gartner的副總裁兼分析師Sean Kenefick說:“我們肯定會看到CI/CD使用量大大增加的情況。我個人也一直都在不斷進(jìn)行開發(fā)、測試和發(fā)布這方面的問題。”
Gartner在最近的一項(xiàng)名為《企業(yè)敏捷性》的調(diào)查報(bào)告中指出,越來越多的團(tuán)隊(duì)在進(jìn)行敏捷開發(fā),這些敏捷團(tuán)隊(duì)在持續(xù)集成、自動化驗(yàn)收測試和開發(fā)方面的執(zhí)行率顯然更高。
Kenefick說:“我認(rèn)為CI是創(chuàng)建自動化管道的天然起點(diǎn),這也正是團(tuán)隊(duì)的起始領(lǐng)域。CD中的困難是需要實(shí)現(xiàn)應(yīng)用程序的自動化測試和重構(gòu),以便少量功能也可以單獨(dú)被測試和發(fā)布。”
云咨詢公司ServerCentral Turing Group的云解決方案高級主管Josh Quint說,他所在的公司參與的所有新軟件項(xiàng)目都使用了一定程度的CI/CD。
這種趨勢背后的核心驅(qū)動力是無服務(wù)器計(jì)算基礎(chǔ)設(shè)施需要CI/CD集成,安全需求要求限制開發(fā)人員登錄到生產(chǎn)基礎(chǔ)設(shè)施的權(quán)限,以及敏捷方法需要更快的部署和測試周期。
CI/CD目前已經(jīng)在許多參與開發(fā)的企業(yè)中成為了主流策略??▋?nèi)基梅隆大學(xué)軟件工程學(xué)院(SEI)負(fù)責(zé)持續(xù)部署能力的技術(shù)總監(jiān)Hasan Yasar說:“持續(xù)集成、全面自動化測試和持續(xù)交付之類的技術(shù)專長曾經(jīng)一度只被一些緊跟潮流的初創(chuàng)公司所掌握,如今傳統(tǒng)企業(yè)也已可以成功部署。”
以下是一些關(guān)于實(shí)施和維護(hù)CI / CD策略的建議。
盡早讓主要利益相關(guān)者參與到CI/CD之中
Yasar說,讓開發(fā)項(xiàng)目的所有利益相關(guān)者在項(xiàng)目之初就盡早參與到項(xiàng)目之中是一個好主意。例如,IT運(yùn)營人員在架構(gòu)決策中擁有發(fā)言權(quán),因此開發(fā)人員可以在經(jīng)過IT批準(zhǔn)的基礎(chǔ)設(shè)施上進(jìn)行開發(fā)。
Yasar說:“全部決策都應(yīng)該由所有的利益相關(guān)者做出,這樣一來所有重大決策都可以交由專家完成。這種做法大大減少了整個項(xiàng)目生命周期中累積大量技術(shù)欠賬。”
選擇并部署正確的CI/CD系統(tǒng)
容器安全技術(shù)提供商StackRox的資深開發(fā)工程師Josh Komoroske說,市場上的CI/CD系統(tǒng)可以為企業(yè)帶來具體價值,其使用情況可以反映出工程/產(chǎn)品企業(yè)的健康程度。
Komoroske負(fù)責(zé)StackRox的CI/CD流程,他說:“如果構(gòu)建、測試和部署新功能變得很便捷,那么公司應(yīng)變能力將會得到極大提高。如果要花上幾周甚至幾個月的時間才能在客戶面前取得成功,那么客戶就會選擇其他能夠做得更好的企業(yè)。”
在研究支持CI/CD流程的軟件時,企業(yè)需要進(jìn)行足夠的研究。Komoroske說:“企業(yè)要有負(fù)責(zé)產(chǎn)品技術(shù)指導(dǎo)、壽命或健康狀況的人來專門花費(fèi)一些時間研究生態(tài)系統(tǒng)和可用的解決方案。請他們征求產(chǎn)品開發(fā)人員的意見。這些人將成為CI/CD系統(tǒng)的主要用戶,因?yàn)樗麄兠刻於家幚硭鼈儭?rdquo;
一旦企業(yè)選擇了這樣的系統(tǒng),那么就需要避免棄用的問題。Komoroske說:“這些解決方案中的大多數(shù)都可以免費(fèi)試用,并且能夠與GitHub之類的平臺進(jìn)行集成。設(shè)置一個集成并使其開始構(gòu)建某些東西,實(shí)現(xiàn)構(gòu)建、測試或部署的自動化。當(dāng)人們看到這些系統(tǒng)能夠?yàn)槠涔ぷ髁鞒烫峁﹥r值時,他們自然會將更多任務(wù)遷移到上面。”
將全面的自動化測試與手動批準(zhǔn)相結(jié)合在一起
持續(xù)交付基本上由四個主要部分組成:
· 針對隔離進(jìn)行重構(gòu)
· 自動化測試
· 創(chuàng)建自動化流程管道
· 實(shí)現(xiàn)環(huán)境準(zhǔn)備和配置的自動化
這四個組成部分相當(dāng)籠統(tǒng),可能需要許多單獨(dú)的實(shí)踐來實(shí)現(xiàn)它們。例如,為了實(shí)現(xiàn)測試自動化,團(tuán)隊(duì)?wèi)?yīng)專注于以測試優(yōu)先的方法,以加強(qiáng)自動化單元測試和功能測試的創(chuàng)建;創(chuàng)建自動回歸、性能和安全性測試;進(jìn)行自動化測試,以確保環(huán)境和業(yè)務(wù)流程平臺被正確配置。
Kenefick說:“沒有任何一項(xiàng)測試比這些測試更重要。與此同時還應(yīng)該與其他質(zhì)量實(shí)踐相結(jié)合,例如使用靜態(tài)分析工具,確保同行評審以及使用持續(xù)集成管道。”
Quint指出,要確保在部署過程中的關(guān)鍵時刻有手動批準(zhǔn)的環(huán)節(jié)。他說:“手動批準(zhǔn)環(huán)節(jié)可防止未經(jīng)測試或未經(jīng)批準(zhǔn)的代碼進(jìn)入生產(chǎn)環(huán)境或更高的測試環(huán)境。這樣還可使你能夠控制代碼到達(dá)關(guān)鍵環(huán)境的時間。”
跟蹤指標(biāo)以確保CI/CD成功
與大多數(shù)其他技術(shù)和流程部署一樣,CI/CD也并非一勞永逸。Komoroske說:“我們要對構(gòu)建/測試/部署周期的時間和脆弱性有深入的了解,這樣可以確定優(yōu)化和改進(jìn)的領(lǐng)域與機(jī)會。盡管在速度方面快比慢要好,但是可靠性和正確性的重要性要高于速度。”
CI/CD流程和相關(guān)工具應(yīng)被視為“力量倍增器”,其可縮短工程設(shè)計(jì)、測試和產(chǎn)品上市時間,從而為企業(yè)帶來回報(bào)。企業(yè)可以通過采用CI/CD在開發(fā)和工程上實(shí)現(xiàn)可衡量的改進(jìn),通過衡量這些改進(jìn)再根據(jù)時間對性能展開比較。
協(xié)作軟件提供商Altimetrik的工程主管Farid Roshan說:“盡管我們都知道DevOps是在持續(xù)學(xué)習(xí)和改進(jìn)的前提下建立起來的,但是大多數(shù)公司在采用CI/CD的早期就忽略了這一點(diǎn)。” 他指出,企業(yè)應(yīng)該在CI/CD工具上處理數(shù)據(jù)清單,以幫助確定在整個開發(fā)過程中要衡量的關(guān)鍵績效指標(biāo)、績效目標(biāo)和分析。
了解采用CI/CD的業(yè)務(wù)驅(qū)動力并考慮未來需求
對于企業(yè)而言,重要的是要理解為什么需要采用CI/CD,以便企業(yè)的開發(fā)團(tuán)隊(duì)能夠建立必要的能力,從而確保實(shí)現(xiàn)關(guān)鍵目標(biāo)。
Roshan說:“如果工作恰當(dāng),CI/CD可以提高開發(fā)人員的生產(chǎn)力,優(yōu)化交付框架,提高運(yùn)營效率和敏捷轉(zhuǎn)換。”
第一代CI/CD平臺是作為編排服務(wù)開發(fā)的,它能夠?qū)⒄麄€產(chǎn)品生命周期中的流程連接起來,以提高生產(chǎn)效率。但是考慮到開發(fā)代碼所需的時間,這樣的平臺可能不會產(chǎn)生良好的投資回報(bào)(ROI)。
Roshan表示:“現(xiàn)代CI/CD功能采用的是模塊化架構(gòu),支持即插即用模式,并具有可配置的管道,能夠支持各種交付框架。”適當(dāng)?shù)貙⒐艿雷鳛榇a進(jìn)行部署可使工程團(tuán)隊(duì)開發(fā)高級功能,從而滿足業(yè)務(wù)的當(dāng)前需求。
盡管如此,預(yù)測未來需求也很重要。Roshan說:“企業(yè)要根據(jù)業(yè)務(wù)目標(biāo)的未來發(fā)展開發(fā)CI/CD功能。在基于現(xiàn)有流程的孤島中采用DevOps CI/CD會導(dǎo)致工具的部署出現(xiàn)分散化和缺乏標(biāo)準(zhǔn)化,這樣一來即便實(shí)現(xiàn)了交付敏捷性,其所實(shí)現(xiàn)的ROI也是最低的。這種失誤會在整個企業(yè)中產(chǎn)生連鎖反應(yīng)。”
全面實(shí)現(xiàn)自動化
Yasar說,作為CI/CD的一部分,企業(yè)應(yīng)使能夠?qū)崿F(xiàn)自動化的東西都實(shí)現(xiàn)自動化,并對不能自動化的東西進(jìn)行清楚的描述。他說:“自動化是DevOps的支柱之一,也是具有CI/CD功能的DevOps可以實(shí)現(xiàn)的主要優(yōu)勢之一。”
SEI推薦的敏捷開發(fā)方法是使用“基礎(chǔ)設(shè)施即代碼”(IaC)并對各種環(huán)境實(shí)現(xiàn)自動化。在基礎(chǔ)設(shè)施即代碼中,基礎(chǔ)設(shè)施組件(例如網(wǎng)絡(luò)、虛擬機(jī)和負(fù)載均衡器)的管理方法與DevOps團(tuán)隊(duì)管理源代碼版本的方法相同。
Yasar說:“企業(yè)可以通過流程和實(shí)踐來啟用IaC,包括配置管理、環(huán)境供應(yīng)等。目標(biāo)是將所有自動化程序都視為代碼,并存儲在安全的版本控制系統(tǒng)中。”
理想情況下,基礎(chǔ)設(shè)施代碼與應(yīng)用程序代碼存儲在同一存儲庫中,操作團(tuán)隊(duì)和其他利益相關(guān)者可以隨時訪問它。
作者:Bob Violino為Computerworld、CIO、CSO、InfoWorld和Network World等網(wǎng)站的特約撰稿人。
編譯:陳琳華
原文網(wǎng)址:https://www.infoworld.com/article/3513499/how-to-get-started-with-cicd.html?nsdr=true