Open3
GitHub Actions のジョブ内での環境変数設定(Environment Files)
GitHub Action のステップから環境変数を変更する方法。
以前は set-output
を使う方法だったのだが、これは deprecated になる(set-state
も同様にdeprecdate なのだがこの scrap ではそちらは触れない)。
今後は Environment File (ファイル名は $GITHUB_ENV
に設定されている)へ NAME=VAUE
のような文字列を書き込む(追加する)ことで設定するようになる( .env
的なファイルへ組み立てるイメージ)。
なお、環境変数と書いているが、もう少し具体的に書くと環境変数が直接更新されるのではなく、env
コンテキストが更新される。この辺の変数の扱いについては下記を参照(本筋とは関係ないが、vars
コンテキストも使えるようになったもよう)。
設定するためのコマンドの文法
基本は前述の通り。
1つうれしいのは複数行の内容を設定する場合にヒアドキュメント的なものが使えること(的なものなので実際は結構違う)。
具体的には以下のような文字列をファイルへ書き込む。このとき 複数回 に分割して書き込んでもよい。
{name}<<{delimiter}
{value}
{delimiter}
steps:
- name: Set the value in bash
id: step_one
run: |
echo 'JSON_RESPONSE<<EOF' >> $GITHUB_ENV
curl https://example.com >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
上記例の場合だと
- 最初の
echo
で環境変数名とデリミターの指定を$GITHUB_ENV
が指すファイルへ書き込む -
curl
を実行し結果を$GITHUB_ENV
が指すファイルへ書き込む - 最後の
echo
でデリミターを$GITHUB_ENV
が指すファイル書き込む、これで環境変数が設定されることになる
試してみる
テスト用のリポジトリを作った。
わかったこと。
- (
$GITHUB_ENV
が指している)ファイルの内容でenv
コンテキストが更新されるのはステップが切り替わるとき- よって、同一ステップ内では環境変数は変更されない
- ファイルの内容は更新後(ステップ切り替え後)は空になる
- ワークフローで設定した環境変数も上書きできる
- 複数行の値の指定は
set-output
のときよりもやりやすくなった- 正しくないデリミターの使い方はエラーになる
-
$GITHUB_ENV
は上書きできない- まぁできたらヤバイよね
- 上書きしてもエラーにはならない、無視されるだけ