投影片專區

CI/CD 核心概念,以投影片形式呈現,適合學習與團隊分享。

什麼是 CI/CD?

CI(持續整合):每次程式碼推送都自動觸發建置與測試

CD(持續交付/部署):通過測試後自動部署到目標環境

目標:縮短從「完成開發」到「上線服務」的時間,同時保障品質
  • 傳統方式:每週/每月手動部署,風險集中
  • CI/CD 方式:每天多次小步部署,問題早發現早修復

GitLab CI Pipeline 結構

push 程式碼 → 觸發 Pipeline
build stage → 編譯、打包 Docker 映像
test stage → 單元測試、E2E 測試、Lint
deploy stage → 自動部署到目標環境

同一 stage 的 jobs 並行執行;下一個 stage 需等上一個 stage 全部完成

Dockerfile 最佳實務

  • 使用多階段建置,最終映像只含執行所需檔案
  • 先 COPY package.json,再 COPY 程式碼(利用 Layer 快取)
  • 使用非 root 使用者執行應用(安全最佳實務)
  • 選擇 alpine 基底映像(比 debian 小 5-10 倍)
  • 加入 .dockerignore 排除 node_modules、.git 等

GitLab CI 核心變數

變數 說明
$CI_COMMIT_SHA 目前 commit 的完整 SHA
$CI_REGISTRY_IMAGE Container Registry 的映像路徑
$CI_COMMIT_BRANCH 目前 branch 名稱
$CI_PIPELINE_URL Pipeline 的 GitLab 連結

部署策略比較

策略 特點
Rolling Update 逐步替換容器,服務不中斷
Blue-Green 兩套環境切換,回滾最快
Canary 小比例流量先驗證,風險最低

CI/CD 安全最佳實務

  • API 金鑰存在 GitLab CI 變數,設為 Protected + Masked
  • 部署用 SSH 金鑰只給最小必要的權限
  • 每次建置後掃描 Docker 映像漏洞(Trivy)
  • 生產部署需要手動審核(when: manual
  • 定期輪換 Runner Token 和部署金鑰
  • 使用 Protected Branches 限制誰能推送到 main

本教學對應的真實架構

本教學網站(FastTrack)的部署方式:

  • 程式碼推送到 GitLab main branch
  • GitLab CI 自動建置 Docker 映像,推送到 Registry
  • 自架 Runner(標籤 deploy)拉取最新映像
  • docker compose up -d --no-build 更新服務
這正是你學完本教學後可以直接套用的真實方案!
1 / 7