はじめに
こんにちは、こふです。
原因
main
ブランチ(default branch
として設定している任意のブランチ)に、動かしたいcron
を含むGitHub Actions
が含まれていないことが原因でした。
またその後のsample.yaml
の編集もmain
ブランチに反映されない限り、上書きされないことが分かりました。
ここでは
main
ブランチ = デフォルトブランチとします。
つまり、以下のようなスクリプトをmain
ブランチに Merge
なり何なりで存在させることでcron
が動き始めました。
name: First Cron Job
on:
push:
branches:
- main
- develop
schedule:
- cron: "*/5 * * * *"
workflow_dispatch:
jobs:
cron:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: main
- name: Run a one-line script
run: echo Hello, world!
参考:https://theanshuman.dev/articles/free-cron-jobs-with-github-actions-31d6
確定事項
確定事項としてmain
ブランチなどのデフォルトブランチにsample.yaml
が存在しない限りcron
は動きません
manually
に実行やpush
時に実行されてもcron
では実行されません。
sample.yaml
の書式ミスである可能性もなくはないと思うのでworkflow_dispatch:
を付けてGitHub
上やgh cli
などを用いて試すことをおすすめします。
調査結果
main
にマージ後にsample.yaml
を編集してどのコミット ID を見られるかが気になったので参考までに調査結果をまとめます。
- はじめて
main
ブランチにsample.yaml
が追加されたとき- PR からマージした(ローカルでもどっちでも良いですが)ので、その直近のコミット ID です
ref: main
としていました。hoge1
という コミット ID とします。
- 次に
main
ブランチでsample.yaml
を編集せず(コミット・プッシュせず)cron
を待ったときhoge1
が参照され実行され続ける- これは想定通りですね
- 当該
sample.yaml
以外を編集しても、です。
- 次に
main
ブランチでsample.yaml
を編集して(コミット・プッシュして)cron
を待ったときhoge2
というコミット ID とします。- 直後の実行から、最新のコミット、つまり
hoge2
を見たsample.yaml
になっていました。 - 事前に Queue に追加されるわけではない実装のよう(あくまで直前かな)
develop
ブランチを切ってそこでsample.yaml
を編集したとき- 編集といっても
ref: main
をref: develop
にすることくらいです。 hoge3
というコミット ID とします。- 原因はわかりませんが、すっと
hoge2
を参照したsample.yaml
が実行され続けました - つまり、参照先や実行するコマンドの情報に関わらず、
main
ブランチに配置されたsample.yaml
のファイルを見ている気がしてきました。
- 編集といっても
以上より、cron
で動かしたいsample.yaml
を変更した際は必ずmain
ブランチにマージすることが必要という結論に現状至りました。
補足
ちなみに、以下のように cron では特定のコミット ID を参照するに過ぎません。
(見かけ上はブランチ名ですが、それぞれのリモートブランチであってもその先頭のコミット ID)
Push 時や PR 時に実行されるものではないですし・・・
よって、ブランチを変えてsample.yaml
を書き換え、そのブランチを参照しつつ実行する必要があるのならref
を書き換える必要があります。
steps:
- uses: actions/checkout@v3
with:
ref: main
おわりに
そもそも GitHub Actions の cron は遅延して動くので、その点も含め検証を正しく行えたかはわかりません。
遅延の詳細:https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
いつの時点で Queue に入るのかも仕様が調査してもわかりませんでした。有識者求む。
また、GitHub Actions
のcron
の使い所は限られることも分かりました。
常にmain
ブランチなら気にすること皆無ですがそんなことないですからね。