Github ActionsのReusing Workflowを使って、Workflowを共通化する
記事の内容
Github Actionsのコードを共通化できるReusing Workflowを使って、Github Actionsのワークフローを共通化します。
対象読者
- Github Actionsユーザー
記事の長さ
1分で読めます
Github Actions の Reusing Workflowとは?
Reusing WorkflowとはGithub Actionsの処理を共通化するための機能です。
処理としては同じだが、パラメーターが異なる処理を共通のWorkflowファイルで管理できるようになります。
Reusing Workflowをつかってみる
実際にReusing Workflowを使った処理を書いていきます。
Directory
Reusing Workflowは他のgithub actionsのWorkflowと同じく、.github/workflows
ディレクトリ配下に設置されます。
ファイルを作成する
今回は、共通化するyamlファイルをcommon.yml
という名前で、.github/workflows
配下に設置します。
また、そのcommon.yml
ファイルを呼び出して利用するcaller側のworkflowファイルをcaller-1.yml
・caller-2.yml
と命名して、実装を進めます。
inputsとsecrets
Reusing Workflowでは、inputs
とsecrets
を利用して、呼び出し元から値を受け取ります。
.github/workflows/common.yml
on:
workflow_call:
inputs:
input-a:
required: true
type: string
input-b:
required: false
type: string
secrets:
secret-value:
required: true
上記は、input-a
とinput-b
というinput value・secret-value
というsecret valueを受け付けるWorkflowファイルです。
これらの値は、jobのStepで参照して利用できます。
呼び出し方は以下のようになります。
.github/workflows/caller-1.yml
...
uses: rara-tan/zenn-githubactions-reuse-workflow/.github/workflows/common.yml@main
with:
input-a: aa
input-b: bb
secrets:
secret-value: secret!
inputsとsecretsを利用する
上記で作成したinputs
とsecrets
をWorkflowのStepで使えるようにします。
.github/workflows/common.yml
...
jobs:
triage:
runs-on: ubuntu-latest
steps:
- name: echo input a
run: echo ${{ inputs.input-a }}
- name: echo input b
run: echo ${{ inputs.input-b }}
- name: echo secret value
run: echo ${{ secrets.secret-value }}
上記は、inputsとsecretsの値をechoで表示するWorkflowです。
上記のように、Reusing Workflowで受け取った値をWorkflow上で利用することが可能です。
完成
値を共通化したWorkflowに渡して、それを利用する方法を解説しました。これで、共通化したReusing Workflowが作れるようになりました。
以下が、完成したcommon.yml
ファイルです。
.github/workflows/common.yml
name: Reusable workflow
on:
workflow_call:
inputs:
input-a:
required: true
type: string
input-b:
required: false
type: string
secrets:
secret-value:
required: true
jobs:
triage:
runs-on: ubuntu-latest
steps:
- name: echo input a
run: echo ${{ inputs.input-a }}
- name: echo input b
run: echo ${{ inputs.input-b }}
- name: echo secret value
run: echo ${{ secrets.secret-value }}
テスト実行する
Reusing Workflowのcommon.yml
が完成したので、caller-1.yml
とcaller-2.yml
から呼び出します。
.github/workflows/caller-1.yml
name: Caller 1
on:
push:
branches: [ main ]
jobs:
plan:
uses: rara-tan/zenn-githubactions-reuse-workflow/.github/workflows/common.yml@main
with:
input-a: a
input-b: b
secrets:
secret-value: secret!
.github/workflows/caller-2.yml
name: Caller 2
on:
push:
branches: [ main ]
jobs:
plan:
uses: rara-tan/zenn-githubactions-reuse-workflow/.github/workflows/common.yml@main
with:
input-a: aa
input-b: bb
secrets:
secret-value: secret!!!
以上のように、Reusing Workflowを呼び出すときに指定した値が出力されているのが確認できます。
まとめ
これでReusing Workflowを作成して実行することができました。
Github ActionsのWorkflowは共通処理が多くなりがちです。Reusing Workflowを使って、DRYなソースを運用できるといいですね!
今回作成したファイルは以下のリポジトリに置いておきました。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion