總結(jié)
持續(xù)集成(CI)是一種開發(fā)實踐,其中開發(fā)人員經(jīng)常(最好每天幾次)將代碼集成到共享存儲庫中。然后可以通過自動構(gòu)建和自動測試來驗證每個集成。盡管自動化測試不是嚴(yán)格意義上的CI的一部分,但通常隱含了它。 定期集成的主要好處之一是,您可以快速檢測到錯誤并更輕松地定位它們。由于引入的每個更改通常很小,因此可以快速查明引入缺陷的特定更改。 近年來,CI已成為軟件開發(fā)的最佳實踐,并遵循一系列關(guān)鍵原則。其中包括版本控制,構(gòu)建自動化和自動化測試。 此外,持續(xù)部署和持續(xù)交付已成為最佳實踐,可讓您隨時隨地部署應(yīng)用程序,甚至在每次引入新更改時甚至將主代碼庫自動推入生產(chǎn)環(huán)境。這使您的團隊可以快速行動,同時保持可以自動檢查的高質(zhì)量標(biāo)準(zhǔn)。
CI/CD應(yīng)用場景:
開發(fā)人員將本地代碼上傳gitlab版本服務(wù)器
jenkins通過webhook插件自動到gitlab服務(wù)器拉取最新代碼
通過docker-maven-plugin插件自動編譯代碼
將自定義鏡像上傳docker私服倉庫
k8s集群自動拉取最新版本鏡像
自動化部署整個項目
用戶通過nginx負載均衡訪問整個項目
什么是持續(xù)集成、持續(xù)交付和持續(xù)部署 ?
持續(xù)集成(CI)
是一種開發(fā)實踐,要求開發(fā)人員每天多次將代碼集成到共享存儲庫中(GitLab)。
開發(fā)人員通常使用稱為CI Server的工具來進行構(gòu)建和集成。CI要求自檢代碼。這是用于自我測試以確保其按預(yù)期工作的代碼,這些測試通常稱為單元測試。集成代碼后,當(dāng)所有單元測試通過時,將得一個最新的的代碼版本。這表明他們已經(jīng)驗證了自己的更改已成功集成到一起,并且代碼按測試期望的那樣工作。
從圖例上來看持續(xù)集成的流程就十分清晰了:
開發(fā)人員提交代碼到 Source Repository (源代碼倉庫),并通過 git hook 等
觸發(fā) CI Server(持續(xù)集成服務(wù)器)的相關(guān)功能。執(zhí)行 編譯 -> 測試 -> 輸出結(jié)果的流程,
向開發(fā)人員反饋結(jié)果的 report
可以看出,持續(xù)集成的核心在于確保新增的代碼能夠與原先代碼正確的集成。與后續(xù)要介紹的持續(xù)交付以及持續(xù)部署,其最主要的差別也就在于其目標(biāo)不同。
連續(xù)交付(CD)
是一種軟件工程方法,團隊可以在短時間內(nèi)將軟件部署到生產(chǎn)環(huán)境,確保在任何時候可靠地發(fā)布軟件,并且在發(fā)布軟件時可以手動進行。
持續(xù)交付意味著每次更改代碼,集成并構(gòu)建代碼時,他們還將在與生產(chǎn)非常相似的環(huán)境中自動測試該代碼。我們將此部署到不同環(huán)境并在不同環(huán)境上進行測試的過程稱為部署管道。部署管道通常具有開發(fā)環(huán)境,測試環(huán)境和過渡環(huán)境,但是這些階段因團隊,產(chǎn)品和組織而異。
與持續(xù)集成相比,持續(xù)交付的側(cè)重點在于交付,其核心對象不在于代碼,而在于可交付的產(chǎn)物。由于持續(xù)集成僅僅針對于新舊代碼的集成過程執(zhí)行了一定的測試,其變動到持續(xù)交付后還需要一些額外的流程。
可以看到,與持續(xù)集成 相比較,持續(xù)交付 添加了 Test -> Staging -> Production 的流程,也就是為新增的代碼添加了一個保證:確保新增的代碼在生產(chǎn)環(huán)境中是可用的。
在這一增加的流程中,Test 環(huán)節(jié)不僅僅包含基本的單元測試,還需要延伸到更為復(fù)雜的功能測試以及集成測試等。在這里,Staging 指的是 類生產(chǎn)環(huán)境 ,其盡可能的對真實的網(wǎng)絡(luò)拓撲、數(shù)據(jù)庫數(shù)據(jù)以及硬件設(shè)備等資源進行模擬,從而為測試人員反饋代碼在生成環(huán)境中的可能表現(xiàn)。流程中每一個環(huán)節(jié)的執(zhí)行結(jié)果都會對開發(fā)人員進行反饋,每一個出現(xiàn)的錯誤都會導(dǎo)致版本的回滾。當(dāng)測試完畢確認(rèn)無誤之后,將由相關(guān)人員對其進行手動部署到生產(chǎn)環(huán)境。
持續(xù)部署
持續(xù)部署意味著:通過自動化部署的手段將軟件功能頻繁的進行交付。 在這種實踐中,團隊負責(zé)人所做的每一項更改都通過了所有測試階段,并自動投入生產(chǎn)。要實現(xiàn)連續(xù)部署,團隊負責(zé)人首先需要進行連續(xù)交付。
可以看到,同持續(xù)交付相比 持續(xù)集成 的區(qū)別體現(xiàn)在對 Production 的自動化。從開發(fā)人員提交代碼到編譯、測試、部署的全流程不需要人工的干預(yù),完全通過自動化的方式執(zhí)行。這一策略加快了代碼提交到功能上線的速度,保證新的功能能夠第一時間部署到生產(chǎn)環(huán)境并被使用。
DevOps概述
介紹完了持續(xù)集成、持續(xù)交付和持續(xù)部署三大件,接下來在講講 DevOps。與三大件不同,DevOps 更偏向于一種對于文化氛圍的構(gòu)建。
DevOps 一詞本身是對于 development 以及 operation 兩個詞的混合,其目的在于縮短系統(tǒng)開發(fā)的生命周期,在這過程中發(fā)布特性、修復(fù)bug以及更新均被緊密的結(jié)合。
聽起來似乎有點玄乎,可以這樣理解:DevOps 也即是促使開發(fā)人員與運維人員之間相互協(xié)作的文化。
DevOps 的概念似乎與持續(xù)交付的概念有些類似,兩者均旨在促進開發(fā)與運維之間的協(xié)作,但是實際上兩者差別很大:DevOps 更偏向于一種文化的構(gòu)建,在 DevOps 文化指導(dǎo)下,團隊中將包含了具有不同技能的人員(開發(fā)、測試等),并通過自動化測試與發(fā)布的手段,更快、更高質(zhì)量的生產(chǎn)軟件。
在傳統(tǒng)的團隊組織方式中,開發(fā)人員與運維人員之間是割裂開的,軟件開發(fā)流程被分割為多個獨立環(huán)節(jié),分別由不同的人員執(zhí)行。這使得軟件開發(fā)過程中需要付出高昂的溝通成本,層層手動的流程將大量的時間耗費在了重復(fù)的勞動中。
在 DevOps 的指導(dǎo)下,不同技能的人員處在同個團隊中,為了一個共同的軟件開發(fā)目標(biāo)而工作,更好的協(xié)同工作與自動化的手段能夠優(yōu)化整個 Code -> Build -> Test -> Release -> Operate -> Code 的循環(huán)。這一理念看起來很美,用圖畫來說明就構(gòu)成了一個和諧友好的大圈。
DevOps文化通常與持續(xù)交付相關(guān)聯(lián),因為它們都旨在增強開發(fā)人員和運營團隊之間的協(xié)作,并且都使 用自動流程來更快,更頻繁,更可靠地構(gòu)建,測試和發(fā)布軟件。這些都是像我們這樣的人想要的東西。盡管開發(fā)團隊經(jīng)常沒有看到流程改進的最直接好處,但CI,CD和DevOps對我們其他人來說卻有很多好處。簡而言之,我相信實踐CD并擁護DevOps文化的組織將更頻繁地向其客戶提供更有價值,更可靠的軟件。
-
自動化
+關(guān)注
關(guān)注
29文章
5483瀏覽量
79003 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229 -
devops
+關(guān)注
關(guān)注
0文章
108瀏覽量
11985
原文標(biāo)題:一文教你分清持續(xù)集成,持續(xù)交付,持續(xù)部署
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論