Tutorial

Ejecutar scripts en piloto automático cada día para actualizar base de datos con GitHub Actions

Teniendo una base de datos que necesita ser actualizada con los nuevos datos que se publican cada día, ¿cómo automatizar la ejecución de scripts con GitHub Actions?

¿Por qué automatizar la ejecución de scripts?

Tenemos una base de datos que se alimenta con la información de los archivos I90, que detallan la operativa de las unidades de programación energética en el sistema eléctrico español según los programas de generación.

Query de muestra sobre la base de datos I90
Query de muestra sobre la base de datos I90

En este artículo, explicamos cómo construir una base de datos que contenga los datos de los archivos I90 preprocesados, normalizados y relacionados para que los usuarios trabajen con ella cómodamente.

Si los usuarios son traders energéticos, necesitarán la última actualización de los datos disponibles.

Red Eléctrica de España (REE), el operador del sistema eléctrico español, publica cada día un nuevo archivo I90. Para que la información esté disponible en la base de datos, el archivo debe ser descargado y procesado.

Idealmente, este proceso se ejecutaría cada día automáticamente, sin intervención humana. Por ejemplo, a continuación puedes ver el historial de ejecuciones de un script que se ejecuta cada día a las 03:00.

Historial de ejecuciones completadas de GitHub Actions
Historial de ejecuciones completadas de GitHub Actions

¿Cómo automatizar la ejecución de un script?

Agendar la ejecución de un script con cronjob

Aquí entra en juego cronjob, un servicio que ejecuta comandos de manera periódica en un ordenador según una expresión cron. Por ejemplo, para ejecutar un comando cada día a las 03:00, se usaría la expresión 0 3 * * *.

Si creamos el servicio cronjob en nuestro ordenador local, necesitamos que esté siempre activo. Pero no siempre vamos a estar trabajando desde nuestro ordenador. Así que necesitamos una solución que nos permita ejecutar el script en un servidor remoto.

Existen muchas maneras de ejecutar cronjob en un servidor remoto:

  • GitHub Actions
  • Instancia en servidor remoto
  • Funciones serverless con cronjob en la nube

Serverless significa que no es necesario alquilar un servidor que esté activo 24/7 para ejecutar el script.

La solución más simple de implementar es GitHub Actions porque solo necesitamos un archivo YAML de configuración y subir el repositorio a GitHub.

GitHub Actions

Archivo de configuración YAML

Dentro del repositorio principal, creamos la estructura de archivos de la siguiente manera:

folder/ ├── .github/ │ └── workflows/ │ └── i90-update-python.yml #! ├── requirements.txt ├── update_i90.py └── …

Dentro del archivo de configuración, especificamos la frecuencia de ejecución con un comando cron, que, en nuestro caso, se ejecutará cada día a las 03:00.

¿Qué se va a ejecutar?

Los jobs definidos dentro del archivo de configuración.

En nuestro caso, definimos un job llamado update-db que se ejecutará en un miniordenador virtual (contenedor) con el sistema operativo Ubuntu. Tras construir el contenedor con el sistema operativo, se instalará Python y las librerías necesarias, que están en requirements.txt. Finalmente, se ejecutará el script update_i90.py.

#! i90-update-python.yml
name: Update DB with new I90 files

on:
  schedule:
    - cron: "0 3 * * *" # Daily at 03:00
  workflow_dispatch:

jobs:
  update-db:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-python@v2
        with:
          python-version: "3.10"

      - run: |
          pip install --upgrade pip
          pip install -r requirements.txt

      - run: python update_i90.py

Una vez configurado el archivo de configuración, debemos subir el repositorio a GitHub para que se pueda ejecutar automáticamente todos los días a las 03:00 a través de GitHub Actions.

Inicializar repositorio git

Primero debemos inicializar el repositorio en local con git, que es un sistema, digamos, de base de datos dentro de la carpeta del proyecto para registrar los cambios (crear nuevos archivos, modificar archivos ya existentes, etc.).

git init

Por defecto, la base de datos git está vacía y no tiene en cuenta los archivos que ya están en el repositorio.

Para registrar los archivos en la base de datos, debemos añadirlos al repositorio y registrar la modificación.

git add .
git commit -m "Initial commit"

Subir repositorio a GitHub

En GitHub, creamos un repositorio nuevo y lo vinculamos con el repositorio local.

Puedes crearlo a través de la página web de GitHub siguiendo estas instrucciones. Pero en esta casa somos más prácticos y usamos la terminal para no perder tiempo con los botones de la web.

gh repo create i90-update --private --source=. --remote=origin

Automáticamente, se crea el repositorio en GitHub y se vincula con el repositorio local. Por tanto, si navegas a la siguiente URL verás el repositorio creado con sus acciones.

https://github.com/jsulopzs/i90-update/actions

Ejecutar script

Al inicio, el historial de ejecuciones estará vacío. Pero si pruebas a ejecutar con el botón Run workflow, verás que, tras unos segundos, se lanza la ejecución del script.

Interfaz de GitHub Actions mostrando la opción de ejecutar el flujo de trabajo manualmente
Interfaz de GitHub Actions mostrando la opción de ejecutar el flujo de trabajo manualmente

Si todo ha salido bien, el script está listo para ejecutarse automáticamente cada día a las 03:00, sin intervención humana.

Historial de ejecuciones

Al cabo de unos días, verás el historial de ejecuciones completadas.

Historial de ejecuciones completadas de GitHub Actions
Historial de ejecuciones completadas de GitHub Actions

Y así es como se automatiza la ejecución de un script en GitHub Actions.

Conclusiones

  1. Optimización de procesos: Automatizar scripts con herramientas como GitHub Actions mejora la eficiencia, reduce errores y libera tiempo para tareas estratégicas.
  2. Datos actualizados: Mantén información crítica siempre al día, ideal para sectores como el energético.
  3. Escalabilidad: Soluciones flexibles y adaptables al crecimiento, integrables con otros sistemas.
  4. Reducción de costes: Automatizar y usar tecnologías serverless disminuye gastos operativos y de infraestructura.
  5. Seguridad: Implementa medidas robustas para proteger datos y garantizar procesos confiables.
  6. Servicios personalizados: Desarrollo soluciones a medida según las necesidades de tu negocio.
  7. Soporte continuo: Aseguro actualizaciones, mantenimiento y adaptaciones según sea necesario.

Suscríbete a nuestro newsletter

Recibe insights semanales sobre datos, automatización e IA.

© 2025 Datons. All rights reserved.