GitHub Actions ワークフローで処理を定期実行する方法

GitHub

GitHub Actions で特定の処理を定期的に実行する方法についてです。 公式のドキュメントに方法が書かれているのですが、情報があちこちに散っているのでかんたんにまとめました。

schedule トリガーイベントを使う

早速結論ですが schedule というトリガーイベントを利用すれば OK です。

on:
  schedule:
    - cron:  '0 * * * *'

cron の値には実行時間を表す POSIX cron シンタックス ↓ の文字列を渡します。

分 時 日 月 曜日

時間指定のサンプル

cron を設定する機会が少ないので都度調べる(私のような)人のために、時間指定のサンプルをいくつかあげます(動作確認していないので間違っている可能性があります)。

毎日毎時 30 分 (UTC) に実行する:

30 * * * *

毎日 10:45 (UTC) に実行する:

45 10 * * *

3 日毎に 1 回 08:00 (UTC) に実行する:

0 8 */3 * *

毎週月曜日の 15:00 (UTC) に実行する:

0 15 * * 1

曜日指定には [0, 6] の整数を使います。 0 が日曜日、 6 が土曜日です。

サンプル

この schedule を使って定期的に特定の URL にリクエストをかけるには次のようにすれば OK です。

.github/workflows/scheduled-build.yml:

name: Scheduled build

on:
  schedule:
    # 月曜日の 11:00 (JST) に処理を実行する。
    # UTC の 02:00 は JST だと 11:00 。
    - cron: '0 2 * * 1'

jobs:
  build:
    name: build
    runs-on: ubuntu-latest
    steps:
      - name: curl
        run: curl --show-error -X POST -d {} "${{ secrets.BUILD_HOOK_URL }}"

# で始まる行はコメントです。 name の値は処理には影響しないのでわかりやすい値をセットして使うとよいと思います。 記事執筆時点では runs-onubuntu-latest を選べば前準備なしで curl が使えました。

リポジトリの Settings → Secrets で BUILD_HOOOK_URL という名前の secret を作成すればその値が secrets.BUILD_HOOOK_URL にセットされて実行されることが確認できます。

注意点

GitHub Actions の schedule イベントは、 GitHub Actions ワークフローの実行の負荷が高いときに遅れることがあるのでその点に注意が必要です。

Note: The schedule event can be delayed during periods of high loads of GitHub Actions workflow runs. High load times include the start of every hour. To decrease the chance of delay, schedule your workflow to run at a different time of the hour.

個人的な経験ではワークフローの開始が 20 〜 30 分ほど遅れることはざらなので、そのぐらいの遅れが問題になるような用途に使うことはおすすめしません(ちなみに、 GitHub のプランは Team プランを使っています)。

参考

関連記事


アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら