GitHub Actions の cron を使って、定期的に実行したいジョブを設定したのでそのメモ
GitHub Actions とは
いうたら GitHub に標準搭載の CI/CD 環境的なものです。Git Push されたらテストを自動実行、みたいなことが GitHub内だけで完結します。 public リポジトリだと無料なのはもちろん、なんと private リポジトリの場合でも無料から使えます(実行時間に上限あり)。くわしくは pricing のページを
ひとまずサンプル
GitHub Actions の設定ファイルを作ります。ファイル名は何でもよいです、拡張子は .yml で。
name: cron sample on: schedule: - cron: '0 12 * * *' jobs: build: runs-on: ubuntu-latest steps: - name: hello run: | echo "hello world"
これを、リポジトリ内の /.github/workflows/
フォルダ内に置いて、GitHub に push するだけでOK。
上記の例だと、毎日 12:00 (UTC) に GitHub Actions によって ubuntu の環境が立ち上がり、hello world が実行されます。
注意点など
最短間隔は 5分
cron の最短間隔は 5分のようです。実際に cron: '*/2 * * *'
などと5分未満の間隔を設定してみたのですが、5分に1回しか実行されませんでした。
って、ドキュメントにも書かれてましたわ。
スケジュールされたワークフローを実行できる最短のインターバルは5分ごとです。
指定時刻ぴったりに動く感じではない
上記と関連するかもですが、分単位でかっちりトリガーされる、というわけではなさそう。前後 5分程度のブレは見ておいたほうがよさげです。1分のズレが許されない、厳格な用途には向かなさげ。ゆるふわで。
時刻はUTC
UTC以外に設定変更する方法が見当たらず……。なので、日本時間だと 9時間引いて指定する感じになります。
privateリポジトリは制限あり
publicリポジトリは、無料アカウントでも時間制限なしです。private リポジトリの場合は時間制限があり、1アカウント 2,000分/月 までとなります。
月間2,000分ということは、1日あたり1時間ちょい。1時間あたりだと 2.6分くらい。
チーム開発でCI環境を……というならともかく、個人でちょろっと動かすくらいなら private リポジトリでも無料の範囲である程度いけそう。すごい。
curl が使える
なにか webhook的なものをトリガーしたければ、curl を使えばOKでした。
run: | curl -X POST -d {} https://example.com/
こんな感じの指定になりますね。
public リポジトリだけど、設定ファイル内の情報を隠したい場合
たとえば GitHub Actions内で webhook をコールしたい、けど URL は知られたくない、けど public リポジトリにはしたい、という場合。
secret 機能が使えます。
リポジトリの設定がありまして、setting -> secret と進むと、ナイショの値を設定できます。ここでたとえば SECRET_URL
という値を入れてあげて、ymlファイル側では
run: | curl -X POST -d {} ${{ secrets.SECRET_URL }}
こんな感じに指定してやることで、secret として設定した値を使うことができます。
まとめ
べんり。
cron の設定を、コードと一緒に管理できるのは良いですね。情報があちこちに散らばらず、同じリポジトリ内にまとまっているのは、やはり分かりやすいです。
private リポジトリでもそれなりの時間分使えますし!