← Volver al inicio

Automatizacion Monitorizacion Github Actions

Introducción

¿No sabes qué es GitHub Actions ni para qué sirve la monitorización? Aquí te lo explico fácil:

GitHub Actions es una herramienta que te permite automatizar tareas en tus proyectos de código, como pruebas, despliegues o revisiones, sin tener que hacerlas a mano.

Monitorización es el proceso de vigilar tus aplicaciones para saber si funcionan bien o si hay problemas.

En este artículo, te enseño cómo usar GitHub Actions para automatizar y monitorizar tus proyectos, aunque nunca lo hayas hecho antes.

title: “Automatización y Monitorización con GitHub Actions: Una Guía Completa” date: 2025-11-10 categories:

  • DevOps tags:
  • GitHub Actions
  • CI/CD
  • Automatización
  • Monitorización
  • Workflows seo: type: TechArticle description: “Aprende a implementar automatización avanzada y monitorización usando GitHub Actions. Guía práctica con ejemplos reales y mejores prácticas para 2026.” —

La automatización y monitorización de procesos DevOps se ha vuelto fundamental en el desarrollo moderno. En este artículo, exploraremos cómo utilizar GitHub Actions para crear pipelines robustos y sistemas de monitorización efectivos.

GitHub Actions: Fundamentos Avanzados

Estructura de Workflows

name: CI/CD Pipeline
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  schedule:
    - cron: '0 0 * * *'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up environment
        run: |
          echo "Setting up build environment"

Matrices de Pruebas

strategy:
  matrix:
    node-version: [14.x, 16.x, 18.x]
    os: [ubuntu-latest, windows-latest]

Monitorización Automatizada

1. Healthchecks Periódicos

name: Health Check
on:
  schedule:
    - cron: '*/15 * * * *'

jobs:
  health_check:
    runs-on: ubuntu-latest
    steps:
      - name: Check API Status
        run: |
          curl -sSf https://api.example.com/health

2. Alertas y Notificaciones

- name: Send Alert
  if: failure()
  uses: actions/github-script@v6
  with:
    script: |
      const issue = await github.rest.issues.create({
        owner: context.repo.owner,
        repo: context.repo.repo,
        title: 'Health Check Failed',
        body: 'System health check failed at ${new Date().toISOString()}'
      });

Mejores Prácticas

1. Seguridad

  • Uso de secretos
  • Escaneo de dependencias
  • Análisis de código
security:
  steps:
    - name: Security scan
      uses: github/security-scanner@v2
      with:
        severity: high

2. Optimización de Rendimiento

  • Cacheo de dependencias
  • Construcciones incrementales
  • Paralelización de tareas
- name: Cache dependencies
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: $-node-$

Casos de Uso Avanzados

1. Despliegue Multi-Entorno

deployment:
  environment:
    name: $
  strategy:
    matrix:
      environment: [dev, staging, prod]

2. Integración con Azure

- name: Azure Login
  uses: azure/login@v1
  with:
    creds: $

- name: Deploy to Azure
  uses: azure/webapps-deploy@v2
  with:
    app-name: my-app
    slot-name: production

Monitorización Continua

1. Métricas de Pipeline

  • Tiempo de ejecución
  • Tasa de éxito
  • Uso de recursos

2. Dashboards Personalizados

- name: Generate Metrics
  run: |
    echo "::set-output name=duration::$"
    echo "::set-output name=status::$"

Automatización de Mantenimiento

1. Limpieza Automática

- name: Cleanup old artifacts
  uses: geekyeggo/delete-artifact@v1
  with:
    name: build-artifact
    age: '1 week'

2. Actualizaciones Programadas

- name: Update Dependencies
  run: |
    npm update
    git config user.name github-actions
    git config user.email github-actions@github.com
    git add package*
    git commit -m "chore: update dependencies"
    git push

Detalles de Implementación

Configuración del Pipeline

name: Complete CI/CD Pipeline
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
  schedule:
    - cron: '0 0 * * *'

env:
  NODE_VERSION: '16.x'
  AZURE_WEBAPP_NAME: 'your-app-name'

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: $
          cache: 'npm'

      - name: Install dependencies
        run: |
          npm ci
          npm install -g jest

      - name: Run tests
        run: npm test
        
      - name: Run security scan
        uses: github/codeql-action/analyze@v2

Sistema de Monitorización

name: Monitoring System
on:
  schedule:
    - cron: '*/10 * * * *'

jobs:
  monitor:
    runs-on: ubuntu-latest
    steps:
      - name: Check API endpoints
        uses: jtalk/url-health-check-action@v3
        with:
          url: |
            https://api.example.com/health
            https://api.example.com/metrics
          max-attempts: 3
          retry-delay: 5s

      - name: Monitor Performance
        run: |
          curl -X POST "$/collect" \
            -H "Authorization: Bearer $" \
            -H "Content-Type: application/json" \
            -d '{
              "timestamp": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'",
              "metrics": {
                "response_time": '$RESPONSE_TIME',
                "error_rate": '$ERROR_RATE'
              }
            }'

Automatización de Mantenimiento Detallada

name: Maintenance Tasks
on:
  schedule:
    - cron: '0 0 * * 0'  # Cada domingo

jobs:
  maintenance:
    runs-on: ubuntu-latest
    steps:
      - name: Cleanup old workflows
        uses: Mattraks/delete-workflow-runs@v2
        with:
          token: $
          repository: $
          retain_days: 30
          keep_minimum_runs: 10

      - name: Cleanup old images
        uses: snok/container-retention-policy@v2
        with:
          image-names: my-app-*
          cut-off: One week ago UTC
          account-type: personal
          token: $

      - name: Update dependencies
        run: |
          git config user.name github-actions[bot]
          git config user.email github-actions[bot]@users.noreply.github.com
          
          # Actualizar dependencias
          npm outdated
          npm update
          
          # Verificar cambios
          if [[ -n "$(git status --porcelain)" ]]; then
            git add package*.json
            git commit -m "chore: update dependencies [skip ci]"
            git push
          fi

Conclusiones y Mejores Prácticas

La implementación de automatización con GitHub Actions debe seguir estos principios clave:

  1. Seguridad:
    • Usar secretos para información sensible
    • Implementar escaneo de código
    • Limitar permisos de workflows
    • Revisar dependencias regularmente
  2. Eficiencia:
    • Utilizar caché estratégicamente
    • Optimizar los triggers de workflows
    • Implementar jobs en paralelo cuando sea posible
    • Mantener los workflows modulares
  3. Monitorización:
    • Establecer alertas significativas
    • Mantener logs detallados
    • Implementar métricas de rendimiento
    • Configurar notificaciones efectivas
  4. Mantenimiento:
    • Documentar cada workflow
    • Mantener consistencia en la nomenclatura
    • Implementar versionamiento de acciones
    • Realizar limpieza periódica

Referencias