name: Build and Deploy Backend on: push: branches: - main jobs: # Job 1: Build Image build: runs-on: ubuntu-latest timeout-minutes: 30 # 30分鐘 timeout 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 - < ~/.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: Update Deployment run: | /usr/local/bin/kubectl set image deployment/dashboard-backend \ backend=cloudforge-dashboard-backend:${GITHUB_SHA:0:8} \ -n cloudforge \ --record - name: Wait for Rollout (10 min) run: | /usr/local/bin/kubectl rollout status deployment/dashboard-backend \ -n cloudforge \ --timeout=600s # Job 3: Verify & Cleanup verify: runs-on: ubuntu-latest needs: deploy # 等 deploy job 完成 timeout-minutes: 10 steps: - 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: Verify Pods Running run: | /usr/local/bin/kubectl get pods -n cloudforge /usr/local/bin/kubectl get deployment dashboard-backend -n cloudforge - name: Cleanup Build Job run: | /usr/local/bin/kubectl delete job build-backend-${GITHUB_SHA:0:8} -n cloudforge || true - name: Show Logs run: | /usr/local/bin/kubectl logs deployment/dashboard-backend -n cloudforge --tail=50