Jobs y matrices
Paralelizar sin perder el control del tiempo de ejecución ni de la factura.
Una suite de tests que tarda doce minutos en un solo job suele tardar cuatro en tres jobs paralelos. La ganancia es real, pero se paga en complejidad y, sobre todo, en un descubrimiento desagradable: lo que un job ha producido no existe para los demás. El error más frecuente en un workflow con varios jobs consiste en compilar en un job y después intentar usar el resultado en otro, que se ejecuta en una máquina totalmente distinta, con un sistema de archivos vacío.
La segunda trampa son las matrices. Probar tres versiones del lenguaje en tres sistemas operativos parece razonable hasta que se hace la cuenta: nueve ejecuciones completas de la suite por cada commit. Si cada una consume cinco minutos, un commit cuesta cuarenta y cinco minutos de runner, y los minutos de Windows se facturan al doble que los de Linux, y los de macOS a diez veces más. Una matriz es un multiplicador: escribirla es fácil, decidir su tamaño es el verdadero trabajo.
El paralelismo por defecto
Dos jobs declarados en un mismo workflow arrancan a la vez, en dos runners distintos.
name: Verifications
on:
pull_request:
branches: [main]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run lint
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión