CI/CD管道實(shí)施的十大挑戰(zhàn)和解決方案
CI/CD管道已成為整個(gè)IT部門軟件開發(fā)的主流方法。毫無(wú)疑問,CI / CD管道工具已經(jīng)發(fā)展了許多年。但是,開發(fā)人員,質(zhì)量檢查工程師和領(lǐng)導(dǎo)者在采用和有效實(shí)施CI / CD工具方面仍然面臨挑戰(zhàn)和障礙。
本文重點(diǎn)介紹了人們?cè)趯?shí)施過程中面臨的十大CI/CD挑戰(zhàn)及其潛在解決方案。
讓我們從基礎(chǔ)開始吧!
什么是CI / CD管道?
傳統(tǒng)上,該軟件是使用瀑布方法開發(fā)的,但是最近,敏捷和精益控制了軟件開發(fā)領(lǐng)域。今天,DevOps實(shí)踐在啟用這種敏捷軟件開發(fā)方法中起著至關(guān)重要的作用。要更深入地研究這些方法,請(qǐng)參考我們的敏捷與瀑布方法的比較。
持續(xù)集成和持續(xù)交付(即CI / CD管道工具,技術(shù)和階段)是構(gòu)建DevOps文化的基礎(chǔ)。這些工具和技術(shù)消除了手動(dòng)集成不同依賴項(xiàng)或手動(dòng)測(cè)試代碼庫(kù)的安全性和設(shè)計(jì)漏洞的需要。CI / CD方法可自動(dòng)執(zhí)行從集成到交付,測(cè)試和部署的整個(gè)操作過程。
什么是持續(xù)集成?
持續(xù)集成(CI)是CI / CD流程階段的開始步驟。
這意味著什么?
迭代開發(fā)軟件時(shí),開發(fā)團(tuán)隊(duì)經(jīng)常編碼,構(gòu)建,測(cè)試,發(fā)布和部署功能。CI通過設(shè)置腳本主導(dǎo)的機(jī)制來(lái)自動(dòng)檢測(cè)共享代碼存儲(chǔ)庫(kù)中的更改,從而實(shí)現(xiàn)此過程的自動(dòng)化。可以使用輪詢,定期監(jiān)視或使用類似Webhooks的推出機(jī)制來(lái)檢測(cè)更改。
一旦檢測(cè)到更改,您的CI解決方案就會(huì)自動(dòng)提取更新代碼的副本,進(jìn)行構(gòu)建,執(zhí)行單元測(cè)試,并執(zhí)行依賴項(xiàng)兼容性檢查以及早發(fā)現(xiàn)代碼漏洞。可以使用開放源代碼實(shí)施CIJenkins之類的工具或Gitlab CI,Circle CI或Codeship之類的持續(xù)集成SaaS服務(wù)。
什么是持續(xù)交付?
CI / CD管道的持續(xù)交付(CD)階段通過將自動(dòng)化測(cè)試的范圍擴(kuò)展到單元測(cè)試之外,從而增加了持續(xù)集成(CI)的優(yōu)勢(shì)。
測(cè)試不是持續(xù)集成的固有部分。盡管如此,DevOps團(tuán)隊(duì)還是更喜歡在集成級(jí)別進(jìn)行單元測(cè)試,以識(shí)別代碼錯(cuò)誤并使應(yīng)用程序更強(qiáng)大。CD除了單元測(cè)試外,還包含自動(dòng)負(fù)載測(cè)試,API測(cè)試,集成測(cè)試等。
持續(xù)交付的動(dòng)力在于,一旦超過持續(xù)集成(CI),就會(huì)觸發(fā)用于構(gòu)建,測(cè)試和暫存代碼更新的自動(dòng)化流程,從而使整個(gè)軟件發(fā)布周期自動(dòng)化。CI / CD管道的直接好處是,可以更快地將經(jīng)過驗(yàn)證的,安全的,健壯的,可部署的應(yīng)用程序推向登臺(tái)或預(yù)生產(chǎn)環(huán)境。
什么是持續(xù)部署?
持續(xù)部署(CD)進(jìn)一步擴(kuò)大了持續(xù)集成和持續(xù)交付的范圍。持續(xù)部署是CI / CD流水線過程的最后階段。連續(xù)部署是一種測(cè)試驅(qū)動(dòng)的方法,可以根據(jù)不同的參數(shù)驗(yàn)證應(yīng)用程序并自動(dòng)進(jìn)行部署。
健壯的連續(xù)部署實(shí)施方案結(jié)合了連續(xù)監(jiān)視和警報(bào)功能,以在出現(xiàn)任何問題時(shí)自動(dòng)過渡回以前的部署版本。還存在一些持續(xù)部署方面的挑戰(zhàn),需要仔細(xì)解決。我們將在下一部分稍后討論這些問題。
什么是連續(xù)測(cè)試?
無(wú)論是集成,交付還是部署,測(cè)試都是所有CI / CD流程階段不可或缺的一部分。連續(xù)測(cè)試是一種使應(yīng)用程序測(cè)試過程自動(dòng)化并將其嵌入CI / CD管道中的方法,以實(shí)現(xiàn)更大的敏捷性。
可以并且應(yīng)該在不同的CI / CD流程階段實(shí)施不同類型的自動(dòng)化測(cè)試,從而更輕松地克服CI / CD的挑戰(zhàn)。例如,單元測(cè)試更適合CI / CD管道的連續(xù)集成階段。此階段的單元測(cè)試通常涉及獨(dú)立于任何其他代碼的測(cè)試和驗(yàn)證代碼。集成測(cè)試,功能測(cè)試和驗(yàn)收測(cè)試可能是CI / CD管道的連續(xù)交付和連續(xù)部署階段的一部分。
CI / CD常見的挑戰(zhàn)(包括持續(xù)部署挑戰(zhàn))
堅(jiān)持使用CI / CD進(jìn)行敏捷軟件開發(fā)的方法并非總是輕而易舉。詳細(xì)了解了CI / CD管道的術(shù)語(yǔ)和總體流程之后,現(xiàn)在讓我們熟悉一些常見的CI / CD挑戰(zhàn)。
(1) 有限的環(huán)境挑戰(zhàn)
軟件開發(fā)團(tuán)隊(duì),尤其是測(cè)試人員,通常只能獲得有限的基礎(chǔ)結(jié)構(gòu)資源來(lái)測(cè)試其代碼。在這種情況下,團(tuán)隊(duì)傾向于建立共享的測(cè)試環(huán)境。
使用CI / CD管道時(shí),共享測(cè)試環(huán)境并不總是很順暢。與之相關(guān)的許多持續(xù)部署挑戰(zhàn)。幾個(gè)開發(fā)人員和團(tuán)隊(duì)(如果項(xiàng)目太大)正在同時(shí)將代碼提交到同一CI環(huán)境。有時(shí),一些并行測(cè)試正在進(jìn)行中。這可能會(huì)導(dǎo)致環(huán)境配置問題,因?yàn)椴煌臏y(cè)試可能需要不同的環(huán)境配置。
實(shí)際上,共享測(cè)試環(huán)境的不良配置通常會(huì)導(dǎo)致測(cè)試失敗,進(jìn)而導(dǎo)致部署失敗。這削弱了CI / CD方法的目的-加快迭代開發(fā)速度。
解決方案可以是云中的按需或按需專用測(cè)試環(huán)境。LambdaTest的Selenium自動(dòng)化測(cè)試功能可以減輕面臨CI / CD挑戰(zhàn)(例如有限的測(cè)試環(huán)境或效率低下的測(cè)試)的測(cè)試團(tuán)隊(duì)的壓力。
(2) 基于所有權(quán)的CI / CD挑戰(zhàn)
通常,在DevOps發(fā)布周期的后期會(huì)發(fā)現(xiàn)錯(cuò)誤和代碼錯(cuò)誤。有時(shí),CI / CD管道甚至?xí)捎谶@些錯(cuò)誤而失敗或崩潰。失敗的管道是正常的-如果所有代碼都不是可集成的,并且代碼沒有安全地執(zhí)行其預(yù)期的功能,它們就會(huì)中斷。
但是,不良的CI / CD管道實(shí)施通常會(huì)使立即確定故障原因變得繁瑣。反過來(lái),這使得重定向到相關(guān)團(tuán)隊(duì)修復(fù)代碼錯(cuò)誤變得更加困難。
對(duì)此CI / CD挑戰(zhàn)的快速解決方案是,確保使用易于識(shí)別的日志記錄功能編寫代碼和測(cè)試用例。在CI / CD管道的每個(gè)階段,將所有權(quán)角色分配給個(gè)人或團(tuán)隊(duì)。基于故障日志分析,這些人將負(fù)責(zé)找出故障原因,識(shí)別并重定向負(fù)責(zé)解決持續(xù)部署挑戰(zhàn)的團(tuán)隊(duì)。
(3) 為大型項(xiàng)目實(shí)施多個(gè)CI / CD管道
在大型企業(yè)中,幾個(gè)大型項(xiàng)目正在并行開發(fā)和維護(hù)中,而多個(gè)開發(fā)團(tuán)隊(duì)則逐步將更改提交給相應(yīng)的代碼存儲(chǔ)庫(kù)。因此,在提交,編譯,構(gòu)建,測(cè)試,交付,部署周期中引入問題時(shí),通常很難對(duì)其進(jìn)行分析并找出其根本原因。
對(duì)于企業(yè)級(jí)組織,這是CI / CD的主要挑戰(zhàn)之一。作為解決方案,團(tuán)隊(duì)可以在整個(gè)組織中擁有標(biāo)準(zhǔn)的CI / CD管道模板,并將復(fù)雜的大型項(xiàng)目分解為較小的模塊。這樣可以進(jìn)行有意義的報(bào)告,并加快反饋周期,以改進(jìn)代碼并解決問題。
(4) 集成安全工具
在451個(gè)研究的一項(xiàng)研究中,超過60%的受訪者表示,缺乏有效的自動(dòng)化集成安全工具是有效實(shí)施CI / CD工具的一大挑戰(zhàn)。
> Source
諸如靜態(tài)應(yīng)用程序安全測(cè)試(SAST),軟件組成分析測(cè)試(SCA)和動(dòng)態(tài)應(yīng)用程序安全測(cè)試(DAST)之類的安全測(cè)試可根據(jù)需要部署在CI / CD管道的不同階段。
SAST和SCA負(fù)責(zé)確保CI階段的安全性測(cè)試,并負(fù)責(zé)CI / CD管道的提交和構(gòu)建階段的提交前檢查和增量測(cè)試。DAST和IAST負(fù)責(zé)模糊測(cè)試,筆測(cè)試,強(qiáng)化等。
451研究強(qiáng)調(diào)的安全挑戰(zhàn)是安全實(shí)施效率低下,有時(shí)會(huì)誤導(dǎo)信息。通過正確地確定哪種安全測(cè)試工具最適合您其余的CI / CD工具,可以解決這些問題。必須將工具配置為自動(dòng)更新缺陷跟蹤系統(tǒng),如果它識(shí)別出關(guān)鍵的安全威脅,則中斷構(gòu)建,并更新指標(biāo)監(jiān)視儀表板。這將使負(fù)責(zé)任的團(tuán)隊(duì)能夠?qū)Πl(fā)現(xiàn)的威脅立即采取行動(dòng),并克服主要的持續(xù)部署挑戰(zhàn)。
(5) 基于協(xié)調(diào)的CI / CD挑戰(zhàn)
CI和CD通常由團(tuán)隊(duì)分別實(shí)施,并且工具和過程需要與增量反饋主導(dǎo)的過程兼容。
除了持續(xù)迭代開發(fā)中的工具外,業(yè)務(wù)團(tuán)隊(duì)和產(chǎn)品團(tuán)隊(duì)之間的溝通不暢還導(dǎo)致發(fā)布和部署周期的延遲。CI / CD管道的最大好處之一是加快了交付和部署周期,但是缺乏協(xié)調(diào)使用例失敗。在大型項(xiàng)目中,公司在數(shù)據(jù)庫(kù)和服務(wù)器上都有重要的數(shù)據(jù)和軟件。
當(dāng)構(gòu)建或測(cè)試用例失敗時(shí),出于明顯的安全原因,負(fù)責(zé)處理失敗構(gòu)建的團(tuán)隊(duì)將無(wú)法訪問這些關(guān)鍵資源。但是,可以通過團(tuán)隊(duì)之間的適當(dāng)協(xié)調(diào)和自動(dòng)化流程來(lái)解決這些挑戰(zhàn)。
(6) 成本和資源管理
在整個(gè)組織內(nèi)實(shí)施CI / CD在業(yè)務(wù)敏捷性,產(chǎn)品健壯性,安全性和功能發(fā)布周期方面具有長(zhǎng)期利益,但同時(shí)也帶來(lái)相關(guān)成本。資源,工具和基礎(chǔ)架構(gòu)要求大大增加了項(xiàng)目成本。
此外,每個(gè)人都根據(jù)自己的便利選擇工具和其他資源。此外,采用CI / CD并不總是意味著更好的敏捷性。如果開發(fā)人員和主管人員無(wú)法獲得適當(dāng)?shù)闹笇?dǎo)和培訓(xùn),它可能會(huì)減慢流程并阻礙開發(fā)人員的生產(chǎn)力。
(7) 在正在進(jìn)行的項(xiàng)目和工作流程中實(shí)施CI / CD
敏捷,采用和實(shí)施CI / CD管道到現(xiàn)有的工作流程和項(xiàng)目也不是一件容易的事。特別是在大規(guī)模的舊項(xiàng)目和工作流程中,對(duì)任何部分的更改可能都需要在其他幾個(gè)流程和工作流程中進(jìn)行更改。
這不可避免地需要格外謹(jǐn)慎,深入的知識(shí)以及對(duì)CI / CD工具的豐富經(jīng)驗(yàn)。就成本,延遲和質(zhì)量而言,賭注很高。
公司和團(tuán)隊(duì)?wèi)?yīng)該公正地評(píng)估他們是否真的需要CI / CD,以及是否會(huì)增加他們的流程和開發(fā)方法。如果答案是肯定的,他們還應(yīng)該根據(jù)成本和基礎(chǔ)設(shè)施資源評(píng)估可行性。
(8) 培訓(xùn),文化和其他內(nèi)部阻力
開發(fā)人員通常不喜歡執(zhí)行操作任務(wù),但是使用CI / CD方法時(shí),開發(fā)人員通常需要進(jìn)行干預(yù)并參與配置VM和其他環(huán)境。
由于CI / CD工具在市場(chǎng)上相對(duì)較新,因此沒有足夠的專業(yè)知識(shí)和培訓(xùn),這又是一個(gè)挑戰(zhàn),因?yàn)镃I / CD實(shí)施不當(dāng)會(huì)增加成本和風(fēng)險(xiǎn)。
而且,公司面臨開發(fā)人員,團(tuán)隊(duì)負(fù)責(zé)人和其他項(xiàng)目利益相關(guān)者的內(nèi)部抵制。對(duì)他們來(lái)說(shuō),實(shí)施CI / CD是一種新方法,將他們推開了他們的舒適區(qū)。
(9) CI / CD管道的低效實(shí)施
缺乏專業(yè)知識(shí),培訓(xùn)不足以及其他一些挑戰(zhàn)可能會(huì)導(dǎo)致CI / CD管道的實(shí)施效率低下。人們看到團(tuán)隊(duì)會(huì)自動(dòng)執(zhí)行錯(cuò)誤的流程,編寫有缺陷的測(cè)試用例,以錯(cuò)誤的方式配置CI,甚至將持續(xù)交付方法與持續(xù)部署概念混淆。
例如,不必每次成功交付都觸發(fā)自動(dòng)部署,因?yàn)橐惶炜赡苡袔状翁峤弧D荒茉谕惶焐踔翈字軆?nèi)為用戶發(fā)布10個(gè)產(chǎn)品版本。這是另一個(gè)重大的持續(xù)部署挑戰(zhàn),需要盡早解決。交付階段應(yīng)始終處于準(zhǔn)備就緒狀態(tài)。部署階段更多是業(yè)務(wù)決策。
(10) 持續(xù)測(cè)試和優(yōu)化
寫得不好的單元測(cè)試和驗(yàn)收測(cè)試可能是反饋主導(dǎo)的迭代軟件開發(fā)的瓶頸。但是,更多的是測(cè)試團(tuán)隊(duì)的內(nèi)部問題,而不是CI / CD的挑戰(zhàn)。但是,僅專注于功能測(cè)試對(duì)于CI / CD管道來(lái)說(shuō)是一個(gè)糟糕的連續(xù)測(cè)試實(shí)踐。還應(yīng)針對(duì)非功能性要求(例如性能測(cè)量和可靠性測(cè)試)編寫測(cè)試用例。
在銀行和醫(yī)療保健應(yīng)用中,性能功能可能非常關(guān)鍵。為性能測(cè)試和可靠性測(cè)試編寫測(cè)試用例并不像測(cè)試功能需求那樣簡(jiǎn)單。這些還需要大型測(cè)試環(huán)境來(lái)測(cè)試應(yīng)用程序的可伸縮性,可靠性和各種測(cè)試失敗方案。
LambdaTest在您的管道中的集成將如何解決CI / CD方面的挑戰(zhàn)?
LambdaTest是跨瀏覽器兼容性測(cè)試工具。它使您能夠在所有主要瀏覽器上以交互方式測(cè)試您的Web和移動(dòng)應(yīng)用程序,以適用于不同的移動(dòng)操作系統(tǒng)(如Android,iOS)以及桌面環(huán)境(如Mac,Windows等)。
LambdaTest為您提供了開箱即用的自動(dòng)化測(cè)試解決方案,可以輕松地與一系列應(yīng)用程序集成,從錯(cuò)誤記錄到項(xiàng)目管理工具和儀表板。另外,如前所述,LambdaTest與您選擇的CI工具集成在一起,使自動(dòng)化測(cè)試為您帶來(lái)無(wú)縫的體驗(yàn)。
克服最常見的CI / CD挑戰(zhàn)的最佳方法之一是使用基于云的自動(dòng)化測(cè)試平臺(tái),該平臺(tái)可輕松與CI / CD工具集成。例如,LambdaTest在云中為您提供了一套自動(dòng)化測(cè)試服務(wù),以使用云Selenium Grid在2000多種瀏覽器和設(shè)備中測(cè)試您的軟件。
就這樣!
總而言之,CI / CD的大多數(shù)挑戰(zhàn)都與不良做法和不良實(shí)施有關(guān)。正確評(píng)估CI / CD要求并選擇正確的工具,正確配置CI / CD管道階段,并正確地培訓(xùn)相關(guān)專業(yè)人員,將會(huì)成功實(shí)施CI / CD。因此,您的組織可以將更多的精力放在發(fā)布功能上,而不是控制操作上。
利用自動(dòng)化的力量-利用自動(dòng)化測(cè)試。
原文鏈接:
https://medium.com/better-programming/the-top-10-ci-cd-pipeline-implementation-challenges-and-solutions-a36abd28bfe5