Concepto clave
El despliegue automatizado a entornos cloud es como tener un piloto automático para tu aplicación. Imagina que cada vez que terminas de construir un coche (tu código), un sistema inteligente lo prueba, lo llena de gasolina y lo conduce directamente al concesionario (el entorno de producción) sin que tú tengas que tocar el volante. GitHub Actions actú como ese sistema, ejecutando workflows que empaquetan tu aplicación, la despliegan en servicios cloud como AWS, Azure o Google Cloud, y verifican que todo funcione correctamente.
En el contexto de CI/CD, esto significa que cada cambio en tu repositorio puede desencadenar un pipeline que va desde la compilación y pruebas hasta el despliegue en un entorno real. La clave está en la integración continua (CI), que asegura que el código nuevo no rompa lo existente, y la entrega continua (CD), que automatiza la liberación a entornos específicos. Para un DevOps Engineer, dominar esto reduce errores humanos, acelera el time-to-market y permite enfoques como blue-green deployments o canary releases.
Cómo funciona en la práctica
Vamos a desglosar el proceso paso a paso para desplegar una app simple, como una página web estática, a AWS S3 usando GitHub Actions. Primero, necesitas una aplicación básica—por ejemplo, un sitio HTML con un archivo index.html. Luego, configuras un bucket en S3 para alojarlo. En GitHub, creas un workflow en .github/workflows/deploy.yml que se active en eventos como un push a la rama main.
El workflow típico incluye: 1) Checkout del código, 2) Configuración del entorno (ej. Node.js si necesitas build tools), 3) Construcción de la app (si aplica), 4) Despliegue a S3 usando acciones oficiales de AWS o comandos CLI. Asegúrate de almacenar credenciales de AWS como secrets en GitHub para seguridad. Finalmente, el workflow puede notificar el éxito o fallo, y tu app estará accesible vía URL pública.
Código en acción
Aquí tienes un ejemplo funcional de un workflow de GitHub Actions para desplegar una app estática a AWS S3. Este código es copiable y ejecutable si tienes un repositorio con los archivos necesarios.
name: Deploy to AWS S3
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Deploy to S3
run: |
aws s3 sync ./ s3://my-app-bucket --deleteAntes de refactorizar, podrías tener un script manual; después, con este workflow, el despliegue se automatiza. Para mejorarlo, añade un paso de build si tu app requiere compilación, como este ejemplo con una app React:
- name: Build React app
run: |
npm ci
npm run build
- name: Deploy to S3
run: |
aws s3 sync ./build s3://my-app-bucket --deleteErrores comunes
- Credenciales expuestas en el código: Nunca hardcodees access keys en el YAML. Usa GitHub Secrets y refiérelas con
${{ secrets.NOMBRE }}. - Falta de validación pre-despliegue: Desplegar sin pruebas puede llevar a bugs en producción. Asegúrate de incluir steps de test en el workflow antes del deploy.
- Configuración incorrecta de permisos S3: Si el bucket no tiene políticas públicas de lectura, la app no será accesible. Verifica los permisos en la consola de AWS.
- Ignorar el manejo de errores: Si el workflow falla, podrías no enterarte. Agrega notificaciones (ej. con Slack o email) para monitoreo.
- No usar entornos separados: Desplegar directamente a producción es riesgoso. Configura entornos de staging y producción con ramas diferentes o variables.
Checklist de dominio
- Configurar un bucket S3 con políticas públicas adecuadas para hosting estático.
- Crear secrets en GitHub para almacenar credenciales de AWS de forma segura.
- Escribir un workflow YAML que incluya checkout, configuración de AWS, y comando de despliegue.
- Probar el workflow con un push a una rama y verificar que la app se despliegue correctamente.
- Agregar steps de build y test antes del despliegue para asegurar calidad.
- Configurar notificaciones para éxitos o fallos del despliegue.
- Refactorizar el workflow para usar entornos múltiples (ej. staging vs producción).
Despliega una app web estática a AWS S3 usando GitHub Actions
Sigue estos pasos para automatizar el despliegue de una aplicación simple a la nube:
- Prepara tu aplicación: Crea un repositorio en GitHub con una app web estática. Por ejemplo, añade un archivo
index.htmlcon contenido básico como<h1>Hola Mundo</h1>. - Configura AWS S3: En la consola de AWS, crea un bucket S3 llamado
mi-app-despliegue(usa un nombre único). Habilita hosting estático y configura las políticas de bucket para permitir acceso público de lectura. - Configura secrets en GitHub: En tu repositorio, ve a Settings > Secrets and variables > Actions. Crea dos secrets:
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEYcon tus credenciales de IAM (asegúrate de que el usuario IAM tenga permisos para S3). - Crea el workflow: En tu repositorio, crea un archivo en
.github/workflows/deploy.yml. Copia el código YAML del ejemplo en "Código en acción", ajustando el nombre del bucket ami-app-desplieguey la región si es necesario. - Ejecuta el despliegue: Haz un push a la rama main. Ve a la pestaña Actions en GitHub para ver el workflow en ejecución. Si es exitoso, visita la URL de tu bucket (ej.
http://mi-app-despliegue.s3-website-us-east-1.amazonaws.com) para ver tu app desplegada. - Verifica y mejora: Asegúrate de que la app se muestre correctamente. Luego, modifica el
index.htmly haz otro push para ver cómo se actualiza automáticamente.
- Si el workflow falla, revisa los logs en GitHub Actions para ver errores específicos, como problemas de credenciales o permisos S3.
- Asegúrate de que el bucket S3 tenga la política de bucket correcta; puedes usar la herramienta de política de S3 en la consola de AWS para generarla automáticamente.
- Para debugging, añade un step en el workflow con
run: aws s3 lspara listar buckets y verificar que las credenciales funcionan.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.