完整 CI/CD 實戰

完整多階段 Pipeline

name: Full CI/CD Pipeline

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20', cache: 'npm' }
      - run: npm ci
      - run: npm run lint
      - run: npm test

  build:
    needs: test
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v5
        with:
          context: .
          push: ${{ github.ref == 'refs/heads/main' }}
          tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}

  deploy:
    needs: build
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: azure/setup-kubectl@v4
        with: { version: 'v1.28.3' }
      - uses: azure/k8s-set-context@v4
        with: { kubeconfig: ${{ secrets.KUBECONFIG }} }
      - name: Deploy
        run: |
          kubectl set image deployment/my-app app=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} --record
          kubectl rollout status deployment/my-app --timeout=5m || \
            (kubectl rollout undo deployment/my-app && exit 1)

課程總結

CI/CD 課程完成!你現在可以:

  • ✅ 建立 GitHub Actions Workflow
  • ✅ 自動 Docker 建置與推送
  • ✅ K8s 零停機部署
  • ✅ 自動 Rollback
  • ✅ 完整多階段 Pipeline

關鍵要點

  • ✅ CI (持續整合) = 頻繁合併程式碼 + 自動建置 + 自動測試
  • ✅ CD (持續部署) = 通過測試的自動部署到生產環境
  • ✅ CI/CD Pipeline 的核心:Build → Test → Deploy
  • ✅ GitHub Actions + Docker = 最受歡迎的 CI/CD 組合
  • ✅ 好 CI/CD 的標準:快、可靠、可重現

關鍵指標

| 指標 | 目標 | 意義 | |------|:----:|------| | Pipeline 時間 | < 10 分鐘 | 開發者等待時間越短越好 | | 部署頻率 | 每天多次 | 越小批次的部署風險越低 | | 失敗恢復時間 | < 1 小時 | 出錯後能快速回退 | | 變更失敗率 | < 15% | 部署到生產後的故障率 |



完整 CI/CD Pipeline

從 Commit 到 Production

程式碼推送
    ↓
CI:自動測試 
    ├── Unit Test
    ├── Integration Test
    └── Lint Check
    ↓
CI:自動建置
    ├── Docker Build
    └── Push to Registry
    ↓
CD:自動部署
    ├── Deploy to Staging
    ├── Smoke Test
    └── Deploy to Production
    ↓
監控與告警

完整的 GitHub Actions Workflow

name: Full CI/CD Pipeline

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test
      - run: npm run lint

  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t myapp .
      - run: docker push myapp

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: kubectl apply -f k8s/

課程總結

這堂 CI/CD 課從基礎概念、GitHub Actions、Docker、部署策略到完整 Pipeline——你現在可以為任何專案建立自動化 CI/CD 流程。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!