0%
Jobs parallèles, dépendances et matrices

Jobs et matrices

Paralléliser sans perdre le contrôle du temps d'exécution ni de la facture.

10-15 min

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

Lien copié !