LoginSignup
53
28

More than 5 years have passed since last update.

Circle-CI 2.0のcron triggerを使って、定期実行をする

Posted at

Circle-CIでいつのまにcron実行する機能が追加されていたので試した。

TravisCIには少し前から入っていた機能。

Circle-CIの場合、TravisCIほとさくっと使える感じではなかったのでメモ

どんな時に使えるか?

例えばこんなユースケースが思いつく

  • E2Eなど重くて全branchで実行するには辛いもの
  • 外部のAPIに引きづられて落ちてないかのテスト
  • masterを定期的にstagingと同期するdeploy処理

今回は一番上の「branchにCIは回したい、でも重いテストだけは一日一回にしたい」みたいな場合で考えてみる

config

とりあえず最終的にどうなるかを記載。

circleci/config.yml
version: 2
jobs:
  test: # 普通のテスト
    docker:
      - image: node:8
    steps:
      - checkout
      - run: npm run test
  heavy_test: # 重いテスト
    docker:
      - image: node:8
    steps:
      - checkout
      - run: npm run heavy_test

workflows:
  version: 2
  normal_test_workflow:
    jobs:
      - test
  nightly_workflow:
    triggers:
      - schedule:
          cron: "0 1 * * *" # UTCで記述。この場合は朝10時
          filters:
            branches:
              only:
                - master
    jobs:
      - heavy_test

ポイントは下記の通り

  • Circle-CIのconfigは2.0向けに書く必要がある
    • workflowを利用するので、workflow形式で。
  • triggerの処理は、jobではなく、workflowに対して設定する必要がある。
    • 今回の場合だと、通常のbranch向けのjobとworkflowと、一日一回実行するjobとworkflowを記述する必要がある
    • 定期実行が通常のテストと同じで良いなら、jobを一つ、workflowだけ2つ書く感じになる。
    • それぞれでの共通化については、以前別記事を書いたので、必要があれば参考にしていただきたい
  • Cronは普通にcrontab形式。ただし UTC なので注意。
  • 記述を間違うと、失敗通知すら来ず無視されるのつらい
53
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
28