はじめに
業務で、CI/CDをGitHub Actionsで自動化する取り組みに挑戦しています。
ワークフローを作成する中でなく、メンテナンス性や拡張性を高めるために、ワークフローファイルのモジュール化に取り組みました。
調べる中で、共通化する方法が二つあることを知ったので、それぞれについてまとめることにしました。
Composite Action
共通化部分
action.yml
name: test-action
inputs:
version:
default: '3.8'
required: false
runs:
using: "composite"
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
- name: Set Up
uses: actions/setup-python@v2
with:
python-version: ${{ inputs.version }}
呼び出し
test-workflow-action.yml
name: test-call
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: test-action
uses: ./.github/workflows/buildx
with:
version: '3.9.1'
解説
- ファイル名は
action.yml
にする。(フォルダを分けることで、区別するようにするのが一般的。今回は、./.github/workflows/buildx
内にaction.yml
をおく) -
using: "composite"
を指定する - 値を渡すときは、
inputs
を使って渡す - secretsを渡すことができない
Reusable workflows
共通化部分
_test-action.yml
name: test-action
on:
workflow_call:
inputs:
version:
default: '3.8'
required: false
secrets:
secret-version:
default: '3.8'
required: false
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: sample
with:
secret-version: ${{ secrets.secret-version }}
version: ${{ inputs.version }}
呼び出し
test-workflow-action.yml
name: test-call
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
call-reusable-workflow:
uses: ./.github/workflows/_test-action.yml
with:
version: '3.9.1'
secrets:
secret-version: '3.9.1'
解説
- ファイル名は任意(ハイフンから始めることが多そう)
-
on
の値にworkflow_call
を指定する - 呼び出す時はファイル名まで書く(Composite Actionはフォルダ名まで)
- 呼び出されたワークフローからさらに別のワークフローを呼び出すことはできない(
_test-action.yml
から、さらに別のワークフローを飛び出すことはできない) - 値を渡すときは、
inputs
かsecrets
を使って渡す
参考
Composite Action
https://zenn.dev/tmrekk/articles/5fef57be891040
https://qiita.com/M_Kagawa/items/98f154477b8b5bd3d315
Reusable workflows
https://zenn.dev/jerome/articles/618af7cc934f2f
https://tech.speee.jp/entry/terraform-reusable-workflow