完整 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

解鎖完整教學內容

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