Automatiza tu workflow con GitHub Actions

Descubre cómo GitHub Actions automatiza tests, despliegues y tareas repetitivas en tu flujo de trabajo DevOps de forma sencilla.

Cuando trabajamos con repositorios en GitHub, es fácil caer en la rutina de hacer pruebas, builds y despliegues manualmente. GitHub Actions nos permite automatizar todo ese proceso directamente desde el repositorio, ahorrando tiempo y reduciendo errores humanos. En este artículo verás cómo configurar un flujo de trabajo básico pero funcional para tu día a día.

Conceptos básicos de GitHub Actions

GitHub Actions se basa en workflows (flujos de trabajo) definidos en archivos YAML dentro de la carpeta .github/workflows/. Cada workflow se activa por eventos (push, pull request, schedule, etc.) y ejecuta uno o varios jobs en máquinas virtuales (runners). Los steps dentro de cada job pueden ejecutar comandos, scripts o acciones predefinidas de la comunidad.

Para empezar, necesitas tener un repositorio con al menos un archivo YAML en .github/workflows/. Por ejemplo, main.yml.

Creando tu primer workflow de integración continua

Vamos a crear un workflow que ejecute pruebas automáticas cada vez que hagas push a la rama main. Crea el archivo .github/workflows/ci.yml:

name: CI

on:
  push:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Configurar Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
      - run: npm install
      - run: npm test

Este workflow:

  • Se activa en push a main.
  • Usa el runner ubuntu-latest.
  • Hace checkout del código, configura Node 18, instala dependencias y ejecuta los tests.

Puedes adaptarlo a cualquier lenguaje: cambia setup-node por setup-python, setup-java, etc.

Desplegando automáticamente a un servidor

Una vez que los tests pasan, podemos desplegar el código a un servidor remoto vía SSH. Aquí tienes un ejemplo que copia los archivos mediante rsync:

deploy:
  needs: test
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - name: Desplegar por rsync
      uses: burnett01/rsync-deployments@7.0.1
      with:
        switches: -avz --delete
        path: ./
        remote_path: /var/www/miweb/
        remote_host: ${{ secrets.HOST }}
        remote_user: ${{ secrets.USER }}
        remote_key: ${{ secrets.SSH_KEY }}

Guarda las credenciales (HOST, USER, SSH_KEY) como secrets en tu repositorio: Settings > Secrets and variables > Actions. Nunca escribas contraseñas directamente en el YAML.

Ejecutando tareas programadas con cron

GitHub Actions también permite lanzar workflows en intervalos regulares. Por ejemplo, para hacer una copia de seguridad de tu base de datos cada día a las 3:00 AM:

name: Backup diario

on:
  schedule:
    - cron: '0 3 * * *'

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - name: Ejecutar backup
        run: |
          curl -X POST https://tuapi.com/backup \
            -H "Authorization: Bearer ${{ secrets.API_TOKEN }}"

El formato cron es estándar: minuto, hora, día del mes, mes, día de la semana. Puedes usar crontab.guru para generarlos fácilmente.

Conclusión

GitHub Actions transforma tu repositorio en un centro de automatización potente y gratuito para proyectos públicos. Con solo unos pocos archivos YAML puedes tener integración continua, despliegues automáticos y tareas programadas sin depender de servicios externos. Empieza con un workflow simple y ve añadiendo complejidad según lo necesites. Tu yo del futuro te lo agradecerá.