Skip to main content

Speichern und Freigeben von Daten mit Workflowartefakten

Verwende Artefakte, um Daten zwischen Aufträgen in einem Workflow freizugeben und Daten zu speichern, sobald dieser Workflow abgeschlossen ist.

Voraussetzungen

Bevor du dieses Tutorial durcharbeiten kannst, musst du dich mit Workflowartefakten vertraut machen. Weitere Informationen findest du unter Workflowartefakte.

Build- und Testartefakte hochladen

Durch die Ergebnisse der Erstellung und des Tests deines Codes werden oft zum Debuggen von Testfehlern einsetzbare Dateien und bereitstellbarer Produktionscode erstellt. Du kannst einen Workflow konfigurieren, um den per Push-Vorgang an dein Repository übertragenen Code zu erstellen und zu testen und um einen erfolgreichen oder fehlerhaften Status zu melden. Du kannst die Build- und Testausgabe hochladen, um sie für Bereitstellungen, zum Debuggen fehlerhafter Tests oder von Abstürzen und zum Anzeigen der Testsuite-Abdeckung zu verwenden.

Du kannst die upload-artifact-Aktion verwenden, um Artefakte hochzuladen. Beim Hochladen eines Artefakts kannst du eine einzelne Datei oder ein einzelnes Verzeichnis oder mehrere Dateien oder Verzeichnisse angeben. Du kannst auch bestimmte Dateien oder Verzeichnisse ausschließen und Platzhaltermuster verwenden. Es wird empfohlen, einen Namen für ein Artefakt anzugeben, aber wenn kein Name angegeben wird, wird artifact als Standardname verwendet. Weitere Informationen zur Syntax findest du bei der actions/upload-artifact-Aktion auf GitHub Enterprise Server.

Beispiel

Zum Beispiel kann dein Projektarchiv oder eine Webanwendung SASS- und TypeScript-Dateien enthalten, die du in CSS und JavaScript konvertieren musst. Wenn du davon ausgehst, dass deine Buildkonfiguration die kompilierten Dateien in das Verzeichnis dist ausgibt, würdest du die Dateien im Verzeichnis dist auf deinem Webanwendungsserver bereitstellen, wenn alle Tests erfolgreich abgeschlossen wurden.

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

Dieses Beispiel zeigt dir, wie du einen Workflow für ein Node.js-Projekt erstellst, der den Code im Verzeichnis src erstellt und die Tests im Verzeichnis tests ausführt. Du kannst davon ausgehen, dass die Ausführung von npm test einen Code Coverage-Bericht namens code-coverage.html erstellt, der im Verzeichnis output/test/ gespeichert wird.

Der Workflow lädt die Produktionsartefakte im Verzeichnis dist hoch, schließt jedoch alle Markdowndateien aus. Außerdem wird der code-coverage.html-Bericht als weiteres Artefakt hochgeladen.

YAML
name: Node CI

on: [push]

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

Konfigurieren eines benutzerdefinierten Aufbewahrungszeitraums für Artefakte

Du kannst einen benutzerdefinierten Aufbewahrungszeitraum für einzelne Artefakte definieren, die von einem Workflow erstellt wurden. Wenn du einen Workflow zum Erstellen eines neuen Artefakts verwendest, kannst du retention-days mit der upload-artifact-Aktion verwenden. In diesem Beispiel wird veranschaulicht, wie du einen benutzerdefinierten Aufbewahrungszeitraum von 5 Tagen für das Artefakt namens my-artifact festlegst:

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

Der retention-days-Wert darf den vom Repository, der Organisation oder dem Unternehmen festgelegten Aufbewahrungsgrenzwert nicht überschreiten.

Herunterladen von Artefakten während einer Workflowausführung

Du kannst die Aktion actions/download-artifact verwenden, um zuvor hochgeladene Artefakte während einer Workflowausführung herunterzuladen.

Hinweis

Du kannst nur Artefakte in einem Workflow herunterladen, die während derselben Workflowausführung hochgeladen wurden.

Gib den Namen eines Artefaktes an, um ein einzelnes Artefakt herunterzuladen. Wenn du ein Artefakt hochgeladen hast, ohne einen Namen anzugeben, lautet der Standardname artifact.

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

Du kannst auch alle Artefakte in einer Workflowausführung herunterladen, indem du keinen Namen angibst. Dies kann nützlich sein, wenn du mit zahlreichen Artefakten arbeitest.

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

Wenn du die Artefakte aller Workflowausführungen herunterlädst, wird ein Verzeichnis für jedes Artefakt unter Verwendung seines Namens erstellt.

Weitere Informationen zur Syntax findest du in der actions/download-artifact-Aktion auf GitHub Enterprise Server.

Übergeben von Daten zwischen Aufträgen in einem Workflow

Du kannst die Aktionen upload-artifact und download-artifact verwenden, um Daten zwischen Aufträgen in einem Workflow freizugeben. In diesem Beispiel-Workflow wird veranschaulicht, wie Daten zwischen Aufträgen im selben Workflow weitergegeben werden. Weitere Informationen findest du unter sowie den actions/upload-artifact- und download-artifact-Aktionen auf GitHub Enterprise Server.

Von den Artefakten eines vorherigen Auftrags abhängige Aufträge müssen auf den erfolgreichen Abschluss des abhängigen Auftrags warten. Dieser Workflow verwendet das needs-Schlüsselwort, um sicherzustellen, dass job_1, job_2 und job_3 sequenziell ausgeführt werden. job_2 erfordert z. B. job_1 mit der needs: job_1-Syntax.

Auftrag 1 führt die folgenden Schritte durch:

  • Führt eine mathematische Berechnung aus und speichert das Ergebnis in einer Textdatei namens math-homework.txt.
  • Verwendet die upload-artifact-Aktion zum Hochladen der math-homework.txt-Datei mit dem Artefaktnamen homework.

Auftrag 2 verwendet das Ergebnis des vorherigen Auftrags:

  • Lädt das homework endif %}-Artefakt herunter, das im vorherigen Auftrag hochgeladen wurde. Die Aktion download-artifact lädt die Artefakte standardmäßig in das Arbeitsbereichverzeichnis herunter, in dem der Schritt ausgeführt wird. Du kannst den Eingabeparameter path verwenden, um ein anderes Downloadverzeichnis anzugeben.
  • Liest den Wert in der Datei math-homework.txt, führt eine mathematische Berechnung aus, und speichert das Ergebnis erneut in math-homework.txt, wobei der Inhalt überschrieben wird.
  • Lädt die Datei math-homework.txt hoch. Dieser Upload überschreibt das zuvor hochgeladene Artefakt, da sie denselben Namen haben.

Auftrag 3 zeigt das im vorherigen Auftrag hochgeladene Ergebnis an:

  • Lädt das homework-Artefakt.
  • Gibt das Ergebnis der mathematischen Gleichung im Protokoll aus.

Die vollständige, in diesem Workflow-Beispiel durchgeführte mathematische Operation lautet (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@v3
        with:
          name: homework
          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@v3
        with:
          name: homework
      - 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@v3
        with:
          name: homework
          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@v3
        with:
          name: homework
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value

Die Workflowausführung archiviert alle von ihr generierten Artefakte. Weitere Informationen zum Herunterladen archivierter Artefakte findest du unter Herunterladen von Workflowartefakten.