CircleCI の設定ファイルでハマったらローカルで Validate チェックしよう


CircleCI の設定ファイルのエラーが直せない

下記のようなエラーが出て、いくら直してもどこが間違ってるのかわからなかった。

#!/bin/sh -eo pipefail
# Config does not conform to schema: {:workflows {:test_and_deploy {:jobs [{:test (not (map? nil))} {:deploy (not (map? nil)), :requires (not (map? a-clojure.lang.LazySeq)), :filters {:branches disallowed-key}}]}}}
# 
# -------
# Warning: This configuration was auto-generated to show you the message above.
# Don't rerun this job. Rerunning will have no effect.
false
Exited with code 1

設定ファイルの記述のどこかがおかしいことはわかっており、修正しようとしても毎回修正、コミット、プッシュするのはめんどくさい。

ローカルで Validate チェックしよう

CircleCI 公式で CLI ツールを提供しており、このツールで設定ファイル .circleci/config.yml の Validate チェックすることが出来る。この機能を使い設定ファイルの記述ミスを直し、正しいものになってからプッシュすることができますね。

circleci コマンドのインストール

公式に書いてある通りですが、Mac ユーザ Linux ユーザなら下記ワンライナーでインストール出来るようです。お手軽で便利ですね。

curl -fLSs https://circle.ci/cli | bash

ちなみに Mac ではインストール先は /usr/local/bin/circleci でした。

$ which circleci 
/usr/local/bin/circleci

circleci コマンドでの validate チェックの方法

一番簡単な validate の方法を紹介します。詳細はコマンドのヘルプや公式を見てください。

validate チェックしたいプロジェクトのプロジェクトルートに移動し、下記コマンドで確認する事ができます。

$ circleci config validate
Error: Config does not conform to schema: {:workflows {:test_and_deploy {:jobs [nil {:deploy (not (map? nil)), :requires (not (map? a-clojure.lang.LazySeq)), :filters {:branches disallowed-key}}]}}}

こんな感じで実際の CI まわしたときと同じようにエラーが出てきてくれました。

あとはこいつを直すだけですね。

私の場合は map じゃないところに hoge: のようにつけており、怒られていました。

誤)
      - test:
      - deploy:
          requires:
正)
      - test
      - deploy:
          requires:

circleci build

ちなみに、ローカルで CI と同様の実行をすることも出来るようです。

CircleCI 2.0 から docker 環境上で動くのでローカルに docker が入っていることが前提ではありますが、下記コマンドでローカルで CircleCI をエミュレートして実行することが出来ます。(もちろんローカルなので無料!)

circleci build

まとめ

やっぱり修正は手元で確認出来るようにしてから直すと圧倒的に早くて助かりますね。