0%
Jobs paralelos, dependências e matrizes

Jobs e matrizes

Paralelizar sem perder o controle do tempo de execução nem da fatura.

10-15 min

Uma suíte de testes que leva doze minutos em um único job costuma levar quatro em três jobs paralelos. O ganho é real, mas tem um preço em complexidade e, sobretudo, em uma descoberta desagradável: o que um job produziu não existe para os outros. O erro mais frequente em um workflow com vários jobs consiste em compilar em um job e depois tentar usar o resultado em outro, que roda em uma máquina totalmente diferente, com um sistema de arquivos vazio.

A segunda armadilha diz respeito às matrizes. Testar três versões da linguagem em três sistemas operacionais parece razoável até que se faça a conta: nove execuções completas da suíte a cada commit. Se cada uma consumir cinco minutos, um commit custa quarenta e cinco minutos de runner, e os minutos do Windows são cobrados em dobro em relação aos do Linux, e os do macOS, dez vezes mais. Uma matriz é um multiplicador; escrevê-la é fácil, decidir seu tamanho é o verdadeiro trabalho.

O paralelismo por padrão

Dois jobs declarados em um mesmo workflow começam simultaneamente, em dois 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

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!