公式ドキュメント
CircleCI は公式ドキュメントが充実していますので、一読しましょう*1。
YAML の例
cron を実行するための最低限に近い .circleci/config.yml
の例は次のとおりです。
version: 2 jobs: build: docker: - image: circleci/node:13.5.0 working_directory: ~/repo steps: - checkout - run: name: Hello, CircleCI cron World command: | echo 'Hello, CircleCI cron World!' workflows: version: 2 lets_execute_cron: triggers: - schedule: cron: '10 09 * * *' filters: branches: only: - master jobs: - build
workflows
を用いることが必須であり、ポイントです。
workflows の書き方
workflows
の直下の値には、workflow を区別するための任意の名前をつけます。上記の YAML の例で言えば、lets_execute_cron
がその名前です。
workflow は複数作ることができ、作った workflow は全て実行対象となります。
各々の workflow の直下の値に triggers
を取ることができます。その triggers
の値(厳密には配列の要素)として schedule
を取ることで cron
を用いて workflow を発動させることができます。このとき、cron の対象となるブランチを filters
というキーバリューで設定できます。
各々の workflow の直下の値には jobs
も取る必要があります。ここで指定した値(厳密には配列の要素)の job が、その workflow にて実行される job となります。
以上を踏まえて上記の YAML 例を改めて見てみると、以下のとおりであることが分かります。
lets_execute_cron
という workflow を定義している- その workflow では
triggers
を以下のように定義している- 「日本時間で 毎日 18:10」に
lets_execute_cron
という workflow を実行する - 実行対象のブランチは
master
である
- 「日本時間で 毎日 18:10」に
- 実行される job は
build
である- job の定義は YAML の冒頭に書かれている
- その workflow では
他にも細かく設定できます。詳しくは 公式ドキュメント を読みましょう。
注意点
細かい注意点がいくつかあります。
- 新しい CircleCI の UI では履歴が正しく表示されないときがある?っぽいです
- 時刻指定の際のタイムゾーンは UTC(GMT) です
- したがって「日本の時刻から 9時間マイナスした時刻」を指定する必要があります
- また、日付を指定する場合には、日付のまたぎによるミスに注意する必要があります
- YAML においては
*
は特別な文字なので、cron:
で指定する値はクォートする必要があります - 例に挙げた YAML の
workflows
の定義では cron 以外に job が発動しないため、例えば push とともに反映させるためにはそのための workflow を追加する必要があります- 追加すべき workflow の書き方は簡単で、workflow の名前を任意に付けて、その直下に
jobs
を指定するだけです - 「push があった際に常に実行する workflow」を付け加えた冒頭の YAML の例は、以下のようになります
- 追加すべき workflow の書き方は簡単で、workflow の名前を任意に付けて、その直下に
workflows: version: 2 lets_execute_cron: triggers: - schedule: cron: '10 09 * * *' filters: branches: only: - master jobs: - build lets_execute_build_job_when_pushed: jobs: - build
*1:ぶっちゃけ公式ドキュメントを読み込めばほぼ分かってしまいます