CircleCI 2.1 はだいぶ進化してた

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 と親しい感じの書き方ですが、 buildjob で同じような 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: 定期実行のジョブが宣言できる!

本ブログでは使っていないのですが、ドキュメントを見る限り、workflowcron ができそうな記述があり、胸アツです。

workflows:
 version: 2
   nightly:
     triggers:
       - schedule:
           cron: "0 0 * * *"
           filters:
             branches:
               only:
                 - master
                 - beta
     jobs:
       - test

実行時間があまり長くなりすぎると無料で使い続けるのは厳しいかもですが、 小粒なジョブであれば、CircleCI で動かすこともできそうな感じですね!

CI/CD の用途としてより一層強化されてきている感じがします。

以上、だいぶ遅れたCircleCI2.1 への所感でした。

Related Posts