ノート: GitHub Actionsは現在GitHub AEでベータです。
環境変数について
GitHubは、ワークフローの実行におけるどのステップでも使用できる、デフォルトの環境変数を設定します。 環境変数では、大文字小文字は区別されます。 アクションあるいはステップ内で実行されるコマンドは、環境変数を作成、読み取り、変更することができます。
カスタムの環境変数を設定するには、ワークフローファイル中でその変数を指定しなければなりません。 jobs.<job_id>.steps[*].env
、jobs.<job_id>.env
、env
といったキーワードを使って、ステップ、ジョブ、あるいはワークフロー全体の環境変数を定義できます。 詳しい情報については、「GitHubのワークフロー構文」を参照してください。
jobs:
weekday_job:
runs-on: ubuntu-latest
env:
DAY_OF_WEEK: Mon
steps:
- name: "Hello world when it's Monday"
if: ${{ env.DAY_OF_WEEK == 'Mon' }}
run: echo "Hello $FIRST_NAME $middle_name $Last_Name, today is Monday!"
env:
FIRST_NAME: Mona
middle_name: The
Last_Name: Octocat
環境変数の値をワークフローファイル内で使うには、env
コンテキストを使わなければなりません。 環境変数の値をランナー内で使いたいなら、ランナーのオペレーティングシステムで環境変数を読む通常の方法が使えます。
ワークフローファイルのrun
キーを使って環境変数をランナーのオペレーティングシステム内から読む場合(上の例のように)、ジョブがランナーに送られた後に変数はランナーのオペレーティングシステム内で置き換えられます。 ワークフローファイルの他の部分では、環境変数を読むためにenv
コンテキストを使わなければなりません。これは、ワークフローのキー(if
など)で、ワークフローがランナーに送られる前に変数が置き換えられなければならないためです。
GITHUB_ENV
環境ファイル を使用して、ワークフローの次の手順で使用できる環境変数を設定することもできます。 環境ファイル は、アクションによって直接使用することも、run
キーワードを使用してワークフローファイルのシェルコマンドとして使用することもできます。 詳しい情報については「GitHub Actionsのワークフローコマンド」を参照してください。
デフォルトの環境変数
アクションでは、ファイルシステムにアクセスするとき、ハードコードされたファイルパスを使うのではなく環境変数を使用することを強くお勧めします。 GitHubは、すべてのランナー環境でアクションが使用する環境変数を設定します。
環境変数 | 説明 |
---|---|
CI | 常にtrue に設定されます。 |
GITHUB_WORKFLOW | ワークフローの名前。 |
GITHUB_RUN_ID | リポジトリ内でユニークな各実行に対する番号。 この番号は、ワークフローの実行をやり直しても変化しません、 |
GITHUB_RUN_NUMBER | リポジトリ内の特定のワークフローの各実行に対するユニークな番号。 この番号は、ワークフローの最初の実行時に1で始まり、新たな実行ごとにインクリメントされます。 この番号は、ワークフローの実行をやり直しても変化しません、 |
GITHUB_JOB | The job_id of the current job. |
GITHUB_ACTION | アクションの一意の識別子 (id )。 |
GITHUB_ACTIONS | GitHub Actionsがワークフローを実行しているときは常にtrue に設定されます。 この変数は、テストがローカルで実行されているときと、GitHub Actionsによって実行されているときを区別するために利用できます。 |
GITHUB_ACTOR | ワークフローを開始するユーザまたはアプリの名前。 octocat などです。 |
GITHUB_REPOSITORY | 所有者およびリポジトリの名前。 octocat/Hello-World などです。 |
GITHUB_EVENT_NAME | ワークフローをトリガーしたwebhookイベントの名前。 |
GITHUB_EVENT_PATH | 完了したwebhookイベントペイロードのファイルのパス。 /github/workflow/event.json などです。 |
GITHUB_WORKSPACE | GitHubワークスペースディレクトリのパス。 ワークフローで actions/checkout アクションを使用する場合、ワークスペースディレクトリはリポジトリのコピーです。 actions/checkout アクションを使用していない場合、ディレクトリは空となります。 たとえば、/home/runner/work/my-repo-name/my-repo-name となります。 |
GITHUB_SHA | ワークフローをトリガーしたコミットSHA。 たとえば、ffac537e6cbbf934b08745a378932722df287a53 です。 |
GITHUB_REF | ワークフローをトリガーしたブランチまたはタグref。 たとえば、refs/heads/feature-branch-1 です。 イベントタイプのブランチもタグも利用できない場合、変数は存在しません。 |
GITHUB_HEAD_REF | Pull Requestのイベントに対してのみ設定されます。 headブランチの名前です。 |
GITHUB_BASE_REF | Pull Requestのイベントに対してのみ設定されます。 ベースブランチの名前です。 |
GITHUB_SERVER_URL | GitHub AE サーバーの URL を返します。 For example: https://github.com . |
GITHUB_API_URL | API URL を返します。 For example: https://api.github.com . |
GITHUB_GRAPHQL_URL | グラフ QL API の URL を返します。 For example: https://api.github.com/graphql . |
ノート: ワークフローの実行のURLをジョブの中から使う必要がある場合は、$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
というようにこれらの環境変数を組み合わせることができます。
デフォルトの環境変数を使う場合とコンテキストを使う場合の判断
GitHub Actionsは、コンテキストと呼ばれる変数の集合と、デフォルトの環境変数と呼ばれる同様の変数の集合を含みます。 これらの変数は、ワークフロー中の様々な場所で利用されることを意図したものです。
- デフォルトの環境変数: これらの変数は、ジョブを実行しているランナー上にのみ存在します。 詳しい情報については、「デフォルトの環境変数」を参照してください。
- コンテキスト: ほとんどのコンテキストはワークフローの任意の場所で利用できます。これは、デフォルトの環境変数が利用できない場所も含みます。 たとえば、式の付いたコンテキストを使って、ジョブが実行のためにランナーにまわされる前に初期の処理を行うことができます。これによって、ステップを実行すべきかを判断するために条件の
if
キーワード付きのコンテキストが利用できるようになります。 ジョブが実行されると、runner.os
といったように、コンテキスト変数をジョブを実行しているランナーから取り出すこともできます。 詳細については、「コンテキスト」を参照してください。
以下の例は、様々な種類の環境変数をジョブの中で合わせて利用できることを示しています。
name: CI
on: push
jobs:
prod-check:
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
この例では、if
文がgithub.ref
コンテキストをチェックして現在のブランチ名を判断しています。その名前がrefs/heads/main
であれば、以降のステップが実行されます。 このif
チェックがGitHub Actionsで処理されたなら、その結果がtrue
の場合にのみジョブがランナーに送信されます。 ジョブがランナーに送信されると、ステップが実行され、環境変数の$GITHUB_REF
をランナーから参照します。
環境変数の命名規則
ノート: GitHubは環境変数のプレフィックスのGITHUB_
を、GitHubの内部的な利用のために予約しています。 GITHUB_
プレフィックスを使用して環境変数またはシークレットを設定すると、エラーになります。
ファイルシステム上の場所を指すように設定した新しい環境変数がある場合は、_PATH
サフィックスを指定する必要があります。 デフォルトの変数HOME
とGITHUB_WORKSPACE
は、「home」および「workspace」という言葉で最初から場所であることがわかっているため、この規則の例外です。