Skip to main content

Übergeben von Informationen zwischen Jobs

Sie können Ausgaben definieren, um Informationen von einem Job an einen anderen zu übergeben.

Note

Auf GitHub gehostete Runner werden aktuell nicht auf GitHub Enterprise Server unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.

Übersicht

Du kannst jobs.<job_id>.outputs verwenden, um eine map von Ausgaben für einen Auftrag zu erstellen. Ausgaben eines Jobs stehen allen nachgelagerten Jobs zur Verfügung, die von diesem Job abhängen. Weitere Informationen zum Definieren von Auftragsabhängigkeiten findest du unter jobs.<job_id>.needs.

Ausgaben sind Unicode-Zeichenfolgen und können maximal 1 MB groß sein. Die Gesamtanzahl aller Ausgaben in einer Workflowausführung kann maximal 50 MB betragen.

Ausgaben von Aufträgen, die Ausdrücke enthalten, werden am Ende jedes Auftrags auf dem Runner ausgewertet. Ausgaben, die Geheimnisse enthalten, werden auf dem Runner zensiert und nicht an GitHub Actions gesendet.

Wenn eine Ausgabe übersprungen wird, da sie möglicherweise ein Geheimnis enthält, wird die folgende Warnmeldung angezeigt: „Ausgabe überspringen{output.Key}, da sie ein Geheimnis enthalten kann.“ Weitere Informationen zum Umgang mit Geheimnissen finden Sie im Beispiel: Maskieren und Übergeben eines Geheimnisses zwischen Aufträgen oder Workflows.

Um Auftragsausgaben in einem abhängigen Auftrag zu verwenden, kannst du den needs-Kontext verwenden. Weitere Informationen findest du unter Zugreifen auf kontextbezogene Informationen zu Workflowausführungen.

Beispiel: Definieren von Ausgaben für einen Auftrag

jobs:
  job1:
    runs-on: ubuntu-latest
    # Map a step output to a job output
    outputs:
      output1: ${{ steps.step1.outputs.test }}
      output2: ${{ steps.step2.outputs.test }}
    steps:
      - id: step1
        run: echo "test=hello" >> "$GITHUB_OUTPUT"
      - id: step2
        run: echo "test=world" >> "$GITHUB_OUTPUT"
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - env:
          OUTPUT1: ${{needs.job1.outputs.output1}}
          OUTPUT2: ${{needs.job1.outputs.output2}}
        run: echo "$OUTPUT1 $OUTPUT2"

Verwenden von Auftragsausgaben in einem Matrixauftrag

Matrizen können verwendet werden, um mehrere Ausgaben unterschiedlicher Namen zu generieren. Bei Verwendung einer Matrix werden Auftragsausgaben aus allen Aufträgen innerhalb der Matrix kombiniert.

jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      output_1: ${{ steps.gen_output.outputs.output_1 }}
      output_2: ${{ steps.gen_output.outputs.output_2 }}
      output_3: ${{ steps.gen_output.outputs.output_3 }}
    strategy:
      matrix:
        version: [1, 2, 3]
    steps:
      - name: Generate output
        id: gen_output
        run: |
          version="${{ matrix.version }}"
          echo "output_${version}=${version}" >> "$GITHUB_OUTPUT"
  job2:
    runs-on: ubuntu-latest
    needs: [job1]
    steps:
      # Will show
      # {
      #   "output_1": "1",
      #   "output_2": "2",
      #   "output_3": "3"
      # }
      - run: echo '${{ toJSON(needs.job1.outputs) }}'

Warning

Aktionen garantieren keine Reihenfolge für die Ausführung der Matrixaufträge. Achte darauf, dass der Ausgabename eindeutig ist, sonst setzt der letzte ausgeführte Matrixauftrag den Ausgabewert außer Kraft.