哈囉,大家好!歡迎來到我們系列文的第三階段!
在過去的十天裡,我們已經徹底征服了 Kubernetes 的核心。從一個 Pod
開始,到部署 Deployment
、建立 Service
,再到管理設定 (ConfigMap
/Secret
)、儲存 (PVC
)、流量 (Ingress
),最後還學會了用 Helm
將它們打包。
現在,我們已經擁有了一套手動在 K8s 中部署、管理、升級應用的完整能力。
但,你心中可能已經浮現出一個巨大的不滿足:「這個流程還是太『手動』了!」
今天,我們就要正式進入 DevOps 的世界,學習如何將這一切串連成一條自動化的生產線,認識現代軟體開發的標準配備 —— CI/CD。
在解釋 CI/CD 是什麼之前,我們先來想一下,如果沒有自動化,一個「發布新版本」的完整流程會是什麼樣子:
git push
推送到 GitLab。git pull
最新的程式碼。docker build -t ota-backend:1.1 .
。docker push your-registry/ota-backend:1.1
。deployment.yaml
,手動將 image
的 tag 從 1.0
改成 1.1
。kubectl apply -f deployment.yaml
。這個流程不僅極度耗時,更充滿了人為失誤的風險:忘記跑測試、打錯 Image Tag、apply
到錯誤的環境... 每一個環節都可能導致生產環境的災難。
我們需要一個系統,來將這些重複、繁瑣、且容易出錯的步驟,全部自動化。這就是使用 CI/CD 的原因。
CI (持續整合) 關注的是開發流程的前半段:從程式碼提交,到產出一個可部署的軟體成品。
它的核心思想是:讓開發者頻繁地、自動地將他們寫的程式碼,整合到一個共享的程式碼倉庫(例如 GitLab)的主分支上。
每當有新的程式碼被推送時,CI 伺服器就會自動觸發一連串的動作:
CI 的最大好處是**「提早發現問題」**。如果有人提交的程式碼破壞了建置,或導致測試失敗,整個團隊會在幾分鐘內就收到通知,而不是等到幾天、甚至幾週後,才在整合階段發現一個難以追蹤的 Bug。
CD 則是 CI 流程的延伸,它關注的是後半段:如何將通過測試的軟體成品,安全、快速地交付到使用者手中。
CD 又可以細分為兩個層次:
staging
或 UAT
環境)。市面上有許多 CI/CD 工具(例如 Jenkins, CircleCI),而在我們的系列文中,我們將聚焦於與 GitLab 深度整合的 GitLab CI/CD。
它的運作,主要圍繞著兩個核心元件:
.gitlab-ci.yml
檔案:
.gitlab-ci.yml
的檔案。test
階段包含一個 unit-test
的任務」、「build
階段包含一個 build-image
的任務」。.gitlab-ci.yml
是「劇本」,那麼 GitLab Runner 就是負責執行這個劇本的「工人」。.gitlab-ci.yml
中讀取任務,並將其分派給一個空閒的 GitLab Runner 來執行。今天,我們從「人工部署的惡夢」出發,理解了 CI/CD 為何能成為現代軟體開發的標準配備。
.gitlab-ci.yml
劇本,和一個或多個 GitLab Runner 工人,來實現這整套自動化流程。在明天的文章中,我們就要在我們的 Kubernetes 叢集中,設定並註冊一個可以動態擴展的 GitLab Runner**!明天見!