Files
awoooi/.gitea/workflows/cd.yaml
OG T d6b8224942 feat(cicd): ADR-039 Gitea CI/CD 遷移
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>
2026-03-29 21:51:45 +08:00

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