🏓
GitHub ActionsのEnvironmentsごとに実行 OR ブランチで条件分岐
GitHub ActionsにはEnvironmentsという便利機能があります。Environmentsごとにシークレットや変数を持つことができます。つまりDevelopment・staging・Productionそれぞれに必要な環境変数を適宜使い分けることができるということです。
今回は、GitHub ActionsのEnvironmentsを2つの使い方を紹介します。
Environmentsごとに実行
一度のアクションで複数のEnvironmentsごとに実行したい場合です。例えば定期ジョブで毎日全環境の何等かをしたい時に使います。
on:
schedule:
- cron: '0 0 * * *'
jobs:
foo-job:
runs-on: ubuntu-latest
strategy:
matrix:
environment: [ development, staging, production ]
environment:
name: ${{ matrix.environment }}
steps:
- name: Echo Environment
run: echo "Deploying to ${{ matrix.environment }}"
この定義だと3環境のジョブが並列で実行されます。
ブランチで条件分岐
特定のブランチにpushされたら、指定のEnvironmentsにするというような場合に使います。
on:
push:
branches:
- release
- staging
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
environment: |-
${{
github.ref_name == 'release' && 'production'
|| github.ref_name == 'staging' && 'staging'
|| 'development'
}}
これはブランチが release
の場合は production
環境、 staging
の場合は staging
環境、それ以外は development
環境という指定です。(push.branchesで main
指定しているので実質 main
ですが)
Environmentとブランチの組み合わせを制限する
GitHubリポジトリの設定で、指定Environmentを利用するブランチを指定し制限することができます。
releaseブランチのみ許可する設定例
この設定をしておくことで、万が一GitHub Actionsの設定を間違えてしまっても秘匿情報の取得をしっぱいさせることができます。設定しておいたほうが良いでしょう。
Discussion