🦈
【GithubActions】共通処理を別ファイルにまとめる
はじめに
HITOTSU株式会社の河村康治です!
普段、E2EテストをGithubActionsで定期実行しています。ビルドやテスト実行、エラー通知処理などは共通処理が多いんですが、共通化できていませんでした😅
いつかやろうと思ってたのですが、実施したので記事にして共有しようと思います💡
共通化実施前
共通化実施前は下記のような構成でした。jobsの箇所が各シナリオ毎に記載しており、コード自体は全く同じコードです。
今回はjobsの箇所を共通ファイル化し、各シナリオから共通ファイル呼び出すようにしています。
ディレクトリ構成
~/develop/HITOTSU/e2e_test $ tree .github/workflows/
.github/workflows/
├── scenario1.yml
├── scenario2.yml
└── scenario3.yml
1 directory, 3 files
scenario1.yml
name: Scenario1 Test
on:
workflow_dispatch: # 手動実行用のトリガー
schedule:
- cron: '0 * * * *' # 毎時0分に実行
env:
SLACK_WEBHOOK_NOTIFICATION: ${{ secrets.SLACK_WEBHOOK_NOTIFICATION1 }}
TEST_TARGET_DIR: tests/spec/ # テスト対象のディレクトリ
SCENARIO_NAME: Scenario1 Test # テストシナリオ名
# jobs配下は、scenario1~scenario3で共通処理。envで定義した変数のみがscenario毎に異なる
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Setup Test
--- セットアップ処理の実行
- name: Run Scenario Tests
--- シナリオテスト実行
- name: Trigger Slack Notification
--- Slack通知
共通化実施後
共通処理は_scenario_test.yml
にまとめました。変数はscenarioX.yml
から値を受け取り実行しています。
ディレクトリ構成
~/develop/HITOTSU/e2e_test $ tree .github/workflows/
.github/workflows/
├── _scenario_test.yml # 共通処理を定義したファイル
├── scenario1.yml
├── scenario2.yml
└── scenario3.yml
1 directory, 4 files
scenario1.yml
name: Scenario1 Test
on:
workflow_dispatch:
schedule:
- cron: '0 * * * *'
jobs:
call-e2e-test:
uses: ./.github/workflows/_scenario_test.yml
with:
TEST_TARGET_DIR: tests/spec/ # テスト対象のディレクトリ
SCENARIO_NAME: Scenario1 Test # テストシナリオ名
secrets:
SLACK_WEBHOOK_NOTIFICATION: ${{ secrets.SLACK_WEBHOOK_NOTIFICATION1 }}
_scenario_test.yml
name: Scenario Test Workflow
on:
workflow_call:
inputs:
TEST_TARGET_DIR:
required: true # 必須項目
type: string
SCENARIO_NAME:
required: true # 必須項目
type: string
secrets:
SLACK_WEBHOOK_NOTIFICATION:
required: true # これによりSLACK_WEBHOOK_NOTIFICATIONが必要なシークレットとして設定される
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Setup Test
--- セットアップ処理の実行
- name: Run Scenario Tests
--- シナリオテスト実行
- name: Trigger Slack Notification
--- Slack通知
さいごに
思ったより簡単に共通化できました!
Discussion