🏓

GitHub ActionsのEnvironmentsごとに実行 OR ブランチで条件分岐

2024/04/15に公開

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