CI/CD 是一種通過(guò)在應(yīng)用開(kāi)發(fā)階段引入自動(dòng)化來(lái)頻繁向客戶交付應(yīng)用的方法。CI/CD 的核心概念是持續(xù)集成、持續(xù)交付和持續(xù)部署。作為一個(gè)面向開(kāi)發(fā)和運(yùn)營(yíng)團(tuán)隊(duì)的解決方案,CI/CD 主要針對(duì)在集成新代碼時(shí)所引發(fā)的問(wèn)題(亦稱:“集成地獄”)。 具體而言,CI/CD 在整個(gè)應(yīng)用生命周期內(nèi)(從集成和測(cè)試階段,到交付和部署)引入了持續(xù)自動(dòng)化和持續(xù)監(jiān)控。這些關(guān)聯(lián)的事務(wù)通常被統(tǒng)稱為“CI/CD 管道”,由開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)以敏捷方式協(xié)同支持。 CI 和 CD 之間(以及不同 CD 之間)有什么區(qū)別?縮略詞 CI / CD 具有幾個(gè)不同的含義。CI/CD 中的“CI”始終指持續(xù)集成,它屬于開(kāi)發(fā)人員的自動(dòng)化流程。成功的 CI 意味著應(yīng)用代碼的新更改會(huì)定期構(gòu)建、測(cè)試并合并到共享存儲(chǔ)庫(kù)中。該解決方案可以解決在一次開(kāi)發(fā)中有太多應(yīng)用分支,從而導(dǎo)致相互沖突的問(wèn)題。 CI/CD 中的“CD”指的是持續(xù)交付和/或持續(xù)部署,這些相關(guān)概念有時(shí)會(huì)交叉使用。兩者都事關(guān)管道后續(xù)階段的自動(dòng)化,但它們有時(shí)也會(huì)單獨(dú)使用,用于說(shuō)明自動(dòng)化程度。 持續(xù)交付通常是指開(kāi)發(fā)人員對(duì)應(yīng)用的更改會(huì)自動(dòng)進(jìn)行錯(cuò)誤測(cè)試并上傳到存儲(chǔ)庫(kù)(如 GitHub 或容器注冊(cè)表),然后由運(yùn)維團(tuán)隊(duì)將其部署到實(shí)時(shí)生產(chǎn)環(huán)境中。這旨在解決開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)之間可見(jiàn)性及溝通較差的問(wèn)題。因此,持續(xù)交付的目的就是確保盡可能減少部署新代碼時(shí)所需的工作量。 持續(xù)部署(另一種“CD”)指的是自動(dòng)將開(kāi)發(fā)人員的更改從存儲(chǔ)庫(kù)發(fā)布到生產(chǎn)環(huán)境,以供客戶使用。它主要為了解決因手動(dòng)流程降低應(yīng)用交付速度,從而使運(yùn)維團(tuán)隊(duì)超負(fù)荷的問(wèn)題。持續(xù)部署以持續(xù)交付的優(yōu)勢(shì)為根基,實(shí)現(xiàn)了管道后續(xù)階段的自動(dòng)化。 CI/CD 既可能僅指持續(xù)集成和持續(xù)交付構(gòu)成的關(guān)聯(lián)環(huán)節(jié),也可以指持續(xù)集成、持續(xù)交付和持續(xù)部署這三項(xiàng)構(gòu)成的關(guān)聯(lián)環(huán)節(jié)。更為復(fù)雜的是,有時(shí)“持續(xù)交付”也包含了持續(xù)部署流程。 歸根結(jié)底,糾纏于這些語(yǔ)義其實(shí)并無(wú)必要,您只需記得 CI/CD 實(shí)際上就是一個(gè)流程(通常形象地表述為管道),用于在更大程度上實(shí)現(xiàn)應(yīng)用開(kāi)發(fā)的持續(xù)自動(dòng)化和持續(xù)監(jiān)控。因案例而異,該術(shù)語(yǔ)的具體含義取決于 CI/CD 管道的自動(dòng)化程度。許多企業(yè)最開(kāi)始先添加 CI,然后逐步實(shí)現(xiàn)交付和部署的自動(dòng)化(例如作為云原生應(yīng)用的一部分)。 持續(xù)集成現(xiàn)代應(yīng)用開(kāi)發(fā)的目標(biāo)是讓多位開(kāi)發(fā)人員同時(shí)處理同一應(yīng)用的不同功能。但是,如果企業(yè)安排在一天內(nèi)將所有分支源代碼合并在一起(稱為“合并日”),最終可能造成工作繁瑣、耗時(shí),而且需要手動(dòng)完成。這是因?yàn)楫?dāng)一位獨(dú)立工作的開(kāi)發(fā)人員對(duì)應(yīng)用進(jìn)行更改時(shí),有可能會(huì)與其他開(kāi)發(fā)人員同時(shí)進(jìn)行的更改發(fā)生沖突。 持續(xù)集成(CI)可以幫助開(kāi)發(fā)人員更加頻繁地(有時(shí)甚至每天)將代碼更改合并到共享分支或“主干”中。一旦開(kāi)發(fā)人員對(duì)應(yīng)用所做的更改被合并,系統(tǒng)就會(huì)通過(guò)自動(dòng)構(gòu)建應(yīng)用并運(yùn)行不同級(jí)別的自動(dòng)化測(cè)試(通常是單元測(cè)試和集成測(cè)試)來(lái)驗(yàn)證這些更改,確保這些更改沒(méi)有對(duì)應(yīng)用造成破壞。這意味著測(cè)試內(nèi)容涵蓋了從類和函數(shù)到構(gòu)成整個(gè)應(yīng)用的不同模塊。如果自動(dòng)化測(cè)試發(fā)現(xiàn)新代碼和現(xiàn)有代碼之間存在沖突,CI 可以更加輕松地快速修復(fù)這些錯(cuò)誤。 持續(xù)交付完成 CI 中構(gòu)建及單元測(cè)試和集成測(cè)試的自動(dòng)化流程后,持續(xù)交付可自動(dòng)將已驗(yàn)證的代碼發(fā)布到存儲(chǔ)庫(kù)。為了實(shí)現(xiàn)高效的持續(xù)交付流程,務(wù)必要確保 CI 已內(nèi)置于開(kāi)發(fā)管道。持續(xù)交付的目標(biāo)是擁有一個(gè)可隨時(shí)部署到生產(chǎn)環(huán)境的代碼庫(kù)。 在持續(xù)交付中,每個(gè)階段(從代碼更改的合并,到生產(chǎn)就緒型構(gòu)建版本的交付)都涉及測(cè)試自動(dòng)化和代碼發(fā)布自動(dòng)化。在流程結(jié)束時(shí),運(yùn)維團(tuán)隊(duì)可以快速、輕松地將應(yīng)用部署到生產(chǎn)環(huán)境中。 持續(xù)部署對(duì)于一個(gè)成熟的 CI/CD 管道來(lái)說(shuō),最后的階段是持續(xù)部署。作為持續(xù)交付——自動(dòng)將生產(chǎn)就緒型構(gòu)建版本發(fā)布到代碼存儲(chǔ)庫(kù)——的延伸,持續(xù)部署可以自動(dòng)將應(yīng)用發(fā)布到生產(chǎn)環(huán)境。由于在生產(chǎn)之前的管道階段沒(méi)有手動(dòng)門(mén)控,因此持續(xù)部署在很大程度上都得依賴精心設(shè)計(jì)的測(cè)試自動(dòng)化。 實(shí)際上,持續(xù)部署意味著開(kāi)發(fā)人員對(duì)應(yīng)用的更改在編寫(xiě)后的幾分鐘內(nèi)就能生效(假設(shè)它通過(guò)了自動(dòng)化測(cè)試)。這更加便于持續(xù)接收和整合用戶反饋??偠灾羞@些 CI/CD 的關(guān)聯(lián)步驟都有助于降低應(yīng)用的部署風(fēng)險(xiǎn),因此更便于以小件的方式(而非一次性)發(fā)布對(duì)應(yīng)用的更改。不過(guò),由于還需要編寫(xiě)自動(dòng)化測(cè)試以適應(yīng) CI/CD 管道中的各種測(cè)試和發(fā)布階段,因此前期投資還是會(huì)很大。 |
|
來(lái)自: EA有意思 > 《IT技術(shù)》