CircleCI のローカル CLI を使用する

## 動機

ローカル環境でCircleCIの設定ファイルのデバッグを行いたかった．

## 環境

Homebrew: 2.2.2
circleci version: 0.1.5879+416032d

## 前提

CLI利用時の前提条件がいくつかある．[リファレンス](https://circleci.com/docs/ja/2.0/local-cli/#%E3%83%9E%E3%82%B7%E3%83%B3%E4%B8%8A%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%81%A7%E3%81%AE%E3%82%B8%E3%83%A7%E3%83%96%E3%81%AE%E5%AE%9F%E8%A1%8C)を参照．

## 手順

### 設定ファイルのバリデーション

```bash
# ヘルプ
$ circleci config validate -h
Check that the config file is well formed.

Usage:
  circleci config validate <path> [flags]
Aliases:
  validate, check

# 実行
$ circleci config validate -c .circleci/config.yml
$ circleci config check -c .circleci/config.yml
```

## ジョブの実行

CircleCI v2.1はサポートされていないとのこと．以前[Issue](https://github.com/CircleCI-Public/circleci-cli/issues/79)にはあがっていたが，クローズされてしまっているので，今後対応されるかは不明．

### バージョン2.0用の設定に置き換え

```bash
# 標準出力
$ circleci config process .circleci/config.yml

# ファイル出力
$ circleci config process .circleci/config.yml > ci_local.yml
```

### 実行

失敗

```bash
$ circleci local execute -c ci_local.yml
Docker image digest: sha256:1e869e97892e5398d1b1e91beb9ddb69403ac9ba4b3b74d2940a0d37a2471dd4
====>> Spin up Environment
Build-agent version 1.0.16017-6bc91f58 (2019-09-23T16:08:17+0000)
Error: Configuration errors: 1 error occurred:

* Cannot find a job named `build` to run in the `jobs:` section of your configuration file.
If you expected a workflow to run, check your config contains a top-level key called 'workflows:'
Step failed
Task failed
Error: 1 error occurred:

* Cannot find a job named `build` to run in the `jobs:` section of your configuration file.
If you expected a workflow to run, check your config contains a top-level key called 'workflows:'
```

ジョブ名のデフォルト値は"build"なので，異なる場合はジョブ名を付与する必要があった

```bash

$ circleci local execute --help | grep job
Run a job in a container on the local machine
      --job string            job to be executed (default "build")

$ circleci local execute --job test -c ci_local.yml
```

ちなみにこちらでも同様の結果が得られた．

```bash

$ circleci build --job test -c ci_local.yml
```

## 課題

下記のコマンドどちらでもジョブを実行することができたが，両者の違いまでは調べていない．

```bash

$ circleci build --job test -c ci_local.yml
$ circleci local execute --job test -c ci_local.yml
```

ヘルプの内容も同一だった．

```bash

$ circleci local execute -h
Run a job in a container on the local machine


Usage:
  circleci build [flags]

Flags:
      --branch string         Git branch
      --checkout-key string   Git Checkout key (default "~/.ssh/id_rsa")
  -c, --config string         config file (default ".circleci/config.yml")
  -e, --env -e VAR=VAL        Set environment variables, e.g. -e VAR=VAL
  -h, --help                  help for build
      --index int             node index of parallelism
      --job string            job to be executed (default "build")
      --node-total int        total number of parallel nodes (default 1)
      --repo-url string       Git Url
      --revision string       Git Revision
      --skip-checkout         use local path as-is (default true)
  -v, --volume strings        Volume bind-mounting

Global Flags:
      --host string    URL to your CircleCI host, also CIRCLECI_CLI_HOST (default "https://circleci.com")
      --token string   your token for using CircleCI, also CIRCLECI_CLI_TOKEN
```

## 参考

* [CircleCI のローカル CLI の使用](https://circleci.com/docs/ja/2.0/local-cli/#section=configuration) 
* [CircleCI 2.0 をlocalで動かす](https://qiita.com/selmertsx/items/45bd672c2c8ddab1981b)
* [.circleci/config.yml を書き始めるときは circleci コマンドを使うと効率が上がる](https://qiita.com/manabusakai/items/fc872cb3cce0fc3f39bf)