Exercice 02 : Partager des fichiers avec les artefacts
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Générer un fichier dans un job et l'uploader comme artefact
- ✅ Télécharger l'artefact dans un job suivant pour l'utiliser
- ✅ Configurer
retention-dayspour contrôler la durée de stockage - ✅ Utiliser
if: always()pour uploader même si le job échoue
Durée estimée : 20 min | Difficulté : ⭐⭐☆☆☆
📖 Contexte
Chaque job GitHub Actions tourne sur une machine virtuelle indépendante. Un fichier créé dans le job test n'est pas automatiquement accessible dans le job deploy. Les artefacts sont le mécanisme prévu pour partager des fichiers entre jobs (ou les rendre téléchargeables depuis l'interface).
Cas d'usage courants : rapports de tests, binaires compilés, fichiers de couverture de code.
📋 Énoncé
Vous allez créer un pipeline en deux jobs : build génère un rapport JSON et l'uploade comme artefact, puis report télécharge ce rapport et affiche son contenu.
Résultat attendu :
- Un artefact
build-reportvisible dans l'interface GitHub Actions - Le job
reportaffiche le contenu du fichier téléchargé
🧭 Déroulement
Tâche 1 : Générer un fichier dans le job build
Créez un job build qui génère un fichier rapport.json contenant {"status": "success", "tests": 42}. Utilisez un here-doc ou echo pour l'écrire.
Indice :
`yaml- name: Générer le rapport
run: |
mkdir -p dist
echo '{"status":"success","tests":42}' > dist/rapport.json
`
Vérification : La commande cat dist/rapport.json dans le step suivant affiche le JSON.
Tâche 2 : Uploader l'artefact
Après la génération du fichier, ajoutez un step qui uploade le dossier dist/ comme artefact nommé build-report avec une rétention de 7 jours.
Indice :
`yaml- name: Upload artefact
uses: actions/upload-artifact@v4
with:
name: build-report
path: dist/
retention-days: 7
`
path:peut être un dossier ou un pattern glob (dist/*.json).
Vérification : Dans le résumé du run, un encadré "Artifacts" liste build-report.
Tâche 3 : Télécharger l'artefact dans un second job
Ajoutez un job report qui dépend de build. Ce job doit télécharger l'artefact build-report et afficher le contenu du fichier JSON.
Indice :
`yamlreport:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: build-report
- run: cat rapport.json
`Par défaut,
download-artifactrestaure les fichiers dans le répertoire courant.
Vérification : Les logs du job report affichent {"status":"success","tests":42}.
Tâche 4 : Upload conditionnel avec if: always()
Modifiez le step d'upload dans build pour qu'il s'exécute même si un step précédent a échoué. Ajoutez if: always() sur ce step.
Indice : Sans
if: always(), si un step échoue, les steps suivants sont sautés par défaut. Pour un rapport de tests, on veut toujours uploader même en cas d'échec, pour diagnostiquer le problème.
Vérification : En forçant un step à échouer (run: exit 1), l'artefact est quand même uploadé et visible dans l'interface.
Tâche 5 : Télécharger plusieurs artefacts
Modifiez le job report pour qu'il télécharge l'artefact dans un sous-dossier nommé resultats/ en utilisant l'option path: de download-artifact.
Indice :
`yaml- uses: actions/download-artifact@v4
with:
name: build-report
path: resultats/
- run: cat resultats/rapport.json
`
Vérification : La commande ls resultats/ dans les logs affiche rapport.json.
🗂️ Mini-Projet : Pipeline build → test → archive
Créez un pipeline qui génère un binaire simulé, le teste, puis l'archive :
# Checkpoints à valider :
# [ ] Le job build génère dist/rapport.json
# [ ] actions/upload-artifact@v4 uploade le dossier dist/
# [ ] L'artefact est visible dans l'interface Actions après le run
# [ ] Le job report télécharge l'artefact avec download-artifact@v4
# [ ] if: always() est présent sur le step d'upload
# [ ] Bonus : utilisez path: pour restaurer dans un sous-dossier