Ccmmutty logo
Commutty IT
0 pv5 min read

【GitHubActions】各環境で共通のworkflowを使用する方法

https://cdn.magicode.io/media/notebox/ad7d8a4c-c835-428d-9dbf-ff413c7e32b3.jpeg

概要

GitHubActionsを使用していると、本番・開発ブランチで参照するsecretsが違うため、
本処理は同じですがsecretsのみが異なるworkflowを作成することがあると思います。
例えば下記のような場合です。
# 開発ブランチのworkflow抜粋
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_DEV }} ← 開発環境用のsecrets
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} ← 開発環境用のsecrets
          aws-region: ${{ secrets.AWS_REGION }}
# 本番ブランチのworkflow抜粋
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_PRO }} ← 本番環境用のsecrets
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_PRO }} ← 本番環境用のsecrets
          aws-region: ${{ secrets.AWS_REGION }}
上記の構成では本処理に変更があった場合、
本番・開発ブランチのworkflowをどちらも修正が必要になり、保守性に欠けます。
本記事ではsecretsを記載するworkflowを別途用意することで本処理を実行するworkflowは環境ごとに共通で使いまわせるようにする方法を紹介したいと思います。

workflowの構成

開発・本番ブランチの2つが存在する環境を前提に話を進めます。
最終的には、各ブランチで以下のworkflowを用意します。
  • 開発ブランチ
    • 開発環境secrets用workflow
    • 共通workflow
  • 本番ブランチ
    • 開発環境secrets用workflow
    • 共通workflow

実装方法

開発環境/本番環境secrets用workflow内で共通workflowを呼び出すことで実現します。
以下では、開発ブランチのworkflowの記載例を紹介します。

開発環境secrets用workflow

usesで共通workflowを指定し、@でブランチを指定します。
# 開発ブランチのhoge/hoge/へのpushで起動
on:
  push:
    branches:
      - dev
    paths:
      - hoge/hoge/**

# 開発ブランチで使用するsecretsを記載
jobs:
  deploy:
    uses: huga/hoge/.github/workflows/postaro.yaml@dev ← usesに共通workflowを指定し、@以降にブランチを指定
    secrets:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_DEV }}←開発用secretsを記載
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }}
・・・・・・
・・・・・・

共通workflow

workflow_callで開発環境secrets用workflowからsecretsを受け取ります。その後に本処理を記載します。
こうすることで、共通workflowには環境固有のsecretsを記載する必要がなくなり、各環境で使い回せます。
# 開発環境secrets用workflowからsecretsを受け取る
on:
  workflow_call:
    secrets:
      aws-access-key-id:
        description: AWSアクセスキー
        required: true
      aws-secret-access-key:
        description: AWSシークレットアクセスキー
        required: true

・・・・・・
・・・・・・

# 本処理を記載
jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 3
    defaults:
     run:
      working-directory: hoge/huga

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

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.aws-access-key-id }}    ← 環境固有のsecretsが不要に
          aws-secret-access-key: ${{ secrets.aws-secret-access-key }}
・・・・・・
・・・・・・

補足

Github Actions Environmentsを使用すると環境ごとにsecretsを設定できるため、今回の方法のようにsecrets用workflowを作成する必要がなくなるようです。
ただし、Github Actions Environmentsは有料なので注意が必要です。

参考

まとめ

GitHubActionsでsecretsを記載するworkflowを別途用意することで本処理を実行するworkflowは環境ごとに共通で使いまわせるようにする方法を紹介しました。
環境ごとに共通workflowと環境別secrets用workflowを用意し、環境別secrets用workflowで共通workflowを呼び出すことで実現する方法になります。
上記以外にもっと良い方法があれば、是非コメントで教えていただきたいです。
最後まで見ていただきありがとうございました。

Discussion

コメントにはログインが必要です。