Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Par mis à jour le

Améliorer cette page

Votre workflow CI prend 8 minutes. À chaque run, il télécharge les mêmes dépendances, reconstruit les mêmes fichiers… Pourquoi recommencer à zéro alors que rien n'a changé ?

GitHub Actions propose deux mécanismes pour éviter ce gaspillage : le cache et les artifacts. Ils semblent similaires, mais ont des usages très différents. Choisir le bon mécanisme au bon moment peut diviser par deux le temps de vos workflows.

  • Distinguer le cache des artifacts en une phrase
  • Choisir le bon mécanisme selon votre besoin
  • Repérer les deux erreurs classiques de confusion entre les deux
  • Combiner cache et artifacts dans un même workflow

Cache et artifacts répondent à deux besoins distincts. La règle d'or tient en deux lignes, gardez-la en tête, elle tranche la plupart des cas.

Ce tableau met les deux mécanismes face à face sur les critères qui comptent au moment de choisir : portée, durée de vie, visibilité et cas d'usage.

AspectCacheArtifacts
ObjectifAccélérer les builds répétitifsPartager des résultats
PortéeEntre runs (workflow répété)Entre jobs (même run)
Durée de vie7 jours sans accèsConfigurable (1-90 jours)
Visible dans l'UINon (interne)Oui (téléchargeable)
Taille max10 GB par repo (total)10 GB par artifact
Cas d'usagenode_modules, .cache/pipBuilds, rapports, binaires

Partez de votre objectif : voulez-vous accélérer une installation, ou faire circuler un résultat d'un job à l'autre ? Chacun mène à un mécanisme.

Voici les cas concrets qui reviennent le plus souvent, classés selon le mécanisme adapté.

  • Accélérer npm ci / pip install / mvn install
  • Réutiliser les dépendances entre runs
  • Cacher les binaires téléchargés (Terraform, kubectl...)
  • Accélérer les builds incrémentaux

Exemple : Vous pushez 3 commits successifs → le cache des dépendances est réutilisé pour les 3 runs.

  • Partager le build entre les jobs test et deploy
  • Garder les rapports de tests / couverture
  • Télécharger les binaires depuis l'interface GitHub
  • Conserver les logs de debug en cas d'échec

Exemple : Un job build crée dist/, les jobs test et deploy le réutilisent sans rebuild.

Deux confusions reviennent sans cesse. Les reconnaître évite des workflows instables ou inutilement lents.

# ❌ NE FONCTIONNE PAS de manière fiable
jobs:
build:
steps:
- run: npm run build
- uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
with:
path: dist/
key: build-${{ github.sha }}
deploy:
needs: build
steps:
- uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
# Peut échouer ! Le cache n'est pas garanti

Pourquoi ? Le cache est conçu pour les runs, pas les jobs.

Solution : Utilisez un artifact.

# ❌ Gaspillage : vous uploadez node_modules à chaque run
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
path: node_modules/
# ✅ Utilisez le cache
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
cache: 'npm'

Pourquoi ? Les dépendances sont réutilisables entre runs → cache.

Dans un workflow réel, vous utilisez les deux :

name: CI/CD
on:
push:
branches: [main]
# Aucun droit par défaut : chaque job demande le minimum
permissions: {}
jobs:
build:
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# CACHE : accélérer npm ci
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run build
# ARTIFACT : partager le build
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: dist
path: dist/
retention-days: 1
deploy:
needs: build
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: dist
- run: ./deploy.sh

Ce qui se passe :

  1. Le cache accélère npm ci (dépendances réutilisées entre runs)
  2. L'artifact transporte le build vers le job deploy
  3. On ne rebuild qu'une seule fois

La moitié « cache » de ce motif se décline ensuite selon l'écosystème, chacun ayant ses chemins et ses pièges : Python, Node.js et Java.

Cache = entre runs

Pour les fichiers réutilisables qui accélèrent les builds répétitifs.

Artifacts = entre jobs

Pour les fichiers produits à partager ou télécharger.

Les deux sont complémentaires

Un workflow optimisé utilise le cache ET les artifacts.

Checklist :

  1. Dépendances → Cache
  2. Résultats de build → Artifacts
  3. Partage entre jobs → Artifacts + needs:
  4. Logs de debug → Artifacts avec if: failure()

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn