.envファイルは.gitignoreに含むのが基本なので、GitHub Actionsでリリースやデプロイを行うときに、どうやって環境変数を設定するか悩むかと思います。
下のように、1つ1つ参照するのもいいですが、
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
たとえばLaravelの.envなど大量の環境変数が必要なときに大変ですよね。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
ならばsecretsに.envの内容をぶち込んでそのまま.envを生成してしまおうというのが今回の内容です。
まず、secretsにDOTENVという名前で、値に.envの内容をそのままコピペしてください。
DOTENV_STGとDOTENV_PRDなどに分けて環境ごとで切り替えてもいいですね。
あとはこれをGitHubActionsで.envに書き出します。.envを生成する場所のパスは必要に応じて変更してください。
$GITHUB_WORKSPACEはデフォルトで使える環境変数で、リポジトリのルートディレクトリだと思えば良いと思います。
- name: Create .env file
run: |
echo "${{ secrets.DOTENV_STG }}" > $GITHUB_WORKSPACE/.env
この方法をつかって、AWSのElastic Beanstalkへデプロイ成功したときの例です。
name: Stg deployment from Github to AWS EB
on:
push:
branches: stg
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Get timestamp
uses: gerred/actions/current-time@master
id: current-time
- name: Run string replace
uses: frabert/replace-string-action@master
id: format-time
with:
pattern: '[:\.]+'
string: "${{ steps.current-time.outputs.time }}"
replace-with: '-'
flags: 'g'
- name: Create .env file
run: |
echo "${{ secrets.DOTENV_STG }}" > $GITHUB_WORKSPACE/www/.env
- name: Generate deployment package
run: zip -r deploy.zip ./{*,.[!.]*}
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v16
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: xxxxxxxxx
environment_name: ooooooo
version_label: "XXXXXXXX-${{ steps.format-time.outputs.replaced }}"
region: ap-northeast-1
deployment_package: deploy.zip
コメント