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:
167
CI-CD-README.md
Normal file
167
CI-CD-README.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# 🚀 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
|
||||
Reference in New Issue
Block a user