持續集成、持續交付和持續部署 的真正區別(2)
發(fā)表于:2020-03-09來(lái)源:dockone作者:dockone點(diǎn)擊數:
標簽:
保持 CI 的構建時(shí)間短,這是一個(gè)折衷方案。在 CI 范圍內運行時(shí)間更長(cháng)或幾乎沒(méi)有價(jià)值的測試應移至 CD 步驟。是的,那里的故障也需要修復。但是,由于它
保持 CI 的構建時(shí)間短,這是一個(gè)折衷方案。在 CI 范圍內運行時(shí)間更長(cháng)或幾乎沒(méi)有價(jià)值的測試應移至 CD 步驟。是的,那里的故障也需要修復。但是,由于它們不會(huì )阻止任何人做他們的事情,因此你可以在完成工作后將這些修補程序作為“下一項任務(wù)”。只需在工作時(shí)關(guān)閉通知并不時(shí)檢查即可。保持上下文切換到最小。
持續交付和部署是工程問(wèn)題
讓我們來(lái)解決一下定義,以解決這個(gè)問(wèn)題。
持續交付是指能夠隨時(shí)部署任何版本的代碼。實(shí)際上,它是指代碼的最新版本。你不會(huì )自動(dòng)部署,通常是因為你不必或不受項目生命周期的限制。但是只要有人愿意,就可以在最短的時(shí)間內完成部署。有人可以成為想要在暫存或預生產(chǎn)環(huán)境中進(jìn)行測試的 test/QA 團隊?;蛘邔?shí)際上可能是時(shí)候將代碼推向生產(chǎn)了。
持續交付的思想是準備與你要在環(huán)境中運行的制品盡可能接近。如果使用 Java,則可以是 jar 或 war 文件,如果使用 .NET,則可以是可執行文件。它們也可以是已轉譯 JS 代碼的文件夾,甚至是 Docker 容器,或者其他使部署變得更短(即,你已盡可能預先構建)。
通過(guò)準備制品,我不是要把代碼變成制品。這通常是一些腳本和執行時(shí)間。準備意味著(zhù):
運行所有測試,以確保代碼一旦部署便可以正常工作。如果可以自動(dòng)執行單元測試,集成測試,端到端測試,甚至
性能測試。
這樣,你可以過(guò)濾主分支的哪些版本實(shí)際上已準備好生產(chǎn),哪些尚未準備就緒。理想的測試套件:
確保應用程序關(guān)鍵功能正常工作。理想情況下,所有功能正常
確保沒(méi)有引入性能破壞因素,因此當您的新版本受到眾多用戶(hù)的歡迎時(shí),它就有機會(huì )發(fā)生
空運行您的代碼需要的任何
數據庫更新,以免出現意外
它不需要非???。30分鐘或1小時(shí)是可以接受的。
持續部署是下一步。你將代碼的最新版本和生產(chǎn)就緒版本部署到某些環(huán)境。如果你足夠信任 CD 測試套件,則是理想的生產(chǎn)方式。
請注意,根據上下文,這并非總是可能或值得付出。持續交付通常足以提高生產(chǎn)力。特別是如果你在封閉的網(wǎng)絡(luò )中工作并且環(huán)境有限,則可以部署到該環(huán)境。也可能是軟件的發(fā)布周期阻止了計劃外的部署。
持續交付和持續部署(從現在起將其稱(chēng)為 CD)不是團隊問(wèn)題。他們的目的是在執行時(shí)間,維護工作和測試套件的相關(guān)性之間找到適當的平衡,以便能夠說(shuō)“此版本應能正常工作”。這是一個(gè)平衡。如果你的測試持續 30 個(gè)小時(shí),那就有問(wèn)題了。有關(guān)
Oracle 數據庫測試套件的例子,請參見(jiàn)這篇史詩(shī)般的帖子。如果你花費大量時(shí)間使測試與最新代碼保持最新,從而阻礙了團隊的進(jìn)步,那也不是一件好事。而且,如果你的測試套件幾乎沒(méi)有任何保證……那基本上是沒(méi)有用的。
在理想的世界中,我們每次向主分支提交都需要 1 組可部署的制品。你可以看到我們有一個(gè)垂直的可擴展性問(wèn)題:我們從代碼轉移到制品的速度越快,我們就越準備好部署最新版本的代碼。
最大的不同是什么?
持續集成是一個(gè)水平可伸縮性問(wèn)題。你希望開(kāi)發(fā)人員經(jīng)常合并其代碼,因此檢查必須快速。理想情況下,幾分鐘之內就可以避免開(kāi)發(fā)人員始終通過(guò) CI 版本的高度異步反饋來(lái)切換上下文。
你擁有的開(kāi)發(fā)人員越多,則在所有活動(dòng)分支上運行簡(jiǎn)單檢查(構建和測試)所需的計算能力就越高。
良好的 CI 構建:
確保沒(méi)有將破壞基本內容并阻止其他團隊成員工作的代碼引入主分支 足夠快,可以在幾分鐘內向開(kāi)發(fā)人員提供反饋,以防止任務(wù)之間進(jìn)行上下文切換
持續交付和部署是垂直可伸縮性問(wèn)題。你需要執行一個(gè)相當復雜的操作。
良好的 CD 構建:
確保盡可能多的功能正常運行
速度越快越好,但這不是速度問(wèn)題。30 至 60 分鐘的構建就可以了
一個(gè)常見(jiàn)的誤解是將 CD 視為諸如 CI 之類(lèi)的水平可擴展性問(wèn)題:從代碼移至制品的速度越快,實(shí)際處理的提交越多,并且越接近理想的情況。但是我們不需要。盡可能快地為每次提交生產(chǎn)制品通常是過(guò)度的。你可以盡最大的努力很好地使用 CD:擁有一個(gè) CD 構建,它將在給定構建完成后立即選擇最新提交進(jìn)行驗證。
毫無(wú)疑問(wèn) CD 真的很難。獲得足夠的測試信心才能說(shuō)你的軟件已準備好自動(dòng)部署,通??梢栽谥T如 API 或簡(jiǎn)單 UI 之類(lèi)的底層應用程序上使用。在復雜的 UI 或大型整體系統上很難實(shí)現。
原文轉自:https://fire.ci/blog/the-difference-between-ci-and-cd/