接下來將會逐步講解內容
CI 【持續整合】(Continuous integration)
是針對軟體系統每個變動,能持續且自動地進行驗證
此驗證可能包含了:
- 建置 (build)
- 測試 (test)
- 程式碼分析 (source code analysis)
- 其他相關工作 (自動部署)
大家最為熟悉的就是 單元測試 Unit Test
就是檢查專案內的預先寫好的單元測試是否都有通過,這樣才能保證新 push 上去的程式碼,不僅可以被成功建置也保證該功能沒有出現漏洞。
(單元測試就會是另一個很深入的話題了,就先不在此討論了)
所以當 dev 說 CI 過不了,則就可以理解成 程式碼 有問題,他們需要再修正,直到 CI 全部通過後,才會進到 CD 的流程。
補充:
大師 Martin Fowler 對持續整合是這樣定義的:
持續整合是一種軟體開發實踐,即團隊開發成員經常整合他們的工作,
通常每個成員每天至少整合一次,也就意味著每天可能會發生多次整合。每次整合都通過自動化的構建(包括編譯,釋出,自動化測試)來驗證,從而儘快地發現整合錯誤。
許多團隊發現這個過程可以大大減少整合的問題,讓團隊能夠更快的開發內聚的軟體。
CD 【持續交付 or 持續部屬】(Continuous Delivery or Continuous Deployment)
這部分往往為較複雜的部份,在實作上的難度也是較高的
先簡單說明
- 持續交付
是可自動將已驗證的程式碼(CI)發佈到 server。
為了實現高效的持續交付流程,務必要確保 CI 已內置於開發管道。
所以持續交付的目標是擁有一個可隨時部署到生產環境的儲存庫。
持續交付並不是指每一個改動都要儘快部署到產品環境中,它指的是任何的程式碼修改都可以在任何時候準備實施部署。
備註
儲存庫: 可能是 Gitlab、Github 等等,也就是常見的版本控制的儲存庫
- 持續部屬
部屬 顧名思義就是 要將完成的程式碼部屬到的 server 上
也就是 CI/CD 中的最後一個步驟
所以兩者的差異為
持續交付: 自動將生產就緒型構建版本發佈到代碼存儲庫
持續部署: 可以自動將應用發佈到生產環境。
也就是都是先 持續交付 才會有 持續部署
舉個實例子
假設我現在有一台虛擬機當作伺服器,我想要在裡面架設網站
1. push 新功能的程式碼
2. CI 幫我檢查程式是否可以編譯成功,單元測試是否都通過
3. 當 CI 部分都通過後,接著執行 CD 的部分,
4. 此時這過程可能會對應各個團隊的開發流程而有所不同,可能會先停留在 持續交付 階段
5. 直到全部完成後,會把程式碼丟到伺服器上,並且架設好 web server,幫我開好對外服務等等。
持續交付表示的是一種能力,而持續部署表示的則一種方式。
持續部署是持續交付的最後階段
看到這裡時,對敏捷開發流程有所有瞭解人的
就會知道,CI/CD 在敏捷開發中,是佔非常重要的一個環節
因為敏捷開發提倡的就是 擁抱變化 和 快速迭代
CI/CD 就是為了避免過多手動操作及驗證,將全部流程自動化,進而也會帶動開發的節奏,也就會對應到敏捷開發了
至於敏捷開發、瀑布開發 等等 這些日後有機會再聊聊 吧。
網路上也有非常多大神文章可參考,今天就淺談一下XD
參考多方來源: