【Github】Github Actions ~ 設定値を切り替えることを考える ~

■ はじめに

Github Actions で、例えば、

https://dk521123.hatenablog.com/entry/2020/04/16/113816

でやったように、
Dev/Stage/Prodなどで設定値が変更する必要があるので
どう実装していくかを考える

目次

案1:workflow_dispatch + inputs で切り替える
案2:ファイルを分ける + workflow_call (Reusable workflow) を使う
案3:ブランチ + if / GITHUB_ENV / OUTPUT で切り替える
案4:設定ファイルを使う

案1:workflow_dispatch + inputs で切り替える

* workflow_dispatch (手動実行) と inputs (入力値) で切り替えを実現する
 => 詳細は、以下の関連記事を参照のこと

Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128

サンプル

on:
  workflow_dispatch:
    inputs:
      Env:
        required: true
        type: choice
        options:
        - dev
        - stage
        - prod

jobs:
  sample-job:
    runs-on: ubuntu-latest
    env:
      Env: ${{ inputs.env }}
    steps:
      - name: Show env
        run: echo Result: Env - ${{ env.Env }}

案2:ファイルを分ける + workflow_call (Reusable workflow) を使う

[1] 例えば、以下のように環境ごとにファイルを分ける
 + dev-workflow.yml
 + stage-workflow.yml
 + prod-workflow.yml

[2] 共通して使える処理は、例えば
 workflow_call (再利用可能なワークフロー。Reusable workflow)を使う

Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546

 => もしくは、共通処理をシェルスクリプト化してもいいかも。

Github Actions ~ 外部シェルスクリプト実行 ~
https://dk521123.hatenablog.com/entry/2024/01/19/003044

案3:ブランチ + if / GITHUB_ENV / OUTPUT で切り替える

[1] 例えば、以下のようにブランチ名で切り替える

 * master => prod
 * release/** => stage
 * develop => dev

[2] その他の設定値について、if + GITHUB_ENV で切り替える
 => Job間で跨ぐ場合は、+αとして「GITHUB_OUTPUT」を使う

サンプル

name: CI

on:
  push:
    branches:
      - develop
      - 'releases/**'

jobs:
  sample-job1:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # For Prod
      - id: set-params-for-prod
        name: Set parameters for Production
        if: ${{ github.ref == 'master' }}
        env:
          PROD_ENV_NAME: prod
          PROD_S3_NAME: your-s3-prod-name
        run: |
          echo "ENV=${{ env.PROD_ENV_NAME }}" >> $GITHUB_ENV
          echo "S3_NAME=${{ env.PROD_S3_NAME }}" >> $GITHUB_ENV
      # For Stage
      - id: set-params-for-stage
        name: Set parameters for Staging
        if: ${{ startsWith(github.ref, 'releases/') }}
        env:
          STAGE_ENV_NAME: stage
          STAGE_S3_NAME: your-s3-stage-name
        run: |
          echo "ENV=${{ env.STAGE_ENV_NAME }}" >> $GITHUB_ENV
          echo "S3_NAME=${{ env.STAGE_S3_NAME }}" >> $GITHUB_ENV
      # For Dev
      - id: set-params-for-dev
        name: Set parameters for Dev
        if: ${{ !startsWith(github.ref, 'releases/') && github.ref != 'master' }}
        env:
          DEV_ENV_NAME: dev
          DEV_S3_NAME: your-s3-dev-name
        run: |
          echo "ENV=${{ env.DEV_ENV_NAME }}" >> $GITHUB_ENV
          echo "S3_NAME=${{ env.DEV_S3_NAME }}" >> $GITHUB_ENV
      # To show results
      - id: show-params
        name: Show parameters
        run: |
          echo "ENV=${{ env.ENV }} S3_NAME=${{ env.S3_NAME }}"
      - id: set-params-for-outputs
        run: |
          echo "env=${{ env.ENV }}" >> "$GITHUB_OUTPUT"
          echo "s3_name=${{ env.S3_NAME }}" >> "$GITHUB_OUTPUT"
    outputs:
      env: ${{ steps.set-params-for-outputs.outputs.env }}
      s3_name: ${{ steps.set-params-for-outputs.outputs.s3_name }}

案4:設定ファイルを使う

* 以下の関連記事を参照のこと

Github Actions ~ 設定ファイルを考える ~
https://dk521123.hatenablog.com/entry/2024/05/21/201239

関連記事

Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546
Github Actions ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/12/21/155224
Github Actions ~ エラー処理 ~
https://dk521123.hatenablog.com/entry/2024/01/01/232057
Github Actions ~ GITHUB_ENV ~
https://dk521123.hatenablog.com/entry/2023/12/29/000840
Github Actions ~ GITHUB_OUTPUT ~
https://dk521123.hatenablog.com/entry/2024/01/30/002943
Github Actions ~ Artifact ~
https://dk521123.hatenablog.com/entry/2024/02/13/021717
Github Actions ~ Github Actions環境変数
https://dk521123.hatenablog.com/entry/2024/02/26/194437
Github Actions ~ 外部シェルスクリプト実行 ~
https://dk521123.hatenablog.com/entry/2024/01/19/003044
Github Actions ~ 設定ファイルを考える ~
https://dk521123.hatenablog.com/entry/2024/05/21/201239
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836
ブランチモデル ~ GitHub Flow / Git-flow etc ~
https://dk521123.hatenablog.com/entry/2019/09/29/121256