🛠️

Github Actionsのワークフロー再利用

に公開

はじめに

Github Actionsのワークフローを再利用する方法について説明します。
再利用とはワークフローから他のワークフローを呼び出すことです。
これまでは同じ処理でもコピーして使い回していましたが、共通で利用する部分を切り出して再利用することで、ワークフローの保守性を向上させることができます。

ワークフローの再利用については以下に公式ドキュメントがあります。
https://docs.github.com/ja/actions/using-workflows/reusing-workflows

再利用可能なワークフローの作成

ワークフローを再利用するためには onworkflow_call イベントを含んでいる必要があります。

name: Reusable Workflow

on:
  workflow_call:

呼び出し元からから値を受け取るためには inputs を定義します。

name: Reusable Workflow

on:
  workflow_call:
    inputs:
      my_input:
        description: 'My input'
        type: string
        required: true

secrets: inherit を指定することで呼び出し元のリポジトリで設定されているシークレットを引き継ぐことができます。

name: Reusable Workflow

on:
  workflow_call:
    inputs:
      my_input:
        description: 'My input'
        type: string
        required: true
    secrets: inherit

outputs を定義することで呼び出し元に値を返すことができます。

name: Reusable Workflow

on:
  workflow_call:
    inputs:
      my_input:
        description: 'My input'
        type: string
        required: true
    secrets: inherit
    outputs:
      my_output:
        description: 'My output'
        type: string

呼び出し元のワークフローを作成

呼び出し元のワークフローを作成します。
uses を利用して再利用するワークフローを指定します。
job steps 内からでなく、jobs 内で指定することに注意してください。

同じリポジトリ内の再利用可能なワークフローを呼び出す場合は、以下の様にパスを指定します。

./.github/workflows/{filename}

name: Call Reusable Workflow

on:
  workflow_dispatch:

jobs:
  uses: ./.github/workflows/reusable-workflow.yml
  with:
    my_input: 'Hello'

他のパブリックとプライベート リポジトリの再利用可能なワークフローを呼び出す場合は、以下の様にリポジトリのパスを指定します。

{owner}/{repo}/.github/workflows/{filename}@{ref}

name: Call Reusable Workflow

on:
  workflow_dispatch:

jobs:
  call-reusable-workflow:
    uses: owner/repo/.github/workflows/reusable-workflow.yml@main
    with:
      my_input: 'Hello'

以下に実際に動作確認したワークフローを置いています。

  • 呼び出し元のワークフロー

https://github.com/y16ra/github-actions-samples/blob/main/.github/workflows/call-reusable-workflow.yaml

  • 再利用可能なワークフロー

https://github.com/y16ra/github-actions-samples/blob/main/.github/workflows/reusable-workflow.yaml

おわりに

Github Actionsのワークフローを再利用する方法について説明しました。
今回調べてみるまでワークフローから他のワークフローを呼び出すことができることを知りませんでした。
ワークフローの再利用はワークフローの保守性を向上させるために有効な手段だと思います。
今後はワークフローの再利用を活用していきたいと思います。

GitHubで編集を提案

Discussion