隨著DevOps理念的普及與擴散,可能會被一大堆名字概念搞的莫名其妙逞刷,理清它們之間的關(guān)系可以幫助團隊知道DevOps如何落地嘉涌,改善工作流程。
Here’s a quick and easy way to differentiate agile, DevOps, and CI/CD:
- Agile focuses on processes highlighting change while accelerating delivery.
- CI/CD focuses on software-defined life cycles highlighting tools that emphasize automation.
- DevOps focuses on culture highlighting roles that emphasize responsiveness.
Agile Development
- 擁抱變化
-
快速迭代
CI /CD
CI/CD 都體現(xiàn)了如今快節(jié)奏市場中的文化和發(fā)展原則夸浅,旨在縮短開發(fā)周期仑最、提高軟件交付效率以及實現(xiàn)全流程的自動化。同時帆喇,兩者都有著共同的目標:讓軟件開發(fā)更少地依賴于手動執(zhí)行的任務(wù)词身,在此基礎(chǔ)上使得軟件的發(fā)布更加頻繁、更加安全可靠番枚。由于有著相同的目標法严,因此持續(xù)集成和持續(xù)交付并非相互排斥的, 只是它們的應(yīng)用范圍有所不同损敷。
- CI:持續(xù)集成(CONTINUOUS INTEGRATION)
- CD:持續(xù)部署(CONTINUOUS DEPLOYMENT)
- CD:持續(xù)交付(CONTINUOUS DELIVERY)
持續(xù)集成CI(Continuous Integration)
參考大師的定義: http://www.martinfowler.com/articles/continuousIntegration.html
持續(xù)集成(CI)是在源代碼變更后自動檢測、拉取深啤、構(gòu)建和(在大多數(shù)情況下)進行單元測試的過程
對項目而言拗馒,持續(xù)集成(CI)的目標是確保開發(fā)人員新提交的變更是好的, 不會發(fā)生break build; 并且最終的主干分支一直處于可發(fā)布的狀態(tài)溯街,
-
對于開發(fā)人員而言诱桂,要求他們必須頻繁地向主干提交代碼,相應(yīng)也可以即時得到問題的反饋呈昔。實時獲取到相關(guān)錯誤的信息挥等,以便快速地定位與解決問題
顯然這個過程可以大大地提高開發(fā)人員以及整個IT團隊的工作效率,避免陷入好幾天得不到好的“部署產(chǎn)出”堤尾,影響后續(xù)的測試和交付肝劲。
持續(xù)交付 (Continuous Delivery)
持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實運行環(huán)境的「預(yù)發(fā)布環(huán)境」(production-like environments)中郭宝。交付給質(zhì)量團隊或者用戶辞槐,以供評審。如果評審?fù)ㄟ^粘室,代碼就進入生產(chǎn)階段 持續(xù)交付并不是指軟件每一個改動都要盡快部署到產(chǎn)品環(huán)境中榄檬,它指的是任何的代碼修改都可以在任何時候?qū)崟r部署。
強調(diào):
1衔统、手動部署
2鹿榜、有部署的能力,但不一定部署
持續(xù)部署(Continuous Deployment)
代碼通過評審之后锦爵,自動部署到生產(chǎn)環(huán)境中犬缨。持續(xù)部署是持續(xù)交付的最高階段。
強調(diào)
1棉浸、持續(xù)部署是自動的
2、持續(xù)部署是持續(xù)交付的最高階段
3刺彩、持續(xù)交付表示的是一種能力迷郑,持續(xù)部署則是一種方式
- DEV Development environment -開發(fā)環(huán)境,用于開發(fā)者調(diào)試使用
- FAT Feature Acceptance Test environment -功能驗收測試環(huán)境创倔,用于軟件測試者測試使用
- UAT User Acceptance Test environment -用戶驗收測試環(huán)境嗡害,用于生產(chǎn)環(huán)境下的軟件測試者測試使用
- PRO Production environment -生產(chǎn)環(huán)境
通過CD可以加快軟件交付速度,目標用戶可以在幾天或幾周內(nèi)就收到修復(fù)后的功能與新增的功能畦攘,而無需等待數(shù)月后才更新霸妹。CD的部署頻率也加快了整個流程中的反饋循環(huán)。最新版本真的解決了預(yù)期的問題嗎知押?是否滿足了用戶的需求叹螟?用戶就可以快速地驗收并作出判斷鹃骂,而IT團隊也可以在問題影響到開發(fā)周期之前就解決反饋的問題。持續(xù)的反饋循環(huán)使得用戶與IT團隊更緊密地合作罢绽,以確保能準確的理解與滿足他們的需求畏线。整個交付過程進度可視化,方便團隊人員與客戶了解項目的進度良价。
持續(xù)集成可確保代碼庫中始終保持最新的代碼寝殴,同時可以快速集成來自多個開發(fā)人員的代碼,并確保這些代碼可在多個環(huán)境中協(xié)同工作明垢。它通常有助于減少錯誤并通過自動化流程來減少手動任務(wù)蚣常。CI可以實現(xiàn)代碼的自動構(gòu)建與測試,減少開發(fā)中的Bug痊银。因此抵蚊,CI適用于那些過度依賴手動任務(wù)和復(fù)雜構(gòu)建過程的企業(yè)。
持續(xù)交付適用于需要縮短開發(fā)周期曼验,更快地為目標用戶提供軟件的企業(yè)泌射。CD降低了部署新軟件或升級已有軟件的難度,且實現(xiàn)了全流程的自動化鬓照,因此您的團隊無需手動執(zhí)行復(fù)雜繁瑣的任務(wù)熔酷,從而加快反饋速度,來確保您增加的功能真正地滿足用戶的需求豺裆。
此外拒秘,也有不少人認為CI是CD的前提與基礎(chǔ),沒有CI就不能實現(xiàn)CD臭猜。這種說法也是比較流行的躺酒,其思路如下圖。因此蔑歌,不管是哪種說法羹应,CI與CD都是DevOps工具中不可或缺的理念與方法。
“持續(xù)交付與持續(xù)部署次屠,到底誰應(yīng)該包含誰园匹?”
持續(xù)部署是自動化的將一切變更放到生產(chǎn)環(huán)境,而持續(xù)交付則有判斷決策過程劫灶,并直接說“In order to do Continuous Deployment you must be doing Continuous Delivery.”
“Continuous Delivery is sometimes confused with Continuous Deployment.Continuous Deploymentmeans that every change goes through the pipeline and automatically gets put into production, resulting in many production deployments every day. Continuous Delivery just means that you are able to do frequent deployments but may choose not to do it, usually due to businesses preferring a slower rate of deployment. In order to do Continuous Deployment you must be doing Continuous Delivery.”
對持續(xù)交付與持續(xù)部署的關(guān)系裸违,Martin也承認兩個概念容易造成困惑,持續(xù)部署代表將所有變更自動通過流水線推到生產(chǎn)環(huán)境本昏,持續(xù)交付則意味著你有能力這樣做供汛,但可以基于業(yè)務(wù)選擇不這樣做。
所以我不覺得兩者有誰包含誰,兩者在這個層面講怔昨,一個是技術(shù)領(lǐng)域雀久,一個是業(yè)務(wù)領(lǐng)域。
參考
Continuous integration vs. continuous delivery vs. continuous deployment
https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deploymentContinuous Integration vs. Continuous Delivery
https://dzone.com/articles/continuous-integration-vs-continuous-deliveryThe Product Managers’ Guide to Continuous Delivery and DevOps
https://www.mindtheproduct.com/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/What Is DevOps? https://theagileadmin.com/what-is-devops/
What is CI/CD? https://www.mabl.com/blog/what-is-cicd
What’s the difference between agile, CI/CD, and DevOps?
https://www.synopsys.com/blogs/software-security/agile-cicd-devops-difference/