Jobs e matrizes
Paralelizar sem perder o controle do tempo de execução nem da fatura.
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