99env :
1010 REGISTRY : crretoxmas2024.azurecr.io
1111 NAMESPACE : reto-xmas-2025-goland-ia-backend
12+ ROLLOUT_TIMEOUT : 60s
13+ READY_CHECK_RETRIES : 20
14+ READY_CHECK_SLEEP : 15
1215
1316jobs :
1417 build-and-deploy :
1518 runs-on : ubuntu-latest
19+ timeout-minutes : 15
1620 strategy :
1721 fail-fast : false
1822 matrix :
2529 path : ./RAGManager
2630 image : reto-xmas-2025-goland-ia-backend-rag-manager
2731 deployment : rag-manager
28-
32+
2933 steps :
3034 - name : Checkout code
3135 uses : actions/checkout@v4
5155 ${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }}
5256 cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ matrix.service.image }}:buildcache
5357 cache-to : type=registry,ref=${{ env.REGISTRY }}/${{ matrix.service.image }}:buildcache,mode=max
58+ provenance : false
5459
5560 - name : Set up kubectl
5661 uses : azure/setup-kubectl@v3
@@ -63,28 +68,78 @@ jobs:
6368 echo "${{ secrets.KUBECONFIG }}" | base64 -d > $HOME/.kube/config
6469 chmod 600 $HOME/.kube/config
6570
66- - name : Restart deployment
71+ - name : Update deployment image
6772 run : |
68- kubectl rollout restart deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }}
69- kubectl rollout status deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }} --timeout=5m
73+ kubectl set image deployment/${{ matrix.service.deployment }} \
74+ api=${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }} \
75+ -n ${{ env.NAMESPACE }}
7076
71- - name : Verify deployment
77+ - name : Wait for deployment to be ready (robust)
7278 run : |
73- echo "✅ Deployment successful for ${{ matrix.service.name }}"
74- kubectl get pods -n ${{ env.NAMESPACE }} -l app=${{ matrix.service.deployment }}
79+ set -e
80+
81+ echo "Checking rollout status (non-blocking)..."
82+ kubectl rollout status deployment/${{ matrix.service.deployment }} \
83+ -n ${{ env.NAMESPACE }} \
84+ --timeout=${{ env.ROLLOUT_TIMEOUT }} || true
85+
86+ echo "Waiting for available replicas..."
87+
88+ for i in $(seq 1 $READY_CHECK_RETRIES); do
89+ DESIRED=$(kubectl get deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }} -o jsonpath='{.spec.replicas}')
90+ AVAILABLE=$(kubectl get deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }} -o jsonpath='{.status.availableReplicas}')
91+
92+ echo "Attempt $i: $AVAILABLE / $DESIRED replicas available"
93+
94+ if [ "$AVAILABLE" = "$DESIRED" ]; then
95+ echo "Deployment is ready"
96+ exit 0
97+ fi
98+
99+ sleep $READY_CHECK_SLEEP
100+ done
101+
102+ echo "Deployment did not become ready in time"
103+ kubectl describe deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }}
104+ exit 1
105+
106+ - name : Verify pods
107+ if : success()
108+ run : |
109+ kubectl get pods -n ${{ env.NAMESPACE }} -l app=${{ matrix.service.deployment }} -o wide
110+
111+ - name : Get logs on failure
112+ if : failure()
113+ run : |
114+ echo "=== Deployment ==="
115+ kubectl describe deployment/${{ matrix.service.deployment }} -n ${{ env.NAMESPACE }}
116+
117+ echo "=== Pods ==="
118+ kubectl get pods -n ${{ env.NAMESPACE }} -l app=${{ matrix.service.deployment }} -o wide
119+
120+ echo "=== Pod Logs ==="
121+ kubectl logs -n ${{ env.NAMESPACE }} \
122+ -l app=${{ matrix.service.deployment }} \
123+ --tail=100 \
124+ --all-containers=true \
125+ --prefix=true || true
75126
76127 - name : Deployment Summary
77128 if : always()
78129 run : |
79- echo "### 🚀 Deployment Summary" >> $GITHUB_STEP_SUMMARY
130+ STATUS="${{ job.status }}"
131+
132+ echo "### Deployment - ${{ matrix.service.name }}" >> $GITHUB_STEP_SUMMARY
80133 echo "" >> $GITHUB_STEP_SUMMARY
81- echo "**Service:** ${{ matrix.service.name }}" >> $GITHUB_STEP_SUMMARY
82- echo "**Image:** ${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
83- echo "**Status:** ${{ job.status }}" >> $GITHUB_STEP_SUMMARY
134+ echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
135+ echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
136+ echo "| Image | \`${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }}\` |" >> $GITHUB_STEP_SUMMARY
137+ echo "| Status | $STATUS |" >> $GITHUB_STEP_SUMMARY
84138 echo "" >> $GITHUB_STEP_SUMMARY
139+
85140 echo "#### Pods:" >> $GITHUB_STEP_SUMMARY
86141 echo '```' >> $GITHUB_STEP_SUMMARY
87- kubectl get pods -n ${{ env.NAMESPACE }} -l app=${{ matrix.service.deployment }} >> $GITHUB_STEP_SUMMARY
142+ kubectl get pods -n ${{ env.NAMESPACE }} -l app=${{ matrix.service.deployment }} >> $GITHUB_STEP_SUMMARY || true
88143 echo '```' >> $GITHUB_STEP_SUMMARY
89144
90145 notify-success :
@@ -95,8 +150,34 @@ jobs:
95150 steps :
96151 - name : Success Summary
97152 run : |
98- echo "### ✅ Deployment Successful! " >> $GITHUB_STEP_SUMMARY
153+ echo "### All Services Deployed " >> $GITHUB_STEP_SUMMARY
99154 echo "" >> $GITHUB_STEP_SUMMARY
100- echo "All services deployed successfully:" >> $GITHUB_STEP_SUMMARY
101- echo "- 🌐 DocsManager: https://goland-ia-backend-docs-manager.reto-ucu.net" >> $GITHUB_STEP_SUMMARY
102- echo "- 🌐 RAGManager: https://goland-ia-backend-rag-manager.reto-ucu.net" >> $GITHUB_STEP_SUMMARY
155+ echo "**Live URLs:**" >> $GITHUB_STEP_SUMMARY
156+ echo "- [DocsManager](https://goland-ia-backend-docs-manager.reto-ucu.net/docs)" >> $GITHUB_STEP_SUMMARY
157+ echo "- [RAGManager](https://goland-ia-backend-rag-manager.reto-ucu.net/docs)" >> $GITHUB_STEP_SUMMARY
158+
159+ - name : Notificar a Discord (deploy exitoso)
160+ run : |
161+ curl -H "Content-Type: application/json" \
162+ -X POST \
163+ -d "{\"content\": \"✅ **Deploy exitoso**\\n\\n**Servicio:** \\\\`${{ matrix.service.name }}\\\\`\\n**Imagen:** \\\\`${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }}\\\\`\\n**Namespace:** \\\\`${{ env.NAMESPACE }}\\\\`\\n**Autor:** ${{ github.actor }}\\n**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})\\n\\n[Ver ejecución en GitHub Actions](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})\\n\\n:rocket: ¡Todo salió bien!\"}" \
164+ https://discord.com/api/webhooks/1449147972330852463/sMs3QYOvQ6oiaPHR4PlBluwNrhWSsVmfm3_Miz6UAFrPxj1SsbqNnHXc5eK9h8ZSaumk
165+
166+ notify-failure :
167+ name : Deployment Failed
168+ runs-on : ubuntu-latest
169+ needs : [build-and-deploy]
170+ if : failure()
171+ steps :
172+ - name : Failure Summary
173+ run : |
174+ echo "### Deployment Failed" >> $GITHUB_STEP_SUMMARY
175+ echo "" >> $GITHUB_STEP_SUMMARY
176+ echo "Please check deployment logs above." >> $GITHUB_STEP_SUMMARY
177+
178+ - name : Notificar a Discord (deploy fallido)
179+ run : |
180+ curl -H "Content-Type: application/json" \
181+ -X POST \
182+ -d "{\"content\": \"❌ **Falló el deploy**\\n\\n**Servicio:** \\\\`${{ matrix.service.name }}\\\\`\\n**Imagen:** \\\\`${{ env.REGISTRY }}/${{ matrix.service.image }}:${{ github.sha }}\\\\`\\n**Namespace:** \\\\`${{ env.NAMESPACE }}\\\\`\\n**Autor:** ${{ github.actor }}\\n**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})\\n\\n[Ver ejecución en GitHub Actions](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})\\n\\n:warning: Revisa los logs para más detalles.\"}" \
183+ https://discord.com/api/webhooks/1449147972330852463/sMs3QYOvQ6oiaPHR4PlBluwNrhWSsVmfm3_Miz6UAFrPxj1SsbqNnHXc5eK9h8ZSaumk
0 commit comments