7
1

GitHub Actions のワークフロー内で環境変数を参照する時は Context で統一した方が混乱しない

Last updated at Posted at 2022-10-28

利用者からの input 情報を Context 参照する場合はスクリプトインジェクション対策として中間環境変数を利用してください。
https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable

GitHub Actionsのワークフローを作成している時に環境変数を参照したいことがよくあります。GitHub Actionsのワークフローから環境変数を参照する場合はshellと同じように$ENVと記述する方法とGitHub Actions独自に存在するContexを使って${{ env.ENV }} と記述する方法があります。どちらを使えば良いか個人的にはContext記法で統一した方が混乱しないなと思ったのでその理由を記載します。

$ENVの記法はjobs.<job_id>.steps[*].run内でしか使えない

$ENVはshellでの記法なのでshellのコマンドラインを実行できるjobs.<job_id>.steps[*].run内でしか使えません。run以外の箇所に記載しても環境変数が展開されずそのままの文字で解釈されます。

name: test
on:
  push:
    branches:
      - 'test'

jobs:
  env-test:
    runs-on: ubuntu-latest
    env:
      HOGE: hoge
    steps:
      - name: set FUGA
        run: |
          echo 'FUGA=fuga' >> $GITHUB_ENV
      - name: echo test
        run: |
          echo $HOGE
          echo $PIYO
        env:
          PIYO: $FUGA

出力

hoge
$FUGA

env$FUGAを指定しましたが環境変数が展開されず$FUGAのまま出力されてしまいました。

${{ env.ENV }}であればどこでも環境変数が参照できる

Context記法であればrun以外の箇所でも環境変数を参照できます。

name: test
on:
  push:
    branches:
      - 'test'

jobs:
  env-test:
    runs-on: ubuntu-latest
    env:
      HOGE: hoge
    steps:
      - name: set FUGA
        run: |
          echo 'FUGA=fuga' >> $GITHUB_ENV
      - name: echo test
        run: |
          echo $HOGE
          echo ${{ env.HOGE }}
          echo $PIYO
        env:
          PIYO: ${{ env.FUGA }}

出力

hoge
hoge
fuga

runenvでContext記法による環境変数参照を記載しましたが、どちらも値が展開されて出力されました。

おわりに

よくshell記法での環境変数参照をrun以外でも書いちゃうことがあったので、どこで使用しても環境変数参照できるContext記法で統一した方が混乱しないなと思いました。

7
1
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
7
1