2026-03-29 Claude Code (統帥授權): - 新增 .gitea/workflows/cd.yaml (Build → Harbor → K8s) - 新增 .gitea/workflows/e2e-health.yaml (E2E 健康檢查) - 新增 ADR-039 文檔記錄遷移決策 方案 B: GitHub → Gitea CI/CD 遷移 - Gitea 作為主倉和 CI/CD - GitHub 降級為只讀備份 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
88 lines
2.6 KiB
YAML
88 lines
2.6 KiB
YAML
# =============================================================================
|
|
# AWOOOI CD Pipeline (Gitea Actions - 方案 B)
|
|
# =============================================================================
|
|
# 替代 GitHub Actions 的本地 CI/CD
|
|
# 2026-03-29 Claude Code (ADR-039)
|
|
#
|
|
# 流程: Build → Push to Harbor → Deploy to K8s
|
|
|
|
name: CD Pipeline
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- '*.md'
|
|
- '.gitea/**'
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to Harbor
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: 192.168.0.110:5000
|
|
username: ${{ secrets.HARBOR_USERNAME }}
|
|
password: ${{ secrets.HARBOR_PASSWORD }}
|
|
|
|
- name: Build and Push API
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: ./apps/api
|
|
push: true
|
|
tags: |
|
|
192.168.0.110:5000/awoooi/api:${{ github.sha }}
|
|
192.168.0.110:5000/awoooi/api:latest
|
|
|
|
- name: Build and Push Web
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: ./apps/web
|
|
push: true
|
|
tags: |
|
|
192.168.0.110:5000/awoooi/web:${{ github.sha }}
|
|
192.168.0.110:5000/awoooi/web:latest
|
|
build-args: |
|
|
NEXT_PUBLIC_API_URL=http://192.168.0.125:32334
|
|
|
|
- name: Deploy to K8s
|
|
run: |
|
|
# 使用 SSH 部署到 K8s master
|
|
ssh -o StrictHostKeyChecking=no wooo@192.168.0.121 << 'DEPLOY'
|
|
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
|
|
|
# 更新 API
|
|
sudo kubectl set image deployment/awoooi-api \
|
|
awoooi-api=192.168.0.110:5000/awoooi/api:${{ github.sha }} \
|
|
-n awoooi-prod
|
|
|
|
# 更新 Web
|
|
sudo kubectl set image deployment/awoooi-web \
|
|
awoooi-web=192.168.0.110:5000/awoooi/web:${{ github.sha }} \
|
|
-n awoooi-prod
|
|
|
|
# 等待 rollout
|
|
sudo kubectl rollout status deployment/awoooi-api -n awoooi-prod --timeout=120s
|
|
sudo kubectl rollout status deployment/awoooi-web -n awoooi-prod --timeout=120s
|
|
|
|
echo "✅ 部署完成"
|
|
DEPLOY
|
|
|
|
- name: Health Check
|
|
run: |
|
|
sleep 10
|
|
HTTP_CODE=$(curl -s -w "%{http_code}" -o /dev/null --connect-timeout 10 "http://192.168.0.121:32334/api/v1/health")
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ API 健康檢查通過"
|
|
else
|
|
echo "❌ API 健康檢查失敗"
|
|
exit 1
|
|
fi
|