CircleCIでジョブを定期的に走らせたい
以下のような背景から、CircleCIのジョブを日次で定期実行したい要件があり、workflow
の schedule
を利用したときの作業ログです。
- GitHubとCircleCIによるCI環境を構築している。
- masterブランチへのマージをトリガとして、CircleCIのジョブを実行するWorkflowを構築。
- 日次でmasterブランチの状態を強制したい、という要件が発生。
- 実環境がmasterと異なる状態になりやすい性質。(後述)
こちらを参考に設定しました。
設定方法
.ymlファイルをいじります。
CircleCI は、テスト環境の構築方法や実行するテスト内容の定義に YAML ファイルを使います。 CircleCI 2.0 では、
config.yml
というファイル名で、隠しフォルダである.circleci
ディレクトリ配下に作成しておく必要があります。
- config.ymlでtriggers: - 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で処理、という仕組みをつくりました。
複数のAWSアカウントを一括管理するのですが、そのうちの一つに社員が自由に使えるAWS環境があります。sandboxとしてサービス提供用AWSアカウントとは切り離し、AdministratorAccessポリシーをあげちゃってます。ただIAMユーザの作成についてはガバナンスを効かせておきたいので(外部の人間がサインインできるIAMユーザとか作られたら困る。。)、日次でIAMまわりをリセットすることにした次第です。
で、patrol(パトロール)。