GitHub Actionsで言う環境変数とはそこから実行されるstepにとってなんなのか?

GitHub Actionsから「環境変数」が渡らない

やろうとしていたことは以下の図のような感じ。

  • GitHub Actions で env をセット
  • Actions から起動した sh script へは変数は渡ることは確認済み
  • sh script から rake task を起こし、さらにそこから起こす vite ではこの変数を読み取れない

渡っていたのはなんなんすかね?

では、上図の sh script で読み取れていた変数はいったいなんなのか? これが Un*x 的な意味の環境変数であれば、サブプロセスの Rake ( Ruby ) や Vite ( Node.js / esbuild ) にも伝わるはず。

しかし実際にはサブプロセスでは変数は利用できなかった。したがって Un*x 的な意味での環境変数ではないらしい。

じゃあ何か?はちょっとよく分かんないすね。(なんなんすかね? てかどうやって反映してるの?)

ではどう考えて対処するのがよいか

  1. 変数は直接起動するものまでしか伝わらない
  2. したがってサブプロセスを起動する際に明示的に環境変数として渡す

が正解なのだろう。つまり、例えば sh script から何らかのプロセスを起動する場合は

  • GitHub Actions上でrunで実行されるsh上で
  • 明示的に VAR1=val1 VAR2=val2 command のように環境変数として渡してあげるとよい

ということになる。

おまけ

GitHub Actions で環境変数と呼ばれるものの種類。

  • workflow レベル
  • job レベル
  • step レベル

の三つのスコープがある。スコープはあくまで Workflow Syntax 上のスコープ。

Store information in variables - GitHub Docs

GitHub Actions で環境変数の及ぶ範囲というとまずこのスコープの話が引っかかってしまい、そこから実行するものに対してどうなのかという情報を見つけるのはかなり難しそうだ。

More