# 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](/de/enterprise-server@3.22/actions/concepts/workflows-and-actions/workflow-artifacts).

## Build- und Test-Artefakte 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 finden Sie in 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.

```text
|-- 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 copy
name: Node CI

on: [push]

jobs:
  build_and_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
      - 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 copy
  - 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`](https://github.com/actions/download-artifact) verwenden, um zuvor hochgeladene Artefakte während einer Workflowausführung herunterzuladen.

> \[!NOTE]
> Sie können 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`.

```yaml
- 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.

```yaml
- 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 finden Sie bei der `actions/download-artifact` 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 finden Sie unter den Aktionen `actions/upload-artifact` sowie den `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, um die `math-homework.txt` Datei mit dem Artefaktnamen`homework` hochzuladen.

Auftrag 2 verwendet das Ergebnis des vorherigen Auftrags:

* Lädt das `homework` im vorherigen Auftrag hochgeladene Artefakt herunter. 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 beide denselben Namen haben.

Auftrag 3 zeigt das im vorherigen Auftrag hochgeladene Ergebnis an:

* Lädt das `homework` Artefakt.
* Gibt das Ergebnis der mathematischen Gleichung in das Protokoll aus.

Die vollständige, in diesem Workflow-Beispiel durchgeführte mathematische Operation lautet `(3 + 7) x 9 = 90`.

```yaml copy
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](/de/enterprise-server@3.22/actions/how-tos/manage-workflow-runs/download-workflow-artifacts).