7.6 KiB
📚 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:
runs-on: [production-ready] # Runner personalizado
Ejemplo que funciona:
runs-on: ubuntu-latest # Runner estándar de GitHub/Gitea
Diferencia clave:
ubuntu-latesttiene 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
dockerinstalado
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
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
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:
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:
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:
# .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:
- Entender mejor cómo el runner accede al filesystem del host
- Configurar permisos correctos
- Posiblemente usar SSH desde el runner al host
📚 Recursos para Estudiar
Gitea Actions
- Documentación oficial de Gitea Actions
- Act Runner GitHub
- Diferencias entre GitHub Actions y Gitea Actions
Docker en CI/CD
Alternativas
- Drone CI - CI/CD más simple
- Jenkins - Más potente pero complejo
- GitLab CI/CD - 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
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)
# 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:
# Deployment manual (esto SÍ funciona)
cd /home/marti/Documentos/Gitea/resistencia
./deploy.sh
🚀 Próximos Pasos Sugeridos
- Estudiar los recursos mencionados arriba
- Decidir qué opción se adapta mejor a tus necesidades
- Probar el deployment manual mientras tanto:
./deploy.sh - 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