Traffine I/O

日本語

2023-03-03

GitHub Actionsにおけるワークフローのトリガー

はじめに

GitHub Actionsは、カスタムなイベント駆動のパイプラインを作成することで、開発者がソフトウェアのワークフローを自動化できる強力なプラットフォームです。ワークフローのトリガーはGitHub Actionsの中心的な機能であり、様々なイベントに対して自動的にタスクを実行することができます。この記事では、イベントとトリガー、スケジュールされたワークフロー、手動ワークフローなど、GitHub Actionsでワークフローをトリガーする方法を紹介します。

イベントとトリガー

イベントとトリガーは、GitHub Actionsの基盤となります。ワークフローは、GitHubリポジトリ内で特定のイベントが発生したときに開始されます。これらのイベントは、プッシュやプルリクエストなどのリポジトリに関するものから、その他の様々なものまでさまざまです。これらのイベントをどのように活用するかによって、プロジェクトに適した効率的で柔軟なワークフローを作成することができます。

プッシュイベントとプルリクエストイベント

プッシュイベントとプルリクエストイベントは、GitHub Actionsでもっとも一般的なトリガーの一つです。リポジトリにコミットがプッシュされた場合やプルリクエストが作成または更新された場合は、これらのイベントが自動的に関連するワークフローをトリガーします。

  • プッシュイベント
    コミットがリポジトリにプッシュされたときにトリガーされるイベントです。branchestagsのフィルターを使用して、特定のブランチまたはタグに対してのみワークフローを実行するように構成できます。
.github/workflows/example.yaml
on:
  push:
    branches:
      - main
      - develop
  • プルリクエストイベント
    プルリクエストが作成、同期(更新)、または再開されたときにトリガーされるイベントです。プッシュイベントと同様に、branchesフィルターを使用して、ワークフローを実行するブランチを指定することができます。
.github/workflows/example.yaml
on:
  pull_request:
    branches:
      - main

リポジトリイベントとイシューアクションイベント

リポジトリイベントとイシューアクションイベントは、リポジトリの特定の変更に基づいてタスクを自動化するために、より詳細な制御を提供します。

  • リポジトリイベント
    リポジトリの作成、削除、フォーク、スターなどのアクションによってトリガーされます。
.github/workflows/workflow.yml
on:
  create:
    branches:
      - feature/*
  • Iイシューアクションイベント
    イシューが作成、編集、削除、または状態が変更された(例:開かれたか閉じられたか)場合にトリガーされます。これらのイベントを使用して、ラベル付けやイシューのアサインなどのタスクを自動化できます。
.github/workflows/workflow.yml
on:
  issues:
    types:
      - opened
      - reopened

その他のイベント

GitHub Actionsには、deploymentworkflow_runreleasecheck_runなどの多数のその他のイベントがあります。これらのイベントは、さまざまなリポジトリのアクティビティに基づいてワークフローをトリガーするための追加のオプションを提供します。

.github/workflows/workflow.yml
on:
  release:
    types:
      - published

利用可能な全てのイベントとその説明の詳細については、GitHub Actionsドキュメントを参照してください。

https://docs.github.com/ja/actions/reference/events-that-trigger-workflows

スケジュールされたワークフロー

スケジュールされたワークフローを使用すると、特定の間隔(例:毎日または毎週)でGitHub Actionsワークフローを実行できます。自動テスト、コード解析、レポート作成などのタスクに特に便利です。

スケジュールの設定

スケジュールされたワークフローを設定するには、ワークフロー構成ファイル(.github/workflows/workflow.yml)でscheduleキーワードを使用する必要があります。 scheduleキーワードの後に、ワークフローが実行されるタイミングを定義するcron式のリストを記述する必要があります。

.github/workflows/workflow.yml
on:
  schedule:
    - cron: '0 0 * * *'

この例では、ワークフローは毎日の0時0分に実行されるようにスケジュールされています。

cron構文の使用

cron構文は、ワークフローのスケジュールを定義するために使用されます。cron式は、分(0〜59)、時(0〜23)、月内日(1〜31)、月(1〜12)、および曜日(0〜7、0と7は日曜日を表します)を表す5つのフィールドで構成されています。

次の特殊文字をcron式で使用できます。

  • *: 任意の値を表します(例えば、時のフィールドでの*は "毎時" を意味します)
  • ,: 値のリストを指定します(例えば、月内日のフィールドでの1,15は "1日と15日" を意味します)
  • -: 値の範囲を指定します(例えば、曜日のフィールドでの1-5は "月曜日から金曜日" を意味します)
  • /: インターバルを指定します(例えば、時のフィールドでの*/2は "2時間ごと" を意味します)
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '30 2 * * 1-5'

この例では、ワークフローは、月曜日から金曜日の午前2時30分に実行されるようにスケジュールされています。

スケジュールされたワークフローの例

ここに、スケジュールされたワークフローのいくつかの例を示します。

  • 15分ごとにワークフローを実行
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '*/15 * * * *'
  • 毎週月曜日の午前9時にワークフローを実行
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '0 9 * * 1'
  • 毎月1日と15日の午後6時にワークフローを実行
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '0 18 1,15 * *'

手動ワークフロー

手動ワークフローを使用すると、イベントに頼るのではなく、必要に応じてGitHub Actionsワークフローを実行できます。これにより、特定のアクションをいつ実行するかをより細かく制御でき、ワークフローのテストやデバッグも容易になります。

workflow_dispatchイベント

手動ワークフローを作成するには、ワークフロー構成ファイル(.github/workflows/workflow.yml)でworkflow_dispatchイベントを使用する必要があります。このイベントを使用すると、GitHub Actionsインターフェイスからワークフローを手動でトリガーできます。

.github/workflows/workflow.yml
on:
  workflow_dispatch:

この設定を使用すると、GitHubリポジトリの「Actions」タブを訪問し、特定のワークフローを選択し、「ワークフローを実行」ボタンをクリックすることで、ワークフローをいつでも手動でトリガーできます。

手動入力の設定

手動ワークフローに入力パラメータを設定することもできます。これにより、手動でトリガーするときにワークフローにカスタムデータを渡すことができます。入力パラメータを構成するには、ワークフロー構成ファイルのworkflow_dispatchイベントの下にinputsフィールドを追加します。

.github/workflows/workflow.yml
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Target environment'
        required: true
        default: 'staging'

この例では、environmentという名前の入力パラメータがワークフローに追加されています。このパラメータには説明が含まれ、必須フラグが設定され、デフォルト値がstagingに設定されています。入力パラメータには、github.event.inputsコンテキストを使用して、ワークフローステップでアクセスできます。

.github/workflows/workflow.yml
steps:
  - name: Deploy to environment
    run: echo Deploying to ${{ github.event.inputs.environment }}

手動ワークフローの実行

workflow_dispatchイベント(およびオプションの入力パラメータ)を使用して手動ワークフローを構成した後は、GitHubリポジトリの「Actions」タブからトリガーできます。

  1. GitHubリポジトリの「Actions」タブに移動
  2. 使用可能なワークフローの一覧から実行するワークフローを選択
  3. 「ワークフローを実行」ボタンをクリック
  4. ワークフローの入力パラメータがある場合は、値を入力するように求められる。必要な値を提供した後、「ワークフローを実行」ボタンを再度クリックして、ワークフローをトリガー。

トリガーの組み合わせ

多くの場合、複数のイベントまたは条件に基づいてワークフローをトリガーしたい場合があります。この章では、さまざまなトリガーを組み合わせて、プロジェクト固有のニーズに合わせたより複雑なワークフローを作成する方法について説明します。

トリガーを組み合わせるには、単にワークフロー構成ファイル(.github/workflows/workflow.yml)でonキーワードの下にリストしてください。これにより、リストされたイベントのいずれかが発生した場合に、ワークフローがトリガーされます。

.github/workflows/workflow.yml
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  workflow_dispatch:

この例では、mainブランチにpushイベントが発生した場合、mainブランチをターゲットとするpull requestイベントが発生した場合、またはworkflow_dispatchイベントを使用してワークフローが手動でトリガーされた場合に、ワークフローがトリガーされます。

ここに、トリガーを組み合わせた別の例をいくつか紹介します。

  • 特定のブランチに対するpushイベントと新しいリリースの作成に基づいてワークフローをトリガー
.github/workflows/workflow.yml
on:
  push:
    branches:
      - main
      - develop
  release:
    types:
      - created
  • issueイベント(openedまたはreopened)およびスケジュール(毎日の0時)に基づいてワークフローをトリガー
.github/workflows/workflow.yml
on:
  issues:
    types:
      - opened
      - reopened
  schedule:
    - cron: '0 0 * * *'
  • 特定のブランチに対するpull requestイベントと入力パラメータを使用してワークフローをトリガー
.github/workflows/workflow.yml
on:
  pull_request:
    branches:
      - main
  workflow_dispatch:
    inputs:
      environment:
        description: 'Target environment'
        required: true
        default: 'staging'

参考

https://docs.github.com/en/actions/reference/events-that-trigger-workflows

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!