Files
FranciaOcupada/SESION-CICD-RESUMEN.md
Resistencia Dev fc6bc1ab54
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 7s
Afegit botó per ocultar/mostrar els jugadors
2025-12-14 22:06:47 +01:00

256 lines
7.6 KiB
Markdown

# 📚 Resumen de la Sesión CI/CD - Puntos de Aprendizaje
## 🎯 Lo que Intentamos Lograr
Configurar CI/CD automático para desplegar "Francia Ocupada" en producción usando Gitea Actions.
## 🔍 Problemas Encontrados
### 1. **Runner Personalizado vs Runner Estándar**
**Tu configuración**:
```yaml
runs-on: [production-ready] # Runner personalizado
```
**Ejemplo que funciona**:
```yaml
runs-on: ubuntu-latest # Runner estándar de GitHub/Gitea
```
**Diferencia clave**:
- `ubuntu-latest` tiene TODAS las herramientas preinstaladas (docker, node, git, etc.)
- Tu runner personalizado es un contenedor vacío que solo tiene acceso al socket de Docker
### 2. **Socket de Docker ≠ Docker CLI**
Tu runner tiene:
- ✅ Acceso al socket de Docker (`/var/run/docker.sock`)
- ❌ NO tiene el binario `docker` instalado
Por eso todos los comandos `docker` fallan con "command not found".
### 3. **Comandos dentro del Runner vs Comandos en el Host**
El runner ejecuta comandos **dentro de su contenedor**, no directamente en el host.
```
┌─────────────────────────────────┐
│ HOST (Servidor) │
│ - Docker instalado ✅ │
│ - Proyecto en /home/marti/... │
│ │
│ ┌───────────────────────────┐ │
│ │ RUNNER (Contenedor) │ │
│ │ - Docker NO instalado ❌ │ │
│ │ - Comandos se ejecutan │ │
│ │ AQUÍ, no en el host │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘
```
## 📋 Soluciones Intentadas
### Intento 1: Usar variables de contexto de Gitea ❌
- No funcionó: Variables mal interpoladas
### Intento 2: Reordenar pasos (Node.js antes de checkout) ❌
- No funcionó: Seguía faltando Node.js
### Intento 3: Instalar Node.js manualmente ✅
- Funcionó: Node.js instalado correctamente
### Intento 4: Especificar `shell: bash` ❌
- No funcionó: Docker seguía sin encontrarse
### Intento 5: Instalar Docker CLI en el runner ❌
- No intentado: Demasiado complejo
### Intento 6: Script de deployment en el host ⚠️
- Parcialmente: Script creado pero falta ejecutarlo correctamente
### Intento 7: Eliminar copia con rsync ⏸️
- En progreso: Simplificado pero no probado
## 🎓 Conceptos Clave Aprendidos
### 1. **Etiquetas de Runner**
```yaml
GITEA_RUNNER_LABELS=production-ready:host
```
- `production-ready`: Nombre de la etiqueta
- `:host`: Indica que debe ejecutar en modo "host" (acceso al Docker del host)
### 2. **Volúmenes de Docker**
```yaml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
```
Esto da acceso al **socket** de Docker, pero NO instala el **cliente** de Docker.
### 3. **Diferencia entre CI y CD**
- **CI (Continuous Integration)**: Construir, probar, validar código
- **CD (Continuous Deployment)**: Desplegar a producción
Tu runner está configurado para CD (deployment), no para CI (build).
## 🛠️ Opciones para Continuar
### Opción 1: Usar un Runner Estándar (Más Fácil) ⭐
**Ventajas**:
- Todo preinstalado
- Funciona como el ejemplo que compartiste
- Menos configuración
**Desventajas**:
- Necesitas configurar acceso SSH al servidor de producción
- El deployment se hace remotamente
**Cómo hacerlo**:
```yaml
jobs:
deploy:
runs-on: ubuntu-latest # ← Cambiar a esto
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
run: |
ssh user@servidor 'cd /path/to/project && ./deploy.sh'
```
### Opción 2: Configurar el Runner con Docker Preinstalado (Medio)
Crear una imagen personalizada del runner con Docker ya instalado.
**Dockerfile del runner**:
```dockerfile
FROM gitea/act_runner:latest
RUN apt-get update && apt-get install -y docker-ce-cli
```
### Opción 3: Deployment Manual con Git Hooks (Más Simple) ⭐⭐
Usar Git hooks en el servidor para auto-desplegar cuando haces push.
**En el servidor**:
```bash
# .git/hooks/post-receive
#!/bin/bash
cd /home/marti/Documentos/Gitea/resistencia
git pull
./deploy.sh
```
### Opción 4: Usar Portainer o Watchtower (Automático)
Herramientas que detectan cambios en imágenes Docker y auto-actualizan.
### Opción 5: Continuar con el Enfoque Actual (Más Complejo)
Necesitarías:
1. Entender mejor cómo el runner accede al filesystem del host
2. Configurar permisos correctos
3. Posiblemente usar SSH desde el runner al host
## 📚 Recursos para Estudiar
### Gitea Actions
- [Documentación oficial de Gitea Actions](https://docs.gitea.com/usage/actions/overview)
- [Act Runner GitHub](https://github.com/nektos/act)
- [Diferencias entre GitHub Actions y Gitea Actions](https://docs.gitea.com/usage/actions/comparison)
### Docker en CI/CD
- [Docker-in-Docker (DinD)](https://www.docker.com/blog/docker-can-now-run-within-docker/)
- [Docker socket mounting](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option)
### Alternativas
- [Drone CI](https://www.drone.io/) - CI/CD más simple
- [Jenkins](https://www.jenkins.io/) - Más potente pero complejo
- [GitLab CI/CD](https://docs.gitlab.com/ee/ci/) - Similar a Gitea Actions
## 💡 Mi Recomendación
Para tu caso específico, te recomendaría **Opción 1 o Opción 3**:
### Opción 1: Runner Estándar + SSH
```yaml
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Production
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/marti/Documentos/Gitea/resistencia
git pull
./deploy.sh
```
### Opción 3: Git Hook (Sin CI/CD)
```bash
# En el servidor, en el repositorio bare de Gitea
# /path/to/gitea/data/gitea-repositories/marti/FranciaOcupada.git/hooks/post-receive
#!/bin/bash
cd /home/marti/Documentos/Gitea/resistencia
git pull origin main
./deploy.sh
```
## 📝 Estado Actual del Proyecto
### ✅ Lo que SÍ funciona:
- Script `deploy.sh` - Listo para usar
- Docker Compose configurado
- Aplicación funcional en local
### ⚠️ Lo que NO funciona:
- Workflow de Gitea Actions con runner personalizado
- Ejecución automática de deployment
### 🎯 Lo que tienes listo para usar:
```bash
# Deployment manual (esto SÍ funciona)
cd /home/marti/Documentos/Gitea/resistencia
./deploy.sh
```
## 🚀 Próximos Pasos Sugeridos
1. **Estudiar** los recursos mencionados arriba
2. **Decidir** qué opción se adapta mejor a tus necesidades
3. **Probar** el deployment manual mientras tanto: `./deploy.sh`
4. **Considerar** si realmente necesitas CI/CD automático o si el deployment manual es suficiente
## 📦 Archivos Útiles Creados
Aunque el CI/CD automático no funcionó, estos archivos son útiles:
-`deploy.sh` - Script de deployment manual (funciona)
-`monitor-deploy.sh` - Monitoreo de contenedores
-`useful-commands.sh` - Comandos de referencia
- ✅ Documentación completa del proceso
## 💭 Reflexión Final
CI/CD con runners personalizados es complejo. No es un fallo tuyo no haberlo logrado en la primera sesión. Muchos equipos profesionales tardan días o semanas en configurar correctamente su CI/CD.
**Alternativa práctica**: Mientras estudias más sobre el tema, puedes usar deployment manual con `./deploy.sh`, que es perfectamente válido para proyectos pequeños/medianos.
---
**Fecha**: 2025-12-13
**Estado**: En pausa para estudio
**Próximo paso**: Decidir entre las opciones propuestas arriba