你準備好持續交付(CD)了嗎?

[toc]git

持續交付(CD, Continuous delivery)就是說每次提交代碼時當即構建,並能夠將構建部署到生產環境中,本文將分享一些持續交付相關的方法和經驗。github

自動化(Automation)

自動化對於完善的CD管道來講必不可少,咱們理應儘量的用自動化取代手動工做以得到最大利益。數據庫

過去,咱們的開發團隊可能在將代碼發佈到生產環境以前通常會作測試,其中一些多是手動的,一些則是自動的。但在持續交付的狀況下,每次提交都要進行代碼測試,所以最好的辦法就是「自動化一切可自動化的東西」,而且不該僅限於開發團隊。安全

軟件中全部重要部分的自動化都是必要的——微信

  • 測試(Tests) - 單元測試、集成測試、UI測試、迴歸測試、性能測試...
  • 數據庫的安裝、備份和恢復
  • 產品及其依賴項的安裝和測試
  • 代碼文檔和用戶文檔

根據咱們的產品不一樣,可能還會有不少其餘可自動化的部分,例如基於雲計算的產品,能夠自動配置基礎架構。架構

常常提交、儘快提交(Commit often, Commit soon)

CD流程的第二個重要基礎是「常常提交、儘快提交」的能力,在交付軟件時,快速的反饋週期能夠帶來極大的不一樣。app

然而不幸的是,大爆炸開發方法和部署(Big bang development approach and deployments)還是業界的常態。用這種方式,每隔幾個月、一次性發布大量代碼到生產環境中很常見。運維

而在代碼中引入大量更改並將其部署到生產系統中可能會產生意外後果。很難確切地知道出了什麼問題,並且診斷起來很困難。以這種方式更新的大型系統很難恢復到工做狀態,由於您沒法輕鬆回滾。微服務

持續交付要求您常常將更改與主分支集成。每次更改代碼時,請將更改推送到版本控制。性能

若是咱們沒有成天commit,通常沒法確切知道咱們的commit如何適應系統的其餘部分,或者它是否已經破壞了任何東西。若是咱們使用的是版本控制系統,開發人員能夠切換到過去任何給定時間點的代碼。

頻繁提交的另外一個積極結果是咱們能夠更快地得到有關項目狀態的反饋,咱們很快就會發現某個解決方案走錯了方向,而若是出現問題,咱們只須要調試一些潛在的部分。另外,不要忘了有意義的提交備註很重要!

當開發人員長時間彼此孤立地工做時,實現CD幾乎是不可能完成的任務。在大公司中,持續數月的開發週期並不罕見。當開發工做以這種方式發生時,在開發階段結束時須要進行大量測試,這也就意味着在至關長的一段時間裏,咱們沒法瞭解應用是否正常工做。

避免這種不肯定性須要開發人員常常commit他們的工做,儘快讓更改對其餘人可用。在大型團隊中,這一點很重要,這使得合併衝突和由大型提交引發的其餘問題變得不那麼頻繁且更易於解決。

開發和運維(Developers and Operations)

先進的軟件開發公司通常都至少遵循了Agile/Scrum方法的一部分。例如,Scrum的一個儀式是團隊天天進行討論:昨天作了什麼、今天要作什麼以及有什麼困難,這麼作的目的是讓整個團隊瞭解正在進行的工做。

提升開發團隊生產環境知識的一種簡單方法是讓運維工程師參加,讓開發團隊可以更好地瞭解運維所作的工做。

從長遠來看,咱們須要DevOps,避免開發和運維成爲兩個孤島。

生產環境(Production Environment)

CD的最後邊界是部署到生產環境中。對於生成代碼庫的每次提交,不須要進行生產部署,但每一個構建都須要生產就緒。

大多數開發團隊對實際生產環境、硬件和軟件的規範、配置、安全規則等了解很少,甚至根本沒法訪問生產環境。

改善這種狀況須要採起的第一步,是創建一個儘量接近真實生產環境的臨時環境。

打破一體化(Breaking Monoliths)

有效實施CD的常見障礙是克服一體化架構代碼庫的「遲緩」,緩慢的構建、脆弱的代碼庫、複雜的代碼和架構是一些常見的問題。

常見的方法是從新構建整個系統,但通常方法會涉及到大量的時間、資源和資金,以及技術挑戰。

對於那些不專一於軟件開發的公司來講,要得到管理層的批准要困可貴多,由於這須要額外的預算和精力分配到可能只是微不足道的邊際收益的事情上。

對於其餘更注重軟件的公司而言,從長遠來看,從新構建整個解決方案多是最好的方法。

咱們建議的入門方法是將代碼庫拆分爲多個存儲庫,每一個存儲庫都集中在整個產品的較小子集上。這些較小的存儲庫中的每個都應該是自包含的,它們應該有本身的構建腳本、測試等。

如此一來,CD流程能夠更快實現,而無需對系統進行完全「檢修」。從長遠來看,應使用微服務架構方法將這些單獨的存儲庫進一步細分爲更小的部分。

關於Rainbond

Rainbond(雲幫)是"以應用爲中心」的開源PaaS, 深度整合基於Kubernetes的容器管理、ServiceMesh微服務架構最佳實踐、多類型CI/CD應用構建與交付、多數據中心資源管理等技術, 爲用戶提供雲原生應用全生命週期解決方案,構建應用與基礎設施、應用與應用、基礎設施與基礎設施之間互聯互通的生態體系, 知足支撐業務高速發展所需的敏捷開發、高效運維和精益管理需求。

相關文章
相關標籤/搜索