Github Actionsのワークフロー再利用
はじめに
Github Actionsのワークフローを再利用する方法について説明します。
再利用とはワークフローから他のワークフローを呼び出すことです。
これまでは同じ処理でもコピーして使い回していましたが、共通で利用する部分を切り出して再利用することで、ワークフローの保守性を向上させることができます。
ワークフローの再利用については以下に公式ドキュメントがあります。
再利用可能なワークフローの作成
ワークフローを再利用するためには on
に workflow_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'
以下に実際に動作確認したワークフローを置いています。
- 呼び出し元のワークフロー
- 再利用可能なワークフロー
おわりに
Github Actionsのワークフローを再利用する方法について説明しました。
今回調べてみるまでワークフローから他のワークフローを呼び出すことができることを知りませんでした。
ワークフローの再利用はワークフローの保守性を向上させるために有効な手段だと思います。
今後はワークフローの再利用を活用していきたいと思います。
Discussion