Afegit botó per ocultar/mostrar els jugadors
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 7s
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 7s
This commit is contained in:
255
SESION-CICD-RESUMEN.md
Normal file
255
SESION-CICD-RESUMEN.md
Normal file
@@ -0,0 +1,255 @@
|
||||
# 📚 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
|
||||
Reference in New Issue
Block a user