Antes de profundizar en los detalles de los workflows, es importante entender algunos conceptos básicos:
Para crear un workflow en GitHub, debes agregar un archivo YAML dentro del directorio .github/workflows
de tu repositorio. A continuación, se presenta un ejemplo básico de un workflow que se ejecuta cada vez que se realiza un push al repositorio.
name: CI Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
1. name: Asigna un nombre al workflow (en este caso, "CI Workflow").
2. on: Define los eventos que activarán el workflow. Aquí, se ejecuta en cada push
.
3. jobs: Contiene uno o más jobs que se ejecutarán como parte del workflow.
4. runs-on: Especifica el tipo de runner que se utilizará (por ejemplo, ubuntu-latest
).
5. steps: Define los pasos que se ejecutarán en el job.
GitHub Actions permite que los workflows se activen en respuesta a una variedad de eventos, tales como:
A continuación, un ejemplo más complejo que incluye un despliegue a producción si los tests pasan exitosamente en la rama main
.
name: CI/CD Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
deploy:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Deploy to Production
run: |
echo "Deploying to production server..."
ssh user@server 'cd /path/to/app && git pull && npm install && pm2 restart all'
1. on: El workflow se ejecuta en cada push a la rama main
.
2. jobs:
build
ha pasado y si la referencia (ref
) es la rama main
.
3. needs: Define que el job deploy
depende del job build
y solo se ejecutará si build
finaliza correctamente.
4. if: Condición adicional para asegurarse de que el despliegue solo se realice en la rama main
.
Además de las acciones oficiales proporcionadas por GitHub, puedes crear y utilizar tus propias acciones personalizadas. Estas acciones pueden ser reutilizadas en múltiples workflows y repositorios. Aquí hay un ejemplo de una acción personalizada:
name: Custom Action
description: A custom action that prints a greeting message
runs:
using: 'node12'
main: 'index.js'
inputs:
name:
description: 'Name to greet'
required: true
default: 'World'
Y el archivo index.js
asociado:
const core = require('@actions/core');
try {
const nameToGreet = core.getInput('name');
console.log(`Hello ${nameToGreet}!`);
} catch (error) {
core.setFailed(error.message);
}
GitHub Actions y sus workflows ofrecen una forma flexible y potente de automatizar una amplia gama de tareas dentro de un proyecto de desarrollo. Desde la ejecución de pruebas automatizadas hasta el despliegue continuo, los workflows permiten mantener un ciclo de desarrollo eficiente y de alta calidad. Con los ejemplos proporcionados, se puede comenzar a implementar automatizaciones personalizadas que se adapten a las necesidades específicas de cualquier proyecto.
Jorge García
Fullstack developer