💡

GithubActionsで.envファイルを作成する方法

2024/07/11に公開

TL;DR

  1. echo コマンドを使う方法
  2. Environment Variables を使う方法
  3. secrets を使う方法
  4. Config File を使う方法

背景

NextjsのアプリケーションをGithubActionsでビルドして、ECRにpushするworkflowを書いてる時に、NEXT_PUBLIC系の環境変数、どうやって渡そっかなーって考えてた時に、一応場合によっては隠しとくのがbetterだよなーと思って方法探したときに何個かパターンあったので備忘として。

中身が大してクリティカルなものでもない場合は、.env.localとかをGit管理に載せちゃって、一緒にbuildかけちゃう感じでも良いと思う。

ただ場合によっては外に見せたくないものもあると思うので、その時の選択肢として。

確認方法

actを使います。

https://github.com/nektos/act

1. echo コマンドを使う方法

.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

2. Environment Variables を使う方法

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

3. secrets を使う方法

https://docs.github.com/ja/actions/security-guides/using-secrets-in-github-actions

GitHub Secrets に保存された値を .env ファイルに書き出す方法です。これにより、セキュアに環境変数を管理できます。

3-1. 個別設定パターン

https://zenn.dev/big_tanukiudon/articles/fc1a2ff562ce3d

まず、リポジトリの 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. 複数変数一括設定パターン

https://tepci.me/blog/programming/github-actions-create-dotenv/

1つの変数の中にまとめて複数の環境変数を記載して、そのまま読み込んで複数環境変数を設定するパターン。

3-3. ライブラリ使うパターン

https://github.com/marketplace/actions/create-env-file

4. Config File を使う方法

別の設定ファイルを使って、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 ファイルを作成できます。プロジェクトの要件に応じて、適切な方法を選んでください。

91works Tech Blog

Discussion