ぴろログ

Output Driven

CircleCIのジョブを定期実行させる / scheduleの利用

CircleCIでジョブを定期的に走らせたい

以下のような背景から、CircleCIのジョブを日次で定期実行したい要件があり、workflowscheduleを利用したときの作業ログです。

  • GitHubとCircleCIによるCI環境を構築している。
    • masterブランチへのマージをトリガとして、CircleCIのジョブを実行するWorkflowを構築。
  • 日次でmasterブランチの状態を強制したい、という要件が発生。
    • 実環境がmasterと異なる状態になりやすい性質。(後述)

こちらを参考に設定しました。

circleci.com

設定方法

.ymlファイルをいじります。

circleci.com

CircleCI は、テスト環境の構築方法や実行するテスト内容の定義に YAML ファイルを使います。 CircleCI 2.0 では、config.yml というファイル名で、隠しフォルダである .circleci ディレクトリ配下に作成しておく必要があります。

  • config.ymltriggers: - schedules と記述。
  • cron形式で時刻を指定。

これで毎朝5:00にジョブが実行されます。時刻の設定はUTCとして認識されるので、-9時間で設定します。

# config.yml
 ・・・
workflows:
  version: 2
  patrol:
    triggers:
      - schedule:
          #JSTのAM05:00に定期実行
          cron: "0 20 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
      - apply:
          filters:
            branches:
              only: master
  〜 以下、通常のワークフロー処理 〜

patrolの命名理由

IAMリソース管理のためにMIAMを利用することになり、GitHubでIAMリソースを宣言(IAMfile)、CircleCIで処理、という仕組みをつくりました。

github.com

複数のAWSアカウントを一括管理するのですが、そのうちの一つに社員が自由に使えるAWS環境があります。sandboxとしてサービス提供用AWSアカウントとは切り離し、AdministratorAccessポリシーをあげちゃってます。ただIAMユーザの作成についてはガバナンスを効かせておきたいので(外部の人間がサインインできるIAMユーザとか作られたら困る。。)、日次でIAMまわりをリセットすることにした次第です。

で、patrol(パトロール)。