Integración CI/CD con GitHub Actions

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:

  1. Checkout del código.
  2. Instalación de Node.js.
  3. Instalación de dependencias con npm ci.
  4. 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-latest a jobs que lo requieran.
  • Revisar permisos de GITHUB_TOKEN reduciendo 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@v6 para crear comentarios en Issues o PRs.

Recursos y Referencias

Artículo publicado el 01/07/2024 Autor: Equipo DevOps


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *