2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Circle CIでジョブのスケジュール実行時にハマりやすい箇所とその解決方法

Last updated at Posted at 2020-06-03

Circle CIで、ジョブをスケジュール実行しようとしたら色々とハマったのでまとめです。
ちなみに、Circle CI 2.0のworkflowsを前提としています。

ハマりやすい箇所

1) そもそも動かない

Circle CIはyaml形式で処理を記述しますが、yamlのsyntaxエラーはチェックしてくれる一方で、**記述内容の妥当性チェックはしてくれません。**そのため、記述内容に問題があっても、Circle CIは何も通知してくれず、課題発見・解決が面倒です。後述の「基本的な作業方針」のように、少しずつ作業を進めて、問題の切り分けをしやすくした方が無難です。

2) (関連のない)定義済みのジョブがPull Requestのたびに動いてしまう

少しずつ作業を進めていこうとすると、ネックになる課題です。
これは、GitHubのコミットメッセージに[ci skip]または[skip ci]を追記することで回避できます。
(参考)https://circleci.com/docs/2.0/skip-build/

3) cronに"H"を指定しても動かない

Jenkinsユーザがまず最初につまづく箇所だと思います。
cronに"H"を指定できるのは、Jenkins独自の仕様です。0などの整数値を指定しましょう。
(参考)https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax

4) cronに"*/3"のような指定をしても動かない

Circle CIは、この表記方法をサポートしていません。
cron: "* 0,3,6,9 * *"のように、カンマ区切りで列挙する必要があります。
(参考)https://circleci.com/docs/2.0/workflows/#specifying-a-valid-schedule

5) 指定した時間にcronが動かない

Circle CIは、タイムゾーンがUTCになっています
そのため、日本時間前提で考える場合、実行したい時間から9を引いた値を設定する必要があります。
(例) 15時=6(=15-9)、午前1時=16(=25-9)

基本的な作業方針

いわゆる「divide and conquer」です。
一度にまとめて作業をして混乱することを避け、下記のように少しずつ作業を進めて、問題の切り分けをしやすくすると良いです。

1) run "echo xxx"のような簡単なジョブを作り、動作確認をしやすくする

jobs:
  -- 中略 --
  # ここ
  temp-task:
    docker:
      - image: docker:18.09.6
    steps:
      - run: echo "Testing"

workflows:
  version: 2
  main:
    jobs:
      - temp-task

2) まずfiltersが正常に動作することを確認する

jobs:
  -- 中略 --
  temp-task:
    docker:
      - image: docker:18.09.6
    steps:
      - run: echo "Testing"

workflows:
  version: 2
  main:
    jobs:
      - temp-task:
          # ここ
          filters:
            branches:
              only: test

3) filtersが正常に動作することを確認したら、cronの動作確認に移る

jobs:
  -- 中略 --
  temp-task:
    docker:
      - image: docker:18.09.6
    steps:
      - run: echo "Testing"

workflows:
  version: 2
  main:
    jobs:
      - temp-task:
    # ここ 
    triggers:
      - schedule:
          cron: "0 3 * * *"
          filters:
            branches:
              only: test

4) cronも正常に動作することを確認したら、本来動かしたいjobをcron+filtersで動かすようにする

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?