📖

GitHub Actionsでジョブ間で値を共有する方法

2021/11/22に公開

はじめに

GitHubActionsのワークフローにて、ジョブにて取得した値を後続のジョブに渡したい要件があったので、ジョブ間で値を共有する方法を調査したメモです。

ジョブとは?

https://docs.github.com/ja/actions/learn-github-actions/understanding-github-actions

ジョブ

ジョブは、同じランナーで実行される一連のステップです。 デフォルトでは、複数のジョブを含むワークフローは、それらのジョブを並行して実行します。

ランナー

ランナーは、GitHub Actionsランナーアプリケーションがインストールされているサーバーです。 GitHub がホストするランナーを使用することも、自分でランナーをホストすることもできます。 ランナーは、使用可能なジョブをリッスンし、一度に 1 つのジョブを実行し、進行状況、ログ、および結果を GitHub に返します。

ジョブ間で値を共有するということはサーバー間で情報の受け渡しをするということ。

コンテキストとは?

https://docs.github.com/ja/actions/learn-github-actions/contexts#determining-when-to-use-contexts

GitHub Actionsは、コンテキストと呼ばれる変数の集合と、デフォルトの環境変数と呼ばれる同様の変数の集合を含みます。

デフォルトの環境変数

これらの変数は、ジョブを実行しているランナー上にのみ存在します。

https://docs.github.com/ja/actions/learn-github-actions/environment-variables#default-environment-variables

コンテキスト

ほとんどのコンテキストはワークフローの任意の場所で利用できます。これは、デフォルトの環境変数が利用できない場所も含みます。

コンテキストを使うことでジョブ間での値の共有ができる。

needsコンテキスト

https://docs.github.com/ja/actions/learn-github-actions/contexts#needs-context

needsコンテキストは、現在のジョブの依存関係として定義されたすべてのジョブからの出力を含みます。

ジョブから値を出力する方法は?

https://docs.github.com/ja/actions/learn-github-actions/workflow-syntax-for-github-actions#

jobs.<job_id>.outputs

ジョブからの出力のmapです。 ジョブの出力は、そのジョブに依存しているすべての下流のジョブから利用できます。 ジョブの依存関係の定義に関する詳しい情報についてはjobs.<job_id>.needsを参照してください。

サンプル

jobs:
  job1:
    runs-on: ubuntu-latest
    # ステップの出力をジョブの出力にマップする
    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}}

Discussion