跳至主要内容

CI/CD

What?​

CI/CD 是指 Continuous Integration 和 Continuous Deployment 的縮寫,是一種軟體工程的流程或方法。簡單地說,CI/CD 是用來自動化軟體的整合、測試和部署過程,目的是提高開發效率和產品品質。它不僅減少了人為錯誤,也讓程式碼從撰寫到上線變得更快、更穩定。

舉個例子,假設你是一個開發者,你每天都在修改程式碼。如果沒有 CI/CD,每次修改後你都得手動測試每個功能,確認沒有出問題,再自己部署到伺服器。這不僅耗時,還很容易因為疏忽導致錯誤。而透過 CI/CD,你可以自動化這些重複工作,讓系統幫你執行所有繁瑣的流程。


Who?​

CI/CD 的主要使用者是開發者、測試工程師,以及 DevOps 團隊。此外,它也會影響企業的 IT 部門及最終使用者。以下是角色分類:

  • 開發者:負責撰寫程式碼並提交至版本控制系統(如 Git),CI/CD 會接著執行整合與測試。
  • 測試工程師:設計自動化測試案例以確保品質。
  • DevOps 團隊:設定 CI/CD pipeline 並維護相關工具。
  • IT 部門:負責管理基礎架構或伺服器環境。
  • 使用者:最終受益於更穩定且快速交付的產品。

實際情境中,例如在一個大型電商平台上,如果有新的功能要推出,就需要多方協同透過 CI/CD 確保更新能夠順利進行,而不影響現有功能。


When?​

CI/CD 最常被使用在以下時間點:

  1. 程式碼提交後:當開發者將新程式碼 push 到版本控制系統時,CI 會立即開始進行編譯與測試。
  2. 功能完成後:當某項功能完成並準備交付時,CD 會負責將其部署到 staging 或 production 環境。
  3. 持續交付需求高時:例如敏捷開發團隊,每天都有新功能或修正需要上線。

換句話說,只要你的專案需要頻繁更新,都可以依賴 CI/CD 來提高效率。例如,一個手機 App 每週都要更新新版本,就非常適合導入 CI/CD 流程。


Where?​

CI/CD 通常出現在以下架構或工具鏈中:

  1. 版本控制系統(如 GitHub, GitLab):管理原始碼變更。
  2. CI 工具(如 Jenkins, CircleCI):執行自動化編譯與測試流程。
  3. CD 工具(如 ArgoCD, Spinnaker):負責部署到不同環境。
  4. 雲端基礎架構(如 AWS, GCP, Azure):作為應用程式運行的平台。

例如,在一個微服務架構中,每個服務可能有獨立的 CI/CD pipeline,用於確保獨立部署和更新。


Why?​

CI/CD 最主要解決的是「重複性工作」和「交付速度」問題,同時提升軟體品質。以下是它解決的問題:

  1. 減少人為錯誤
    自動化流程避免了手動操作可能產生的疏漏,例如忘記執行某些步驟。

  2. 加速交付週期
    每次提交的新版本都能快速整合、測試並準備好部署,提高交付效率。

  3. 提升穩定性
    所有變更都經過標準化管道處理,可以迅速回溯問題來源。例如,如果某次更新造成應用崩潰,可以立即找到是哪段程式碼出了問題。

  4. 增強協作性
    開發與運維團隊之間藉由共享 pipeline 和標準化流程避免溝通障礙。例如,「我的代碼已經通過所有測試,你可以放心部署」。


How?​

🛠️ 建立階段​

建立 CI/CD pipeline 的一般步驟如下:

  1. 設定版本控制

    • 使用 Git 等工具管理原始碼變更,例如建立分支策略(Branch Strategy)。
  2. 定義 Pipeline

    • 編寫 YAML 或其他格式的配置檔案,用於描述整合、測試和部署步驟。例如:
      steps:
      - name: Build
      run: mvn compile
      - name: Test
      run: mvn test
      - name: Deploy
      run: kubectl apply -f deployment.yaml
  3. 整合工具

    • 選擇適合的 CI 工具,如 Jenkins 或 CircleCI,自動觸發 pipeline 執行。
  4. 配置 CD 環境

    • 使用 Kubernetes 或 Docker 等技術設定 staging 和 production 環境,以便自動部署應用程式。

🔍 查詢階段​

查詢階段通常用於監控 pipeline 執行情況以及排除故障。以下是查詢流程:

  1. 檢視 Pipeline 狀態

    • 在 Jenkins UI 或 GitLab 中查看各階段是否成功完成,例如「編譯失敗」或「單元測試未通過」。
  2. 分析 Log 資料

    • 查看詳細日誌找出錯誤原因,例如:
      [ERROR] Test case failed at line 42...
  3. 回溯版本歷史

    • 利用 Git log 比對哪次提交引入了問題。例如:
      git diff HEAD~1 HEAD src/main.java
  4. 修復並重新觸發 Pipeline

    • 修正代碼後重新 push 至分支以觸發重新執行 pipeline。

補充說明​

🔧 關鍵技術工具​

功能工具名稱特點
版本控制GitHub, GitLab協作方便
持續整合 (CI)Jenkins, CircleCI高度可擴展
持續部署 (CD)ArgoCD, Spinnaker支援多種雲端平台
容器技術Docker, Kubernetes提供隔離環境

📌 範例比較​

測試案例數量平均 Pipeline 時間
小型專案 (10 個)約 5 分鐘
大型專案 (100 個)約 20 分鐘

🧠 延伸/常見誤解​

誤解一:「只有大型專案才需要導入 CI/CD」​

事實上,小型專案也能從中受益。例如,即使是一個簡單網站,也可透過自動化部署節省時間成本。

誤解二:「CD 就等於直接上線」​

其實還包括 staging 環境的驗證,不一定每次都直接推送到 production 環境。有些公司甚至會手動審核部分關鍵步驟,例如重大功能上線前的人力確認。