Files
dashboard-backend/.gitea/workflows/build-deploy.yml
CloudForge Dev 302bbb8ba5
Some checks failed
Build and Deploy Backend / build-and-deploy (push) Failing after 5m14s
Trigger build
2025-12-09 11:57:58 +08:00

109 lines
3.9 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.

name: Build and Deploy Backend
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Restore kubeconfig
run: |
mkdir -p ~/.kube
echo "$KUBECONFIG_DATA" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
env:
KUBECONFIG_DATA: ${{ secrets.KUBECONFIG }}
- name: Install kubectl
run: |
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl
- name: Create Kaniko Build Job
run: |
/usr/local/bin/kubectl apply -f - <<EOJOB
apiVersion: batch/v1
kind: Job
metadata:
name: kaniko-build-${GITHUB_SHA:0:8}
namespace: cloudforge
spec:
ttlSecondsAfterFinished: 3600
template:
spec:
serviceAccountName: kaniko-builder
containers:
- name: kaniko
image: gcr.io/kaniko-project/executor:v1.20.0
args:
- "--dockerfile=Dockerfile"
- "--context=git://gitea-http.gitea.svc.cluster.local:3000/cloudforge-dev/dashboard-backend.git#main"
- "--destination=registry.kube-system.svc.cluster.local:5000/cloudforge-dashboard-backend:${GITHUB_SHA:0:8}"
- "--destination=registry.kube-system.svc.cluster.local:5000/cloudforge-dashboard-backend:latest"
- "--insecure"
- "--skip-tls-verify"
restartPolicy: Never
EOJOB
echo "✅ Build job created, waiting for image..."
# 等待 build 完成(改為 300秒 = 5分鐘充足時間
/usr/local/bin/kubectl wait --for=condition=complete --timeout=300s \
job/kaniko-build-${GITHUB_SHA:0:8} -n cloudforge || {
echo "⚠️ Build job timeout, checking status..."
/usr/local/bin/kubectl get job kaniko-build-${GITHUB_SHA:0:8} -n cloudforge
/usr/local/bin/kubectl logs job/kaniko-build-${GITHUB_SHA:0:8} -n cloudforge --tail=50
exit 1
}
- name: Verify Build Job Success
run: |
# 確保 job 成功完成
BUILD_STATUS=$(/usr/local/bin/kubectl get job kaniko-build-${GITHUB_SHA:0:8} -n cloudforge -o jsonpath='{.status.succeeded}')
if [ "$BUILD_STATUS" == "1" ]; then
echo "✅ Build completed successfully"
else
echo "❌ Build failed"
/usr/local/bin/kubectl logs job/kaniko-build-${GITHUB_SHA:0:8} -n cloudforge
exit 1
fi
- name: Deploy
run: |
echo "🚀 Deploying..."
/usr/local/bin/kubectl set image deployment/dashboard-backend \
backend=registry.kube-system.svc.cluster.local:5000/cloudforge-dashboard-backend:${GITHUB_SHA:0:8} \
-n cloudforge || \
/usr/local/bin/kubectl create deployment dashboard-backend \
--image=registry.kube-system.svc.cluster.local:5000/cloudforge-dashboard-backend:${GITHUB_SHA:0:8} \
-n cloudforge
/usr/local/bin/kubectl rollout restart deployment/dashboard-backend -n cloudforge
- name: Wait for deployment
run: |
/usr/local/bin/kubectl rollout status deployment/dashboard-backend \
-n cloudforge --timeout=300s
- name: Verify
run: |
echo "✅ Deployment completed"
/usr/local/bin/kubectl get pods -n cloudforge
/usr/local/bin/kubectl logs deployment/dashboard-backend -n cloudforge --tail=20
- name: Cleanup build job
if: always()
run: |
/usr/local/bin/kubectl delete job kaniko-build-${GITHUB_SHA:0:8} -n cloudforge || true