cron構文を使用したワークフローの実行

POSIX クーロン構文を使用して、特定の UTC 時間にワークフローを実行できるようスケジュール設定できます。 スケジュールしたワークフローは、デフォルトまたはベースブランチの直近のコミットで実行されます。 スケジュールされたワークフローを実行できる最短のインターバルは5分ごとです。

1
2
3
4
on:
schedule:
# * はYAMLに置ける特殊文字なので、この文字列は引用符で囲まなければならない
- cron: '*/15 * * * *'

よくあるcron設定。

1
2
3
4
5
6
7
8
9
┌───────────── 分 (0 - 59)
│ ┌───────────── 時間 (0 - 23)
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12 または JAN-DEC)
│ │ │ │ ┌───────────── 曜日 (0 - 6 または SUN-SAT)
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
* * * * *

注釈: GitHub Actions は、非標準的構文 (@yearly、@monthly、@weekly、@daily、@hourly、@reboot) をサポートしていません。

深夜2時にワークフローを実行する例

ワークフロー例

1
2
3
4
5
6
7
8
9
10
11
12
on:
schedule:
# At 02:00.(JST) → At 17:00.(UTC)
- cron: '0 17 * * *'

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
timeout-minutes: 10

UTC時間に注意

GitHub ActionsでScheduleに使用できるcronはUTC時間で実行されるので、JST(+9:00)との差を考慮して設定が必要。

crontab guru を使うと、クーロン構文の生成および実行時間の確認に役立ちます。 また、クーロン構文の生成を支援するため、crontab guru のサンプルリストもあります。

GitHubのリファレンスで紹介されているcrontab.guruが使いやすい。

crontabguru width=640

実行時のタイムアウトを設定する

GitHub Actionsのプライベートリポジトリでの制限時間枠を浪費しないため、深夜に起動したジョブが終了しない場合のタイムアウトを設定する。

jobs..steps.timeout-minutes
プロセスがkillされるまでにステップが実行できる最大の分数。

jobs..timeout-minutes
GitHubで自動的にキャンセルされるまでジョブを実行する最長時間 (分)。 デフォルト: 360

デフォルトではjob全体でのtimeout-minutesは360分が設定されている。

Jobの実行結果をもとに適当な値を設定する。

GithubActions width=640

タイムアウトするとジョブはキャンセルされる

GithubActions width=640