生産性向上ブログ

継続的な生産性向上を目指すエンジニアのためのブログ

CircleCI 2.0 で Workflow の triggers を使って定期実行ジョブ(Nightly Builds)を実現する

過去に、『CircleCI 2.0 で定期実行ジョブ(Nightly Builds)を実現する』という記事を書いたのですが、現在の CircleCI 2.0 ではもっと楽に cron 的な定期実行ジョブを記述できるようになっているので補足記事を書きます。

前の記事を書いた時点では CircleCI 自体にジョブ実行タイミングをスケジュールする機能がなかったので、外部の Lambda なりなんなりを使って API を叩くという遠回しな手段をとっていましたが、今では Workflows に "triggers" という構文が追加されているので、CircleCI のみで完結して定期実行ジョブを記述できるようになっています。

circleci.com

↑の記事を見てもらうのが一番わかりやすいと思いますが、英語しかないので一応こちらでも解説します。

version: 2
jobs:
  build:
    docker:
      - image: buildpack-deps:trusty
    steps:
      - run:
          command: echo 'build'
  nightly-build:
    docker:
      - image: buildpack-deps:trusty
    steps:
      - run:
          command: echo 'nightly-build'
workflows:
  version: 2
  commit-workflow:
    jobs:
      - build
  scheduled-workflow:
    triggers:
      - schedule:
          cron: "0 1 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
      - nightly-build

上記の設定ですと、以下の 2 つのジョブが設定されます。

  • コミット時に commit-workflow が開始され、その中で build ジョブが実行されることにより "build" と echo される
  • 日本時間で毎日午前 10 時(UTC で毎日午前 1 時)に schedule-workflow が開始され、その中で nightly-build ジョブが実行されることにより "nightly-build" と echo される

triggers 構文は、workflows の中でのみ記述できる設定です。これを書かなければこれまで通りコミット時に実行されます。

schedule の中に書かれている cron に、 crontab で使われるのと同じ書式で実行タイミングを記述します。UTC として解釈されるので注意が必要です。filters も必須パラメータで、どのブランチに対して実行するかを制限します。

前回の記事と比較して、こちらのほうが直観的ですし、圧倒的に楽になりました。CircleCI はユーザーがほしい機能を着実に実装してくれるイメージがあるので、今後も楽しみです。