CircleCI のバージョンが 2.1 になって久しいですが、本ブログは変わらず 2.0 のバージョンを使い続けていました。
久しぶりにブログを動かして見たところ、新しい UI に対応し始めたよ!ということと、Pipeline 使ってみてね!という雰囲気を感じたため、本ブログも 2.1 にバージョンを上げ、使ってみることにしました。
なお、 CircleCI 2.0 でも
experimental:
pipelines: true
と書くことで、pipeline は有効にできるようです。
変更箇所
executor: 実行環境を宣言できる
これまでは、実行環境をジョブごとに何度も記載しなくてはならなかったため、私は yml の継承の機能を利用して以下のように書いていたのですが、
defaults: &defaults
docker:
- image: tanukiti1987/blog-base:0.3
working_directory: /root/blog
environment:
TZ: "/usr/share/zoneinfo/Asia/Tokyo"
jobs:
build:
<<: *defaults
steps:
# ....
deploy:
<<: *defaults
steps:
# ....
2.1 には executor
というものが追加され、CircleCI の config の記述として以下のようなものがサポートされました。
executors:
blog-base:
docker:
- image: tanukiti1987/blog-base:0.3
working_directory: /root/blog
environment:
TZ: "/usr/share/zoneinfo/Asia/Tokyo"
jobs:
build:
executor: blog-base
steps:
# ....
deploy:
executor: blog-base
steps:
# ....
記述量はさほど変わりませんが、命名がしっかりしたことで、多少見通しは良くなったような気がします。
commands: よく使う steps をコマンドとして宣言できる
これも executor
と親しい感じの書き方ですが、 build
と job
で同じような step を何度も記述している。という場合に、その記述を一つにまとめられる記述方式が追加されました。
例えば、bundle install
をキャッシュ使いつつ、やろうとする場合には以下のようにまとめてコマンドとして宣言できます。
commands:
bundle-install:
description: "bundle install"
steps:
- restore_cache:
keys:
- bundle-{{ checksum "Gemfile.lock" }}
# if cache for exact version of `Gemfile` is not present then load any most recent one
- bundle
- run:
name: bundle install
command: |
gem update bundler
bundle -j8 --path=vendor/bundle
- save_cache:
key: bundle-{{ checksum "Gemfile.lock" }}
paths: /root/blog/vendor/bundle
jobs:
build:
executor: blog-base
steps:
- checkout
- bundle-install
executor
と似た感じですが、様々な job を宣言するような config の中では役立ちそうな感じですね!
cron: 定期実行のジョブが宣言できる!
本ブログでは使っていないのですが、ドキュメントを見る限り、workflow
に cron
ができそうな記述があり、胸アツです。
workflows:
version: 2
nightly:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- master
- beta
jobs:
- test
実行時間があまり長くなりすぎると無料で使い続けるのは厳しいかもですが、 小粒なジョブであれば、CircleCI で動かすこともできそうな感じですね!
CI/CD の用途としてより一層強化されてきている感じがします。
以上、だいぶ遅れたCircleCI2.1 への所感でした。