GithubActionsで.envファイルを作成する方法
TL;DR
-
echo
コマンドを使う方法 -
Environment Variables
を使う方法 -
secrets
を使う方法 -
Config File
を使う方法
背景
NextjsのアプリケーションをGithubActionsでビルドして、ECRにpushするworkflowを書いてる時に、NEXT_PUBLIC系の環境変数、どうやって渡そっかなーって考えてた時に、一応場合によっては隠しとくのがbetterだよなーと思って方法探したときに何個かパターンあったので備忘として。
中身が大してクリティカルなものでもない場合は、.env.localとかをGit管理に載せちゃって、一緒にbuildかけちゃう感じでも良いと思う。
ただ場合によっては外に見せたくないものもあると思うので、その時の選択肢として。
確認方法
actを使います。
echo
コマンドを使う方法
1. .github/workflows
ディレクトリ内のワークフローファイルに、以下のようなステップを追加します。echo
コマンドを使って .env
ファイルを作成します。
name: Create .env file
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Create .env file
run: echo "VAR_NAME=VAR_VALUE" > .env
- name: Show .env file
run: |
echo '----------------------------------'
cat .env
echo '----------------------------------'
$ act --container-architecture linux/amd64 -W .github/workflows/sample.yml
[Create .env file/build] ⭐ Run Main Show .env file
[Create .env file/build] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/2] user= workdir=
| ----------------------------------
| VAR_NAME=VAR_VALUE
| ----------------------------------
[Create .env file/build] ✅ Success - Main Show .env file
Environment Variables
を使う方法
2. GitHub Actions の env
オプションを使って環境変数を定義し、それを .env
ファイルに書き出します。
name: Create .env file
on: [push]
jobs:
build:
runs-on: ubuntu-latest
env:
VAR_NAME: VAR_VALUE
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Create .env file
run: |
echo "VAR_NAME=${VAR_NAME}" > .env
- name: Show .env file
run: |
echo '----------------------------------'
cat .env
echo '----------------------------------'
$ act --container-architecture linux/amd64 -W .github/workflows/sample.yml
[Create .env file/build] ⭐ Run Main Show .env file
[Create .env file/build] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/2] user= workdir=
| ----------------------------------
| VAR_NAME=VAR_VALUE
| ----------------------------------
[Create .env file/build] ✅ Success - Main Show .env file
secrets
を使う方法
3.
GitHub Secrets に保存された値を .env
ファイルに書き出す方法です。これにより、セキュアに環境変数を管理できます。
3-1. 個別設定パターン
まず、リポジトリの Settings
タブで Secrets
を設定します。例えば、MY_SECRET
というシークレットを作成します。
name: Create .env file
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Create .env file
run: echo "MY_SECRET=${{ secrets.MY_SECRET }}" > .env
- name: Show .env file
run: |
echo '----------------------------------'
cat .env
echo '----------------------------------'
$ act --container-architecture linux/amd64 -s VAR_NAME=VAR_VALUE -W .github/workflows/sample.yml
[Create .env file/build] ⭐ Run Main Show .env file
[Create .env file/build] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/2] user= workdir=
| ----------------------------------
| VAR_NAME=***
| ----------------------------------
[Create .env file/build] ✅ Success - Main Show .env file
3-2. 複数変数一括設定パターン
1つの変数の中にまとめて複数の環境変数を記載して、そのまま読み込んで複数環境変数を設定するパターン。
3-3. ライブラリ使うパターン
Config File
を使う方法
4. 別の設定ファイルを使って、GitHub Actions のステップで .env
ファイルを作成する方法です。
例えば、env.template
ファイルをリポジトリに追加し、以下のようにします。
# env.template
VAR_NAME=VAR_VALUE
ワークフローでこのテンプレートファイルを .env
ファイルにコピーします。
name: Create .env file
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Copy env template
run: cp env.template .env
$ act --container-architecture linux/amd64 -W .github/workflows/sample.yml
[Create .env file/build] ⭐ Run Main Show .env file
[Create .env file/build] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/2] user= workdir=
| ----------------------------------
| VAR_NAME=VAR_VALUE
| ----------------------------------
[Create .env file/build] ✅ Success - Main Show .env file
まとめ
以上の方法で、GitHub Actions で .env
ファイルを作成できます。プロジェクトの要件に応じて、適切な方法を選んでください。
Discussion