Skip to main content

Passing information between jobs

You can define outputs to pass information from one job to another.

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

Overview

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.

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) }}'
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.