🗂

Github ActionsのReusing Workflowを使って、Workflowを共通化する

2023/12/21に公開

記事の内容

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.ymlcaller-2.ymlと命名して、実装を進めます。

inputsとsecrets

Reusing Workflowでは、inputssecretsを利用して、呼び出し元から値を受け取ります。

.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-ainput-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を利用する

上記で作成したinputssecretsを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.ymlcaller-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 Actions

.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!!!

Github Actions

以上のように、Reusing Workflowを呼び出すときに指定した値が出力されているのが確認できます。

まとめ

これでReusing Workflowを作成して実行することができました。

Github ActionsのWorkflowは共通処理が多くなりがちです。Reusing Workflowを使って、DRYなソースを運用できるといいですね!

今回作成したファイルは以下のリポジトリに置いておきました。

https://github.com/rara-tan/zenn-githubactions-reuse-workflow

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion