Files
awoooi/.gitea/workflows/cd.yaml
OG T c96923f518
All checks were successful
E2E Health Check / e2e-health (push) Successful in 17s
fix(ci): 在 runner 中安裝 curl 解決 health check HTTP 000 問題
2026-03-29 22:36:04 +08:00

106 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# AWOOOI CD Pipeline (Gitea Actions - 方案 B)
# =============================================================================
# 流程: Build → Push to Harbor → Deploy to K8s
# 加速措施:
# 1. Docker Layer Cache → Harbor registry cache
# 2. 內部 Mirror → 192.168.0.110:5001 (Harbor Proxy Cache for DockerHub)
# 2026-03-29 Claude Code (ADR-039)
name: CD Pipeline
on:
push:
branches: [main]
paths-ignore:
- 'docs/**'
- '*.md'
- '.gitea/**'
env:
HARBOR: 192.168.0.110:5000
# Harbor Proxy Cache (指向 DockerHub 的內部 Mirror避免拉取限額)
HARBOR_MIRROR: 192.168.0.110:5001
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: ${{ env.HARBOR }}
username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
# ── API 鏡像建置(含 Layer Cache 加速)──────────────────────────────
- name: Build and Push API
uses: docker/build-push-action@v5
with:
context: ./apps/api
push: true
tags: |
${{ env.HARBOR }}/awoooi/api:${{ github.sha }}
${{ env.HARBOR }}/awoooi/api:latest
# Cache: 從 Harbor 先拉取上一次的 layer命中就不重新建置
cache-from: type=registry,ref=${{ env.HARBOR }}/awoooi/api:buildcache
cache-to: type=registry,ref=${{ env.HARBOR }}/awoooi/api:buildcache,mode=max
build-args: |
BUILDKIT_INLINE_CACHE=1
# ── Web 鏡像建置(含 Layer Cache 加速)──────────────────────────────
- name: Build and Push Web
uses: docker/build-push-action@v5
with:
context: ./apps/web
push: true
tags: |
${{ env.HARBOR }}/awoooi/web:${{ github.sha }}
${{ env.HARBOR }}/awoooi/web:latest
cache-from: type=registry,ref=${{ env.HARBOR }}/awoooi/web:buildcache
cache-to: type=registry,ref=${{ env.HARBOR }}/awoooi/web:buildcache,mode=max
build-args: |
NEXT_PUBLIC_API_URL=http://192.168.0.125:32334
BUILDKIT_INLINE_CACHE=1
# ── K8s 部署 ─────────────────────────────────────────────────────────
- name: Deploy to K8s
run: |
ssh -o StrictHostKeyChecking=no wooo@192.168.0.121 << 'DEPLOY'
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
sudo kubectl set image deployment/awoooi-api \
awoooi-api=192.168.0.110:5000/awoooi/api:${{ github.sha }} \
-n awoooi-prod
sudo kubectl set image deployment/awoooi-web \
awoooi-web=192.168.0.110:5000/awoooi/web:${{ github.sha }} \
-n awoooi-prod
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
# ── Health Check ─────────────────────────────────────────────────────
- name: Health Check
run: |
sudo apt-get update && sudo apt-get install -y curl || (apt-get update && apt-get install -y curl)
sleep 10
for i in 1 2 3; do
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 健康檢查通過"
exit 0
fi
echo "⏳ 嘗試 #$i: HTTP $HTTP_CODE等待 10s..."
sleep 10
done
echo "❌ API 健康檢查失敗"
exit 1