feat: Configuración CI/CD con Gitea Actions
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 40s
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 40s
- Agregado workflow de deployment automático (.gitea/workflows/deployment.yml) - Workflow configurado para runner 'production-ready' - Build y deploy automático con docker-compose_prod.yml - Verificación de estado post-despliegue - Documentación completa en CI-CD-README.md
This commit is contained in:
111
.gitea/workflows/deployment.yml
Normal file
111
.gitea/workflows/deployment.yml
Normal file
@@ -0,0 +1,111 @@
|
||||
name: CI/CD - Francia Ocupada (La Resistencia)
|
||||
run-name: Build & Deploy por ${{ gitea.actor }}
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
# Otorga permiso de lectura al token del workflow (necesario para el checkout)
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
# Usamos la etiqueta que configuramos en el runner (production-ready:host)
|
||||
runs-on: [production-ready]
|
||||
|
||||
steps:
|
||||
# PASO 1: Checkout del Código
|
||||
- name: 🚀 Checkout del Código
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
server-url: ${{ gitea.server_url }}
|
||||
repository: ${{ gitea.repository }}
|
||||
token: ${{ gitea.token }}
|
||||
fetch-depth: 0
|
||||
|
||||
# PASO 2: Configurar Node.js (necesario para ejecutar las acciones de checkout/setup)
|
||||
- name: ⚙️ Configurar Node.js (Necesario para las acciones)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
# PASO 3: Detener y eliminar contenedores anteriores
|
||||
- name: 🛑 Detener Contenedores Anteriores
|
||||
run: |
|
||||
echo "Deteniendo contenedores existentes..."
|
||||
docker compose -f docker-compose_prod.yml down || true
|
||||
|
||||
# Limpieza de contenedores huérfanos
|
||||
docker container prune -f || true
|
||||
|
||||
echo "Contenedores anteriores detenidos y eliminados"
|
||||
|
||||
# PASO 4: Limpiar imágenes antiguas (opcional pero recomendado)
|
||||
- name: 🧹 Limpiar Imágenes Antiguas
|
||||
run: |
|
||||
echo "Limpiando imágenes sin usar..."
|
||||
docker image prune -f || true
|
||||
echo "Limpieza completada"
|
||||
|
||||
# PASO 5: Construir las imágenes Docker
|
||||
- name: 🔨 Construir Imágenes Docker
|
||||
run: |
|
||||
echo "Construyendo imágenes con docker-compose_prod.yml..."
|
||||
docker compose -f docker-compose_prod.yml build --no-cache
|
||||
|
||||
# Etiquetar con el SHA del commit para trazabilidad
|
||||
TAG_VERSION="${{ gitea.sha }}"
|
||||
|
||||
docker tag resistencia-client:latest resistencia-client:${TAG_VERSION}
|
||||
docker tag resistencia-server:latest resistencia-server:${TAG_VERSION}
|
||||
|
||||
echo "✅ Imágenes construidas:"
|
||||
echo " - resistencia-client:latest (${TAG_VERSION})"
|
||||
echo " - resistencia-server:latest (${TAG_VERSION})"
|
||||
|
||||
# PASO 6: Desplegar los contenedores
|
||||
- name: 📦 Desplegar Aplicación
|
||||
run: |
|
||||
echo "Desplegando aplicación con docker-compose_prod.yml..."
|
||||
docker compose -f docker-compose_prod.yml up -d
|
||||
|
||||
echo "✅ Aplicación desplegada exitosamente"
|
||||
echo ""
|
||||
echo "📊 Estado de los contenedores:"
|
||||
docker compose -f docker-compose_prod.yml ps
|
||||
|
||||
# PASO 7: Verificar que los contenedores están corriendo
|
||||
- name: ✅ Verificar Despliegue
|
||||
run: |
|
||||
echo "Esperando 10 segundos para que los contenedores inicien..."
|
||||
sleep 10
|
||||
|
||||
echo "Verificando estado de los contenedores..."
|
||||
docker compose -f docker-compose_prod.yml ps
|
||||
|
||||
# Verificar que los contenedores están corriendo
|
||||
if [ $(docker compose -f docker-compose_prod.yml ps -q | wc -l) -eq 0 ]; then
|
||||
echo "❌ ERROR: No hay contenedores corriendo"
|
||||
docker compose -f docker-compose_prod.yml logs
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Verificación completada"
|
||||
echo ""
|
||||
echo "🌐 Aplicación disponible en:"
|
||||
echo " - Frontend: https://franciaocupada.martivich.es"
|
||||
echo " - API: https://api.franciaocupada.martivich.es"
|
||||
|
||||
# PASO 8: Mostrar logs recientes (útil para debugging)
|
||||
- name: 📋 Mostrar Logs Recientes
|
||||
if: always()
|
||||
run: |
|
||||
echo "Logs del cliente (últimas 50 líneas):"
|
||||
docker compose -f docker-compose_prod.yml logs --tail=50 client || true
|
||||
echo ""
|
||||
echo "Logs del servidor (últimas 50 líneas):"
|
||||
docker compose -f docker-compose_prod.yml logs --tail=50 server || true
|
||||
Reference in New Issue
Block a user