Domina GitHub Actions para acelerar tu CI/CD con Docker y contenedores Alpine. Con un enfoque flexible y creativo, podrás automatizar pruebas y despliegues sin fricciones, segmentar por carpetas o archivos, y orquestar cada workflow como lo necesitas, todo con control total.
¿Cómo usar GitHub Actions para CI/CD con Docker?
La clave está en la libertad para diseñar el flujo: puedes encadenar múltiples pasos, desde checkout, build, run y tests, hasta el despliegue automatizado. La organización por carpetas, archivos y ramas te permite escalar y mantener orden sin límites técnicos, solo de diseño del workflow.
¿Qué rol juegan el workflow, la rama y la indentación en YAML?
- Se crea un workflow nuevo “testing” y se configura para que se dispare sobre la rama main.
- La indentación en YAML es crítica: un espacio extra rompe la ejecución. Basta un error mínimo para fallar todo el archivo.
- Elegir empezar “desde cero” evita corregir plantillas y te da control sobre cada línea.
¿Qué jobs y runners se configuran?
- Un job llamado “docker test” corre en un runner de Ubuntu.
- Pasos base: checkout del repositorio, preparación para ejecutar comandos de Docker, construcción y ejecución del contenedor, y luego pruebas dentro del contenedor.
¿Qué pasos ejecutan pruebas en un contenedor Alpine?
Se ejecuta un contenedor Alpine y se mantiene vivo para poder correr docker exec. Las pruebas dentro del contenedor usan Shell (no Bash), porque Alpine no incluye Bash por defecto. Se ejecuta un script que muestra actividad en terminal, crea un archivo (por ejemplo, ejemplo.txt) y verifica su existencia.
yname: testing
on:
push:
branches: [main]
jobs:
docker-test:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: build image
run: docker build -t mi-imagen:latest .
- name: run alpine container
run: docker run -d --name alpine-test alpine sh -c "while true; do sleep 60; done"
- name: run tests inside container (shell)
run: |
docker exec alpine-test sh -lc "printf 'contenido de prueba\n' > ejemplo.txt && ls -la"
# ejecutar un contenedor Alpine y mantenerlo activo
docker run -d --name alpine-test alpine sh -c "while true; do sleep 60; done"
# correr pruebas con Shell dentro del contenedor
docker exec alpine-test sh -lc "printf 'contenido de prueba\n' > ejemplo.txt && ls -la"
- Se observan logs claros: construcción/descarga de la imagen, creación del contenedor, ejecución de pruebas y archivos generados visibles en la salida.
- Si todo pasa, tienes señal para continuar con el despliegue de la imagen a la nube.
¿Cómo mantener el contenedor activo para probar?
- Usa un comando que “espere eventos” para persistir el proceso y evitar que el contenedor se apague al instante.
- Así puedes encadenar múltiples comandos con docker exec sin relanzar el contenedor.
¿Qué validar para aprobar y desplegar?
- Que la imagen se haya construido o descargado y el contenedor se ejecute.
- Que los comandos dentro del contenedor (crear directorios, moverse de carpeta, generar archivos con printf) produzcan la salida esperada.
- Que las pruebas automatizadas se adapten al tipo de contenedor: por ejemplo, una API con curl o un script con validaciones de salida.
¿Qué errores comunes y buenas prácticas considerar?
Evita fallas por detalles y gana velocidad en tu pipeline con estos puntos.
- Cuidado extremo con la indentación YAML: un espacio extra detiene todo.
- Usa Shell en Alpine: no assumes Bash.
- Observa y expande los logs por paso: build, run y pruebas.
- Diseña workflows por carpetas, archivos y ramas para aislar responsabilidades.
- Prefiere flujos “desde cero” si necesitas control fino sobre la automatización.
- Integra pruebas antes del despliegue: confirma comportamiento real en contenedor.
¿Quieres que revisemos tu YAML o los comandos de prueba en tu contenedor Alpine? Cuéntame tu caso en los comentarios y lo optimizamos juntos.