Jobs et matrices
Paralléliser sans perdre le contrôle du temps d'exécution ni de la facture.
Une suite de tests qui prend douze minutes en un seul job en prend souvent quatre en trois jobs parallèles. Le gain est réel, mais il se paie en complexité, et surtout en une découverte désagréable : ce qu'un job a produit n'existe pas pour les autres. L'erreur la plus fréquente sur un workflow multi-jobs consiste à compiler dans un job, puis à tenter d'utiliser le résultat dans un autre — qui tourne sur une machine entièrement différente, avec un système de fichiers vide.
Le deuxième piège concerne les matrices. Tester trois versions du langage sur trois systèmes d'exploitation semble raisonnable jusqu'à ce qu'on compte : neuf exécutions complètes de la suite pour chaque commit. Si chacune consomme cinq minutes, un commit coûte quarante-cinq minutes de runner, et les minutes Windows sont facturées le double des minutes Linux, macOS le décuple. Une matrice est un multiplicateur ; l'écrire est facile, décider de sa taille est le vrai travail.
Le parallélisme par défaut
Deux jobs déclarés dans un même workflow démarrent simultanément, sur deux runners distincts.
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
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion