GitHub Action の新しいジョブで以前のジョブの出力を使用する 質問する

GitHub Action の新しいジョブで以前のジョブの出力を使用する 質問する

(主に)教育上の理由から、GitHub アクションでこのワークフローを実行しようとしています。

name: "We �� Perl"
on:
  issues:
    types: [opened, edited, milestoned]

jobs:
  seasonal_greetings:
    runs-on: windows-latest
    steps:
      - name: Maybe greet
        id: maybe-greet
        env:
          HEY: "Hey you!"
          GREETING: "Merry Xmas to you too!"
          BODY: ${{ github.event.issue.body }}
        run: |
          $output=(perl -e 'print ($ENV{BODY} =~ /Merry/)?$ENV{GREETING}:$ENV{HEY};')
          Write-Output "::set-output name=GREET::$output"
  produce_comment:
    name: Respond to issue
    runs-on: ubuntu-latest
    steps:
      - name: Dump job context
        env:
          JOB_CONTEXT: ${{ jobs.maybe-greet.steps.id }}
        run: echo "$JOB_CONTEXT"

異なるコンテキスト(オペレーティングシステム)を使用するため、2つの異なるジョブが必要ですが、最初のジョブのステップの出力を2番目のジョブに渡す必要があります。jobs見つかったコンテキストのいくつかの組み合わせを試しています。ここしかし、それを実行する方法はないようです。どうやら、これはjobs実際にはコンテキストを持たない YAML 変数の名前にすぎず、コンテキストにはjob成功または失敗のみが含まれています。何かアイデアはありますか?

ベストアンサー1

GitHub Actions: 新しいワークフロー機能2020年4月から、あなたのケースに役立つかもしれません(以前のジョブからのステップ出力を参照するため)

ジョブ出力

後続のジョブに渡す出力のセットを指定し、ニーズ コンテキストからそれらの値にアクセスできます。

見るドキュメンテーション:

jobs.<jobs_id>.outputs

ジョブの出力マップ

ジョブ出力は、このジョブに依存するすべての下流ジョブで利用できます。
ジョブ依存関係の定義の詳細については、jobs.<job_id>.needs

ジョブ出力は文字列であり、式を含むジョブ出力は各ジョブの終了時にランナーで評価されます。シークレットを含む出力はランナーで編集され、GitHub Actions に送信されません。

依存ジョブでジョブ出力を使用するには、needsコンテキストを使用できます。
詳細については、「GitHub Actions のコンテキストと式の構文。

依存ジョブでジョブ出力を使用するには、needs コンテキストを使用できます。

例:

jobs:
  job1:
    runs-on: ubuntu-latest
    # Expose step outputs as job outputs
    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:
    - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}

の使用に注意してください$GITHUB_OUTPUT、代わりに古い::set-outputバージョン(2022年10月)は廃止予定

信頼できないログデータの使用set-stateset-outputワークフロー作成者の意図しないワークフローコマンドを回避するために、新しい環境ファイルセット状態と出力を管理します。


ジェシー・アデルマン追加するコメント:

これは、静的な文字列以外のものにはうまく機能しないようです。
たとえば、ステップの複数行テキスト出力 (pytestまたは同様のものを実行しているとします) を取得し、その出力を別のジョブで使用するにはどうすればよいでしょうか。

おすすめ記事