(主に)教育上の理由から、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-state
やset-output
ワークフロー作成者の意図しないワークフローコマンドを回避するために、新しい環境ファイルセット状態と出力を管理します。
ジェシー・アデルマン追加するコメント:
これは、静的な文字列以外のものにはうまく機能しないようです。
たとえば、ステップの複数行テキスト出力 (pytest
または同様のものを実行しているとします) を取得し、その出力を別のジョブで使用するにはどうすればよいでしょうか。