GitHub Actions ワークフローで処理を定期実行する方法
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-on
に ubuntu-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 プランを使っています)。
参考
- Scheduled events:
schedule
| Events that trigger workflows - GitHub Docs - Triggering a workflow with events | Configuring a workflow - GitHub Docs
on.schedule
| Workflow syntax for GitHub Actions - GitHub Docs