workflow_call
機能を利用することで、GitHub Actionを共通処理化できます。
name: Shared Process
on:
workflow_call:
作成した共通処理のファイル名を、呼び出し元のuses:
に記載することで共通処理を呼び出すことができます。
jobs:
manual-job:
uses: ./.github/workflows/shared_process.yml
また、このとき呼び出し元から共通処理に渡したいパラメータがある場合は、with:
に記載することができます。
サンプルコード
【動作】
ある処理を手動実行とスケジュール実行の両方で実行可能にする。
このとき、共通処理に渡したいパラメータはそれぞれで異なる。
# shared_process.yml(共通処理)
# 呼び出し元から受け取った値を出力する
name: Shared Process
on:
workflow_call:
inputs:
PARAMETER:
type: string
env:
PARAMETER: ${{ inputs.PARAMETER }}
jobs:
echo-job:
runs-on: ubuntu-latest
steps:
- name: actions test
run: echo ${{ inputs.PARAMETER }}
# manual_execute.yml(手動実行)
# 画面入力値を共通処理に渡す
name: Manual Execute
on:
workflow_dispatch:
inputs:
PARAMETER:
required: true
jobs:
manual-job:
uses: ./.github/workflows/shared_process.yml
with:
PARAMETER: ${{ inputs.PARAMETER }}
# scheduled_execute.yml
# スケジュール実行パターンに応じて、指定した文字列を共通処理に渡す
name: Scheduled Execute
on:
schedule:
- cron: "*/5 * * * *" # 5分に1回
- cron: "*/10 * * * *" # 10分に1回
jobs:
scheduled-job:
runs-on: ubuntu-latest
outputs:
PARAMETER: ${{ steps.set-parameter.outputs.PARAMETER }}
steps:
- name: Set environment variables
id: set-parameter
run: |
if [[ "${{ github.event.schedule }}" == "*/5 * * * *" ]]; then
echo "PARAMETER=スケジュール_5分毎" >> $GITHUB_OUTPUT
elif [[ "${{ github.event.schedule }}" == "*/10 * * * *" ]]; then
echo "PARAMETER=スケジュール_10分毎" >> $GITHUB_OUTPUT
fi
execute-job:
needs: scheduled-job
uses: ./.github/workflows/shared_process.yml
with:
PARAMETER: ${{ needs.scheduled-job.outputs.PARAMETER }}