0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubのEnvironmentsで環境変数をシンプルに管理する

Posted at

CI/CDワークフローで、環境変数をGitHub SecretsやVariablesから設定する際、これまで環境ごとにENV_DEVENV_PRODのような変数を使用して分岐処理を行っていたのですが、GitHubの「Environments」機能を使うことでシンプルにできたので共有します。

従来の方法: 環境ごとの分岐処理

以下のように、ブランチごとに異なる環境変数を設定するために条件分岐を使用していたのですが、この方法だと環境の増加に伴い条件分岐が複雑化し、メンテナンスが煩雑になる課題がありました。

  build-and-push:
    runs-on: ubuntu-latest
    env: 
      REGION: ${{ vars.REGION }}
      IAM_ROLE_TO_ASSUME: ${{ vars.IAM_ROLE_TO_ASSUME }}

    steps:
      - name: Set environment variables
        run: |
          if [[ "${{ github.ref }}" == "refs/heads/develop" ]]; then
            echo "ENV=${{ vars.ENV_DEV }}" >> $GITHUB_ENV
          elif [[ "${{ github.ref }}" == "refs/heads/staging" ]]; then
            echo "ENV=${{ vars.ENV_STG }}" >> $GITHUB_ENV
          else
            echo "ENV=${{ vars.ENV_PROD }}" >> $GITHUB_ENV
          fi

新しい方法: Environmentsの活用

GitHubの「Environments」機能を使用することで、条件分岐を排除し、ワークフローを簡潔に記述できます。

Environmentsの設定方法

  1. Environmentの作成
    GitHubリポジトリの「Settings」タブを開き、「Environments」を選択します。各環境(dev, stg, prodなど)を作成します。

    Environments設定画面

  2. 変数の登録

    • 秘密にすべき変数: Environment secretsに登録(AWS認証情報など)
    • 公開しても問題ない変数: Environment variablesに登録(環境識別用のENVなど)

Environmentsを活用したワークフロー

Environmentsを利用すると、以下のようにシンプルなワークフローを記述できます。

  build-and-push:
    runs-on: ubuntu-latest

    # 環境ごとのEnvironmentsを選択
    environment: ${{ github.ref == 'refs/heads/develop' && 'dev' || github.ref == 'refs/heads/staging' && 'stg' || 'prod' }}
    
    env: 
      REGION: ${{ vars.REGION }}
      IAM_ROLE_TO_ASSUME: ${{ vars.IAM_ROLE_TO_ASSUME }}
      ENV: ${{ vars.ENV }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ${{ env.REGION }}
          role-to-assume: ${{ env.IAM_ROLE_TO_ASSUME }}
          role-session-name: GitHubActions
          role-duration-seconds: 3600

      - name: Login to ECR
        uses: aws-actions/amazon-ecr-login@v2

      - name: Build Docker Image
        run: docker build --build-arg ENV=${{ env.ENV }}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?