0%
Jobs paralelos, dependencias y matrices

Jobs y matrices

Paralelizar sin perder el control del tiempo de ejecución ni de la factura.

10-15 min

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

¡Enlace copiado!