【GitHub Actions】workflow_callでワークフローの再利用・共通化

GitHub Actions

workflow_callでワークフローの再利用・共通化

GitHub Actionsで、workflow_callを使用して、ワークフローの再利用・共通化する方法についてまとめました!

このworkflow_callは個人的に共通化する際にはめちゃ便利なので、どんどん使っていきたい機能です!

ただ注意点のところにも記載しましたが、記事作成時点では、GHESではworkflow_callがサポートされていませんでしたのでご注意を。

ドキュメント

注意点

  • 記事作成時点では、GHESではworkflow_callがサポートされておらず、使えなかった。
  • このレポジトリのようなやり方ならPrivate Repositoryでも問題なく使えた(workflow_callでちゃんと呼び出せた)。

レポジトリ

workflow_callでワークフローの再利用・共通化方法

再利用・共通側workflow

まずは、workflow_callを使用して、再利用可能な・共通のワークフローを作成します。

「workflow_call」の「inputs」で値を受け取り、諸々の処理をしてから、結果を「outputs」で呼び出し側へ返すことが可能です。

.github/workflows/reusable_workflow.yml

name: Reusable Workflow

on:
  workflow_call:
    inputs:
      name:
        required: true
        type: string
    outputs:
      hello_world:
        description: "Hello World"
        value: ${{ jobs.reusable_job.outputs.hello_world }}

jobs:
  reusable_job:
    name: input and output
    runs-on: ubuntu-latest
    outputs:
      hello_world: ${{ steps.output_step.outputs.hello_world }}
    steps:
      - id: output_step
        run: |
          HELLO_WORLD="Hello World ${{ inputs.name }} From Reusable Workflow!"
          echo "::set-output name=hello_world::$(echo $HELLO_WORLD)"

呼び出し側workflow

次に先ほど作成したreusable_workflowを二つのMainとSubのワークフローから呼び出してみます。
それぞれ渡す「inputs」に応じて、受け取る「outputs」も変化します。

また呼び出す際は、一つのJobとして定義し、needsを指定して依存関係を定義することで共通部分を呼び出した後に、別の処理も続けて実行しています。

reusable_workflowからの実行結果を受け取りたい場合は、「needs」の「outputs」を受け取ることで可能です。

Mainワークフロー

.github/workflows/main.yml

name: Main Action
on: workflow_dispatch

jobs:
  job1:
    uses: awesome-linus/github-actions_workflow_call/.github/workflows/reusable_workflow.yml@main
    with:
      name: Kou
  job2:
    name: Output Job
    runs-on: ubuntu-latest
    needs: 
      - job1
    steps:
      - name: Output Hello World
        run: echo ${{ needs.job1.outputs.hello_world }}

Subワークフロー

.github/workflows/sub.yml

name: Sub Action
on: workflow_dispatch

jobs:
  job1:
    uses: awesome-linus/github-actions_workflow_call/.github/workflows/reusable_workflow.yml@main
    with:
      name: Hoge
  job2:
    name: Output Job
    runs-on: ubuntu-latest
    needs: 
      - job1
    steps:
      - name: Output Hello World
        run: echo ${{ needs.job1.outputs.hello_world }}

実行結果

Mainワークフロー

Subワークフロー

まとめ

今回は、workflow_callでワークフローの再利用・共通化方法方法について書きました!

GHESでこのworkflow_callがサポートされていないのは残念ですが、通常のGitHub Hostedの物では使えますし、めちゃ便利なのでどんどん使っていきたいですね!

オススメの関連商品

Note一覧

コメント

タイトルとURLをコピーしました