Skip to main content

Stocker et partager des données avec les artefacts de workflow

Utilisez des artefacts pour partager des données entre les tâches d’un flux de travail et stocker les données une fois le flux de travail terminé.

Prérequis

Avant de pouvoir terminer ce tutoriel, vous devez comprendre les artefacts du flux de travail. Consultez « Artefacts de workflow ».

Chargement d’artefacts de build et de test

La sortie générée par la compilation et le test de votre code produit souvent des fichiers que vous pouvez utiliser pour déboguer les échecs de test ainsi que le code prêt pour la production. Vous pouvez configurer un workflow pour compiler et tester le code poussé vers votre référentiel et signaler un état de réussite ou d’échec. Vous pouvez téléverser les résultats de construction et de test afin de les utiliser pour les déploiements, déboguer les tests échoués ou les plantages, ainsi qu’afficher la couverture de la suite de tests.

Vous pouvez utiliser l’action upload-artifact pour charger des artefacts. Lors du chargement d’un artefact, vous pouvez spécifier un fichier ou répertoire unique, ou bien plusieurs fichiers ou répertoires. Vous pouvez également exclure certains fichiers ou répertoires, et utiliser des modèles à caractères génériques. Nous vous recommandons d’attribuer un nom à un artefact, mais si aucun nom n’est fourni, artifact est utilisé comme nom par défaut. Pour plus d’informations sur la syntaxe, consultez l’action actions/upload-artifact.

Exemple

Par exemple, votre dépôt ou une application web peuvent contenir des fichiers SASS et TypeScript que vous devez convertir en CSS et JavaScript. En supposant que votre configuration de build génère les fichiers compilés dans le répertoire dist, vous devez déployer les fichiers dans le répertoire dist sur votre serveur d’applications web si tous les tests ont réussi.

|-- hello-world (repository)
|   └── dist
|   └── tests
|   └── src
|       └── sass/app.scss
|       └── app.ts
|   └── output
|       └── test
|

Cet exemple montre comment créer un workflow pour un projet Node.js qui génère le code dans le répertoire src et exécute les tests dans le répertoire tests. Vous pouvez supposer que l’exécution de npm test produit un rapport de couverture de code nommé code-coverage.html stocké dans le répertoire output/test/.

Le workflow charge les artefacts de production dans le répertoire dist, mais exclut tous les fichiers markdown. Il charge également le rapport code-coverage.html sous la forme d’un autre artefact.

YAML
name: Node CI

on: [push]

jobs:
  build_and_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm test
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: dist-without-markdown
          path: |
            dist
            !dist/**/*.md
      - name: Archive code coverage results
        uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: output/test/code-coverage.html

Configuration d’une période de conservation des artefacts personnalisée

Vous pouvez définir une période de conservation personnalisée pour les artefacts individuels créés par un workflow. Lorsque vous utilisez un workflow pour créer un artefact, vous pouvez utiliser retention-days avec l’action upload-artifact. Cet exemple montre comment définir une période de conservation personnalisée de 5 jours pour l’artefact nommé my-artifact :

YAML
  - name: 'Upload Artifact'
    uses: actions/upload-artifact@v4
    with:
      name: my-artifact
      path: my_file.txt
      retention-days: 5

La valeur retention-days ne peut pas dépasser la limite de conservation définie par le dépôt, l’organisation ou l’entreprise.

Téléchargement d’artefacts pendant l’exécution d’un workflow

Vous pouvez utiliser l’action actions/download-artifact pour télécharger les artefacts précédemment téléchargés pendant l’exécution d’un flux de travail.

Remarque

Si vous souhaitez télécharger des artefacts à partir d’un flux de travail ou d’une exécution de flux de travail différent, vous devez fournir un jeton et un identificateur d’exécution. Consultez la section Téléchargement des artefacts à partir d’autres exécutions de workflows ou de référentiels dans la documentation de l’action download-artifact.

Spécifiez le nom d’un artefact pour télécharger un artefact individuel. Si vous avez chargé un artefact sans spécifier de nom, le nom par défaut est artifact.

- name: Download a single artifact
  uses: actions/download-artifact@v5
  with:
    name: my-artifact

Vous pouvez également télécharger tous les artefacts d’une exécution de workflow en ne spécifiant pas de nom. Cela peut être utile si vous utilisez beaucoup d’artefacts.

- name: Download all workflow run artifacts
  uses: actions/download-artifact@v5

Si vous téléchargez tous les artefacts de l’exécution de workflow, un répertoire est créé pour chaque artefact à l’aide de son nom.

Pour plus d’informations sur la syntaxe, consultez l’action actions/download-artifact.

Passage de données entre les travaux d’un flux de travail

Vous pouvez utiliser les actions upload-artifact et download-artifact pour partager des données entre des travaux d’un workflow. Cet exemple de workflow montre comment transférer des données entre des travaux d’un même workflow. Pour plus d’informations, consultez les actions actions/upload-artifact et download-artifact.

Les travaux qui dépendent des artefacts d’un travail précédent doivent attendre que le travail dépendant se termine correctement. Ce workflow utilise le mot clé needs pour garantir que job_1, job_2 et job_3 s’exécutent de manière séquentielle. Par exemple, job_2 exige job_1 en utilisant la syntaxe needs: job_1.

Job 1 effectue les étapes suivantes :

  • Effectue un calcul mathématique et enregistre le résultat dans un fichier texte appelé math-homework.txt.
  • Utilise l’action upload-artifact pour charger le fichier math-homework.txt avec le nom de l’artefact homework_pre.

Job 2 utilise le résultat du travail précédent :

  • Télécharge l’artefact homework_pre chargé lors de la tâche précédente. Par défaut, l’action download-artifact télécharge les artefacts dans le répertoire de l’espace de travail dans lequel l’étape s’exécute. Vous pouvez utiliser le paramètre d’entrée path pour spécifier un autre répertoire de téléchargement.
  • Lit la valeur dans le fichier math-homework.txt, effectue un calcul mathématique, puis enregistre à nouveau le résultat dans math-homework.txt, en remplaçant son contenu.
  • Charge le fichier math-homework.txt. Comme les artefacts sont considérés comme immuables dans v4, l’artefact reçoit une autre entrée, homework_final en tant que nom.

Job 3 affiche le résultat téléchargé depuis le travail précédent :

  • Télécharge l’artefact homework_final à partir de l’artefact Job 2.
  • Imprime le résultat de l’équation mathématique dans le journal de bord.

L’opération mathématique complète effectuée dans cet exemple de workflow est (3 + 7) x 9 = 90.

YAML
name: Share data between jobs

on: [push]

jobs:
  job_1:
    name: Add 3 and 7
    runs-on: ubuntu-latest
    steps:
      - shell: bash
        run: |
          expr 3 + 7 > math-homework.txt
      - name: Upload math result for job 1
        uses: actions/upload-artifact@v4
        with:
          name: homework_pre
          path: math-homework.txt

  job_2:
    name: Multiply by 9
    needs: job_1
    runs-on: windows-latest
    steps:
      - name: Download math result for job 1
        uses: actions/download-artifact@v5
        with:
          name: homework_pre
      - shell: bash
        run: |
          value=`cat math-homework.txt`
          expr $value \* 9 > math-homework.txt
      - name: Upload math result for job 2
        uses: actions/upload-artifact@v4
        with:
          name: homework_final
          path: math-homework.txt

  job_3:
    name: Display results
    needs: job_2
    runs-on: macOS-latest
    steps:
      - name: Download math result for job 2
        uses: actions/download-artifact@v5
        with:
          name: homework_final
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value

L’exécution du workflow archive tous les artefacts qu’elle a générés. Pour plus d’informations sur le téléchargement des artefacts archivés, consultez « Téléchargement d’artéfacts de workflow ».

Validation des artefacts

Chaque fois que l’action upload-artifact est utilisée, elle retourne une sortie appelée digest. Il s’agit d’une synthèse SHA256 de l’artefact que vous avez chargé pendant une exécution de flux de travail.

Lorsque l’action de téléchargement d’artefact est ensuite utilisée pour télécharger cet artefact, elle calcule automatiquement la synthèse de cet artefact téléchargé et vérifie qu’elle correspond à la sortie de l’étape upload-artifact.

Si la synthèse ne correspond pas, l’exécution affichera un avertissement dans l’interface utilisateur et dans les journaux de tâches.

Pour afficher la synthèse SHA256, ouvrez les journaux de la tâche upload-artifact ou consultez la sortie Artifact qui apparaît dans l’interface utilisateur d’exécution du flux de travail.