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
168 lines
5.1 KiB
Markdown
168 lines
5.1 KiB
Markdown
# 🚀 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)
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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**:
|
|
```bash
|
|
# 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**:
|
|
```bash
|
|
# 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**:
|
|
```bash
|
|
# 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**:
|
|
```bash
|
|
docker compose -f docker-compose_prod.yml ps
|
|
```
|
|
Deberías ver 3 contenedores: `client`, `server`, `db`
|
|
|
|
4. **Logs sin errores**:
|
|
```bash
|
|
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
|