2
2

More than 1 year has passed since last update.

GitHub Actions ワークフローを再利用する(共通化)

Last updated at Posted at 2023-06-13

はじめに

このシリーズは GitHub Actions を触ってみたいけど、ざっくり理解したい方向けの記事です。

  1. GitHub Actions ざっくりワークフローを理解
  2. GitHub Actions のシークレット情報と変数の設定方法
  3. GitHub Actions ワークフローを再利用する(共通化) (←当記事)

前回はデプロイ周りのワークフローを通して、シークレット情報と変数の設定方法をご紹介しました。

実際には、ステージング環境、本番環境など別々の設定値やワークフローがあるので、今回はそれらの設定方法をご紹介いたします。

ワークフローを再利用する(共通化)

環境ごとにシークレット情報や変数は違えども、デプロイするワークフローは共通化したいものです。
こういう場合、ワークフローを再利用できます。

イメージとしてはこんな感じになります。

※再利用ワークフローのファイル名は任意です。ここではプレフィックス_を設定して説明します。

それでは、さっそく設定方法を見ていきましょう。

再利用ワークフローの作り方(_deploy.yml

再利用ワークフローの作り方のポイントは下記の3点です。

  1. onworkflow_call を設定する(「呼び出したときに実行するよ」と理解してます)
  2. 入力値は inputs で設定する(同様の書き方で outputs も設定できます)
  3. シークレット値は secrets で設定する

具体的には、このような YAML ファイルになります。
(ちょっと長くなってしまったので、コメント部分だけ拾っていただければ大丈夫です:bow:

_deploy.yml(再利用ワークフローの例)
name: Deploy(再利用ワークフロー)

on:
  # ポイント1: `on` に `workflow_call` を設定
  workflow_call:
    # ポイント2: 入力値は `inputs` で設定
    inputs:
      MY_AWS_REGION:
        description: 'AWS Region'
        type: string
        required: true
        default: 'us-east-2'
      MY_ECR_REPOSITORY:
        description: 'ECR Repository'
        type: string
        required: true
        default: 'my-ecr-repo'
      (中略)
    # ポイント3: シークレット値は `secrets` で設定
    secrets:
      AWS_ACCESS_KEY_ID:
        description: 'AWS Access Key ID'
        required: true
      AWS_SECRET_ACCESS_KEY:
        description: 'AWS Secret Access Key'
        required: true

env:
  # 入力値は ${{ inputs.入力ID }} で参照
  AWS_REGION: ${{ inputs.MY_AWS_REGION  }}
  ECR_REPOSITORY: ${{ inputs.MY_ECR_REPOSITORY  }}
  (中略)

jobs:
  deploy:
    name: Deploy(再利用ワークフロー)
    runs-on: ubuntu-latest

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

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        # シークレット値は ${{ secrets.シークレットID }} で参照
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}
    (以下略)

再利用ワークフローの呼び出し方

先程の _deploy.ymlの呼び出し方のポイントは下記の3点です。

  1. uses で再利用ワークフローのファイルパスを設定する
  2. 再利用ワークフローの入力値 inputs には with で設定する
  3. 再利用ワークフローのシークレット値 secrets には secrets で設定する

具体的には、このような YAML ファイルになります。

deploy-stg.yml(再利用ワークフローを呼び出す例)
name: Deploy Staging

on:
  push:
    branches:
      - main

jobs:
  deploy-stg:
    # ポイント1: `uses` で再利用ワーク
    uses: ./.github/workflows/_deploy.ymlフローのファイルパスを設定
    # ポイント2: 再利用ワークフローの入力値 `inputs` には `with` で設定
    with:
      MY_AWS_REGION: ${{ vars.MY_AWS_REGION  }}
      MY_ECR_REPOSITORY: ${{ vars.MY_ECR_REPOSITORY  }}
      (中略)
    # ポイント3: 再利用ワークフローのシークレット値 `secrets` には `secrets` で設定
    secrets:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

ワークフローを実行してみる

この設定でステージングと本番のデプロイを実行してみます。
すると、GitHub Actions のページから、deploy-stgdeploy-prd の両方が再利用ワークフローを使用していることが分かりますね。

deploy-stgのワークフローを実行

deploy-stgが再利用ワークフローを使用していることが分かる.png

deploy-prdのワークフローを実行

deploy-prdが再利用ワークフローを使用していることが分かる.png

おわりに

再利用ワークフローを使うことで、処理を共通化できることが分かりました。
今回はデプロイだけでしたが、実際のプロダクトではlinttestといったワークフローも再利用するケースも出てくるのではないでしょうか?

もし、すでにGitHub Actionsを導入されているようでしたら、これを機に確認してみて、理解を深めていっていただけると幸いです。

参考

2
2
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
2
2