Files
FranciaOcupada/CI-CD-README.md
Resistencia Dev 273a228a1c
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 40s
feat: Configuración CI/CD con Gitea Actions
- 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
2025-12-13 14:26:38 +01:00

5.1 KiB

🚀 CI/CD con Gitea Actions - Francia Ocupada

📋 Configuración Actual

Runner Configurado

  • Nombre: runner-01-ci-vm
  • Etiqueta: production-ready:host
  • URL Gitea: http://gitea.local:3000
  • Estado: Corriendo sin problemas

Workflow Creado

  • Ubicación: .gitea/workflows/deployment.yml
  • Trigger: Push a main o master, o ejecución manual
  • Acciones: Build y deploy automático con Docker Compose

🔄 Flujo de Despliegue

El workflow ejecuta los siguientes pasos:

  1. 🚀 Checkout del Código: Descarga el código del repositorio
  2. ⚙️ Configurar Node.js: Instala Node.js 20 para las acciones
  3. 🛑 Detener Contenedores Anteriores: Para y elimina los contenedores existentes
  4. 🧹 Limpiar Imágenes Antiguas: Elimina imágenes Docker sin usar
  5. 🔨 Construir Imágenes Docker: Construye las imágenes con docker-compose_prod.yml
  6. 📦 Desplegar Aplicación: Levanta los contenedores en modo producción
  7. Verificar Despliegue: Comprueba que los contenedores están corriendo
  8. 📋 Mostrar Logs Recientes: Muestra logs para debugging

🧪 Cómo Hacer Pruebas de Despliegue

Opción 1: Push a la rama principal (Automático)

# Hacer algún cambio en el código
echo "# Test CI/CD" >> README.md

# Commit y push
git add .
git commit -m "test: Prueba de CI/CD automático"
git push origin main  # o master, según tu rama principal

Opción 2: Ejecución Manual desde Gitea

  1. Ve a tu repositorio en Gitea: http://gitea.local:3000/[tu-usuario]/resistencia
  2. Navega a la pestaña Actions
  3. Selecciona el workflow "CI/CD - Francia Ocupada (La Resistencia)"
  4. Haz clic en "Run workflow"
  5. Selecciona la rama y confirma

Opción 3: Forzar un push vacío (sin cambios)

# Esto dispara el workflow sin hacer cambios reales
git commit --allow-empty -m "test: Trigger CI/CD workflow"
git push origin main

📊 Monitorear el Despliegue

Desde Gitea Web UI

  1. Ve a Actions en tu repositorio
  2. Verás el workflow ejecutándose en tiempo real
  3. Haz clic en el workflow para ver los logs detallados de cada paso

Desde el Servidor (SSH)

# Ver estado de los contenedores
docker compose -f docker-compose_prod.yml ps

# Ver logs en tiempo real
docker compose -f docker-compose_prod.yml logs -f

# Ver logs de un servicio específico
docker compose -f docker-compose_prod.yml logs -f client
docker compose -f docker-compose_prod.yml logs -f server
docker compose -f docker-compose_prod.yml logs -f db

# Ver imágenes Docker
docker images | grep resistencia

🔧 Solución de Problemas

El workflow falla en el checkout

Problema: Error de autenticación con Gitea

Solución:

  • Verifica que el token de registro del runner sea correcto
  • Asegúrate de que el runner tenga acceso al repositorio

El workflow falla en la construcción

Problema: Error al construir las imágenes Docker

Solución:

# En el servidor, construir manualmente para ver el error
cd /ruta/al/proyecto
docker compose -f docker-compose_prod.yml build --no-cache

Los contenedores no inician

Problema: Los contenedores se detienen inmediatamente

Solución:

# Ver logs de error
docker compose -f docker-compose_prod.yml logs

# Verificar configuración
docker compose -f docker-compose_prod.yml config

Puerto ya en uso

Problema: Los puertos 3000, 4000 o 5432 están ocupados

Solución:

# Ver qué está usando los puertos
sudo lsof -i :3000
sudo lsof -i :4000
sudo lsof -i :5432

# Detener contenedores anteriores
docker compose -f docker-compose_prod.yml down

🎯 Verificación Post-Despliegue

Después de un despliegue exitoso, verifica:

  1. Frontend accesible: https://franciaocupada.martivich.es

  2. API accesible: https://api.franciaocupada.martivich.es

  3. Contenedores corriendo:

    docker compose -f docker-compose_prod.yml ps
    

    Deberías ver 3 contenedores: client, server, db

  4. Logs sin errores:

    docker compose -f docker-compose_prod.yml logs --tail=100
    

📝 Notas Importantes

  • Rama principal: El workflow se activa en push a main o master
  • Etiqueta del runner: Debe ser production-ready (configurada en tu runner)
  • Docker Compose: Usa docker-compose_prod.yml para producción
  • Variables de entorno: Configuradas en docker-compose_prod.yml:
    • NEXT_PUBLIC_API_URL=https://api.franciaocupada.martivich.es
    • CORS_ORIGIN=https://franciaocupada.martivich.es

🔐 Seguridad

  • El workflow usa el token de Gitea automáticamente (${{ gitea.token }})
  • No es necesario configurar secrets adicionales para este workflow básico
  • Si necesitas secrets (API keys, passwords), agrégalos en:
    • Gitea → Repositorio → Settings → Secrets

🚀 Próximos Pasos Recomendados

  1. Pruebas automatizadas: Agregar tests antes del deploy
  2. Notificaciones: Configurar notificaciones de éxito/fallo
  3. Rollback automático: Implementar rollback si el deploy falla
  4. Health checks: Verificar que la app responde correctamente
  5. Backup de DB: Hacer backup antes de cada deploy