はじめに
このシリーズは GitHub Actions を触ってみたいけど、ざっくり理解したい方向けの記事です。
- GitHub Actions ざっくりワークフローを理解
- GitHub Actions のシークレット情報と変数の設定方法
- GitHub Actions ワークフローを再利用する(共通化) (←当記事)
前回はデプロイ周りのワークフローを通して、シークレット情報と変数の設定方法をご紹介しました。
実際には、ステージング環境、本番環境など別々の設定値やワークフローがあるので、今回はそれらの設定方法をご紹介いたします。
ワークフローを再利用する(共通化)
環境ごとにシークレット情報や変数は違えども、デプロイするワークフローは共通化したいものです。
こういう場合、ワークフローを再利用できます。
イメージとしてはこんな感じになります。
※再利用ワークフローのファイル名は任意です。ここではプレフィックス_
を設定して説明します。
それでは、さっそく設定方法を見ていきましょう。
再利用ワークフローの作り方(_deploy.yml
)
再利用ワークフローの作り方のポイントは下記の3点です。
-
on
にworkflow_call
を設定する(「呼び出したときに実行するよ」と理解してます) - 入力値は
inputs
で設定する(同様の書き方でoutputs
も設定できます) - シークレット値は
secrets
で設定する
具体的には、このような YAML ファイルになります。
(ちょっと長くなってしまったので、コメント部分だけ拾っていただければ大丈夫です)
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点です。
-
uses
で再利用ワークフローのファイルパスを設定する - 再利用ワークフローの入力値
inputs
にはwith
で設定する - 再利用ワークフローのシークレット値
secrets
にはsecrets
で設定する
具体的には、このような YAML ファイルになります。
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-stg
と deploy-prd
の両方が再利用ワークフローを使用していることが分かりますね。
deploy-stgのワークフローを実行
deploy-prdのワークフローを実行
おわりに
再利用ワークフローを使うことで、処理を共通化できることが分かりました。
今回はデプロイだけでしたが、実際のプロダクトではlint
やtest
といったワークフローも再利用するケースも出てくるのではないでしょうか?
もし、すでにGitHub Actionsを導入されているようでしたら、これを機に確認してみて、理解を深めていっていただけると幸いです。
参考