Git y Github
Integración continua con GitHub Actions
En este módulo, exploraremos cómo configurar e implementar integración continua (CI) utilizando GitHub Actions. GitHub Actions es un servicio de CI/CD integrado en GitHub que permite automatizar flujos de trabajo, como pruebas, construcción y despliegue de aplicaciones.
¿Qué es Integración Continua (CI)?
La Integración Continua (CI) es una práctica de desarrollo de software en la que los desarrolladores integran regularmente su código en un repositorio compartido, seguido de la ejecución automática de pruebas y compilaciones. Esto ayuda a identificar problemas de forma temprana y mejorar la calidad del software.
Configuración de GitHub Actions
Crear un archivo de workflow
Los workflows de GitHub Actions se definen en archivos YAML ubicados en el directorio .github/workflows
de tu repositorio. Cada archivo define un conjunto de acciones que se ejecutan en respuesta a eventos específicos.
Ejemplo básico de workflow
Vamos a crear un ejemplo simple que ejecute pruebas automatizadas cada vez que se haga push al repositorio.
-
Crea el directorio
.github/workflows
si aún no existe:bash -
Crea un archivo YAML llamado
ci.yml
dentro del directorio.github/workflows
y añade lo siguiente:yaml
Componentes de un Workflow
name
Define el nombre del workflow. En este ejemplo, el workflow se llama "CI".
on
Especifica los eventos que activan el workflow. Aquí se ejecuta en cada push
y pull_request
a la rama main
.
jobs
Es una colección de trabajos que se ejecutarán en este workflow. Cada trabajo incluye pasos que definen las tareas específicas:
runs-on
: El ambiente donde se ejecutará el trabajo (ej.ubuntu-latest
).steps
: Las acciones a ejecutar.
Reutilización de acciones
Usar acciones de la comunidad
GitHub Actions tiene un amplio marketplace con acciones que puedes reutilizar. Por ejemplo, para ejecutar linters, compilaciones e incluso despliegues.
Ejemplo de uso de una acción de linting:
yaml
Variables y secretos
Uso de secretos
Puedes almacenar información sensible (como tokens de API) en los secretos de GitHub y acceder a ellos en tus workflows.
- Navega a tu repositorio en GitHub.
- Ve a "Settings" -> "Secrets".
- Añade un nuevo secreto y asígnale un nombre (por ejemplo,
API_TOKEN
).
Luego, usa el secreto en tu archivo YAML:
yaml
Ejemplo práctico de un Workflow Completo
Configurar un pipeline de CI para una aplicación Node.js
Supongamos que tenemos una aplicación Node.js y queremos configurar un pipeline de CI que:
-
Instale las dependencias.
-
Ejecute pruebas.
-
Haga linting al código.
-
Compile la aplicación.
-
Crea el archivo YAML en
.github/workflows/ci.yml
:yaml
Deploy continuo
Desplegar a Heroku
Supongamos que deseas desplegar tu aplicación automáticamente a Heroku cada vez que haya un cambio en main
.
- Añade el secreto
HEROKU_API_KEY
en la configuración de secretos de GitHub. - Configura el workflow para incluir el paso de despliegue:
yaml
Buenas prácticas
- Mantén tus workflows simples y específicos: Un archivo YAML por cada conjunto de tareas relacionadas.
- Utiliza secrets para información sensible.
- Aprovecha las acciones de la comunidad: Reduce la redundancia utilizando acciones preexistentes en el marketplace.
- Divide y vencerás: Divide tareas complejas en pasos más manejables y comprensibles.
Con estas técnicas, puedes configurar una pipeline de CI/CD robusta usando GitHub Actions para mejorar la calidad y la eficiencia de tu desarrollo de software. En el próximo módulo, aprenderemos sobre la gestión de versiones y el lanzamiento de releases.
- Introducción a Git y GitHub
- Instalación y configuración de Git
- Fundamentos de control de versiones
- Creación y clonación de repositorios
- Realización de commits y seguimiento de cambios
- Gestión de ramas (branching)
- Fusionado de ramas (merging)
- Resolución de conflictos
- Trabajo colaborativo en GitHub
- Pull requests y revisiones de código
- Uso avanzado de Git (rebase, cherry-pick, etc.)
- Automatización con Git hooks
- Integración continua con GitHub Actions
- Gestión de versiones y lanzamiento de releases
- Conclusiones y mejores prácticas en Git y GitHub
![](/chuck-b/chuck-b-1.webp)