LoginSignup
49
25

More than 3 years have passed since last update.

GitHub Actionsで複数Job間でデータを共有する方法 - Job outputs

Last updated at Posted at 2021-03-30

GitHub ActionsはJobごとに別々のGitHub Actions Runnerで実行され、つまり別々のOSで実行されるのでJob間でデータを共有するには工夫が必要となる。

解決策の1つにArtifactsのUpload/Downloadがあって、少々面倒ではあるが、他に手っ取り早い方法もなさそうだしこれでよいだろうという理解だった。 残念ながら今のところGitHub ActionsにはJob間で共有可能なグローバルスコープの変数はなく・・・

ArtifactsのUpload/DownloadによるJob間のデータ共有する方法
共有したいデータをファイルに書き出しactions/upload-artifactでArtifactとしてアップロードし、別のJobでactions/download-artifactを使ってそのArtifactを読み込みデータを取得する
詳しくはこちらを参照ください - Passing data between jobs in a workflow

ところが、こちらのStackoverflow投稿でもっと手軽な良い方法が紹介されていた。それがjobs.<jobs_id>.outputs。2020年4月にアナウンスされた機能のようだ。

公式ページには次のように説明されている。

A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job. For more information on defining job dependencies, see jobs..needs.
Job outputs are strings, and job outputs containing expressions are evaluated on the runner at the end of each job. Outputs containing secrets are redacted on the runner and not sent to GitHub Actions.

つまり、あるJobにおける処理結果をjobs.<jobs_id>.outputsでマッピングすることができて、その後のJobでそいつを参照できるのだ。 ArtifactsのUpload/Downloadのようにわざわざファイルのアップ・ダウンロードする必要もなく、手軽で直感的。

サンプルをそのまま抜粋するが、後続のjob2ではjob1のマッピングされた出力結果を${{needs.job1.outputs.output1}}で参照している。

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 "::set-output name=test::hello"
    - id: step2
      run: echo "::set-output name=test::world"
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
    - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}

ref: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs

簡単なテキストデータであればこれでよいのではないだろうか

49
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
25