🦈

【GithubActions】共通処理を別ファイルにまとめる

2024/12/02に公開

はじめに

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通知

さいごに

思ったより簡単に共通化できました!

HITOTSU株式会社 テックブログ

Discussion