完整 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 流程。