0%

什麼是 CI/CD ?

CI/CD

軟體開發的過程有許多個階段要實行,例如 : 建置、測試、部署等等,這些階段又稱為軟體開發生命週期。所以 CI、CD 的目的就是要透過自動化的方式來加快軟體開發的生命週期並且確保程式的品質。

Continuous Integration (持續整合)

CI 的目的是針對軟體系統每個變動,能持續性的進行驗證並整合。所以在 CI 的階段通常會執行以下幾個步驟 :

  • 建置 (Build)
  • 測試 (Test)

CI 的好處是可以先對程式自動的進行驗證以確保程式的品質,才不會讓不良的程式直接上線導致系統異常甚至崩潰。

一個專案通常都有好幾個人一起負責,不太可能都非常了解別人做的內容,因此在每個人的分支要合併回主分支時就有可能發生衝突。雖然 git 可以解衝突,但是僅限於程式碼的衝突,邏輯上的衝突是無法解決的。

但是總不可能每次要合併分支的時候都要找專案的所有的負責人一起來看有沒有問題,所以就需要撰寫測試,例如單元測試、整合測試等等,並在分支合併時自動的進行建置和測試。說白了就是要看你寫的程式有沒有問題以及會不會破壞到其他的程式。

Continuous Delivery (持續交付)

CD 又分為兩個定義,Continuous Delivery 和 Continuous Deployment,這裡先介紹 Continuous Delivery。

在持續交付的階段,程式碼仍然需要先通過品質的驗證,最後會產生一個可以部署的成品,可能是一個執行檔或是 docker image。這個成品就可以用來進行發佈上線。

而持續交付通常包含了一個手動的步驟,用來讓開發人員確認和部署到生產環境。

Continuous Deployment (持續部署)

持續部署和持續交付只差在手動部署的動作,持續部署不再需要開發人員手動部署成品到生產環境,只要程式碼提交的 PR 通過了,剩下的整個過程都會自動完成。

CI/CD 流程

下面這張圖擷取自 Amazon 的官網,可以很清楚的看到 CI/CD 的流程。

CI/CD Flow

Summary

本篇概略介紹了 CI/CD 的概念,其實 CI/CD 就是要提高程式碼的提交率,透過不斷的提交並自動化的驗證程式碼的品質,可以提早發現問題並即時解決。這不但可以避免有問題的程式碼上線造成系統異常,也可以因此讓開發人員對於自己提交的程式更有信心。

此外因為程式碼的合併和部署都自動化了,開發人員只要專注在開發工作即可,這樣可以省下很多手動測試和部署的時間,也會因此提高生產率。

參考

[1] 持續整合, 持續交付和持續部署區別
[2] 什麼是持續交付?
[3] 持續整合、持續交付、持續部署(CI/CD)簡介
[4] CI/CD是什麼?如何理解持續集成、持續交付和持續部署