Integración CI/CD con GitHub Actions
En el contexto del desarrollo ágil y la entrega continua, contar con una plataforma de Integración Continua (CI) y Entrega Continua/Despliegue Continuo (CD) es esencial. GitHub Actions se ha consolidado como una herramienta robusta que permite automatizar tu pipeline de software directamente desde tu repositorio. En este artículo exploraremos a fondo:
- Conceptos y ventajas de CI/CD
- Fundamentos de GitHub Actions
- Configuración de workflows
- Secretos y entornos seguros
- Estrategias avanzadas: matrices, caché, reutilización
- Buenas prácticas de seguridad y monitoreo
1. ¿Por qué CI/CD
La adopción de pipelines de CI/CD ofrece beneficios claves:
- Detección temprana de errores: Ejecución automática de tests en cada commit.
- Despliegues fiables: Entrega de artefactos reproducibles.
- Feedback continuo: Reportes inmediatos a desarrolladores.
- Escalabilidad: Procesamiento paralelo de jobs y matrices de configuración.
2. Fundamentos de GitHub Actions
Un flujo de trabajo (workflow) en GitHub Actions se define mediante un fichero YAML en .github/workflows/ci-cd.yml. Sus elementos principales son:
| Elemento | Descripción |
|---|---|
| name | Nombre del workflow. |
| on | Eventos que disparan el workflow (push, pull_request, schedule…). |
| jobs | Conjunto de tareas paralelas o secuenciales. |
| runs-on | Máquina virtual o contenedor donde se ejecuta el job. |
| steps | Cada paso individual: checkout, instalación, tests, build, deploy. |
3. Ejemplo de Workflow Básico
name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
Este ejemplo realiza:
- Checkout del código.
- Instalación de Node.js.
- Instalación de dependencias con
npm ci. - Ejecución de pruebas.
4. Gestión de Secretos y Entornos
Para proteger credenciales, GitHub Actions provee Secrets y Environments. Usa el repositorio o la organización para almacenarlos:
- GH_TOKEN, AWS_ACCESS_KEY_ID, WEB3_PRIVATE_KEY, etc.
- Restricciones de aprobación manual para entornos críticos (producción).
Acceso en el workflow:
- name: Deploy to production
env:
AWS_ACCESS_KEY_ID: {{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: {{ secrets.AWS_SECRET_ACCESS_KEY }}
run:
npx hardhat run scripts/deploy.js --network mainnet
5. Estrategias Avanzadas
5.1 Matrices de compilación
Permiten probar tu proyecto en distintas versiones o sistemas:
strategy:
matrix:
node-version: [14, 16, 18]
os: [ubuntu-latest, windows-latest]
5.2 Caché de dependencias
Reduce tiempos de instalación:
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: {{ runner.os }}-node-{{ hashFiles(/package-lock.json) }}
restore-keys:
{{ runner.os }}-node-
5.3 Reutilización de workflows
Convierte pasos comunes en workflows reutilizables:
uses: your-org/ci-templates/.github/workflows/base.yml@v1
with:
node-version: 18
6. Buenas Prácticas de Seguridad
- Limitar el uso de
runs-on: ubuntu-latesta jobs que lo requieran. - Revisar permisos de
GITHUB_TOKENreduciendo scopes innecesarios. - Escanear dependencias con CodeQL.
- Configurar Branch Protection Rules y revisiones de código antes de despliegues.
7. Monitoreo y Notificaciones
Puedes integrar notificaciones a canales de Slack, Discord o correo electrónico:
- action-slack para Slack.
- Uso de
actions/github-script@v6para crear comentarios en Issues o PRs.
Recursos y Referencias
Artículo publicado el 01/07/2024 Autor: Equipo DevOps
Deja una respuesta