CircleCI CLI のセットアップと config.ymlの検証をローカルで行う
CircleCIのデプロイパイプラインはconfig.yml
ファイルにて制御されます。
こちらの修正を行った際には実際にパイプラインを実行してテストを行う必要がありますが、それだと都度都度デプロイが行われてしまい簡単にテストを行うことが難しいケースもありますし、時間がかかります。
CircleCIのCLIを使うことでローカルでconfig.yml
の検証が可能となるので、今日はこちらをやってみます。
CircleCI CLI
GitHubレポジトリはこちら。
CircleCI のさまざまな機能をターミナルから直接扱えるツールとなっていて、上記で触れた設定ファイルのローカル検証以外にも、動的な検証ファイルの構成(これは後日またブログで触れたいと考えています)、商用環境におけるパイプラインやワークフローの実行等の機能が備わっているようです。
さっそくやってみる
1. chocolately 環境の整備
Windows環境へのインストールはchocolately
を使うようなのでまずはその環境を整えます。
chocolately
はシステムフォルダであるC:\ProgramData\
へのインストールをデフォルトで行いますので、管理者権限でのインストールが必要です。このためVSCodeではなくPowerShellで実行します。
右クリックで管理者として実行
を選択します。
その後以下のコマンドを実行すればインストールは完了です。
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
インストールが完了したらVSCodeでchoco --version
を実行しバージョンが戻れば成功です。
2.初期セットアップ
引き続きPowerShellで以下を実行しCLI本体をインストールします。
choco install circleci-cli -y
ここからはVSCodeで作業を行っていきます。まずはCLI本体をインストールします。
次にマネージメントコンソールからAPIトークンを発行します。
画面右上のプロファイルをクリックしてUser Settings
画面を開き、Personal API Tokens
を選択します。
Create New Token
をクリックして適当な名前を付ければ発行されますのでそれをメモしておきます。
次にcircleci setup
コマンドを実行して、APIトークンと接続先のURLをCLIに保存します。
circleci setup
CircleCI API Token ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
API token has been set.
CircleCI Host https://circleci.com
CircleCI host has been set.
Setup complete.
Your configuration has been saved to C:\Users\h.kameda\.circleci\cli.yml.
Trying to query our API for your profile name... Hello, harunobukameda@gmail.com.
これで初期セットアップ完了です。
config.yml
のローカルベリフィケーション
3.では間違いを含む以下のファイルを作成してテストします。
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.0
steps:
- checkout
- run:
name: "Install"
commnd: npm install # ← "command" のスペルミス(検出される)
workflows:
build_and_test:
jobs:
- build
commnd: npm install # ← "command" のスペルミス(検出される)
command
がcommnd
になっていますね。
circleci config validate config.yml
を実行するといかが出力されます。
`circleci config validate` のエラーメッセージ
Error: config compilation contains errors: config compilation contains errors:
- ERROR IN CONFIG FILE:
- [#/jobs/build] 0 subschemas matched instead of one
- 1. [#/jobs/build] only 1 subschema matches out of 2
- | 1. [#/jobs/build/steps/1] 0 subschemas matched instead of one
- | | 1. [#/jobs/build/steps/1] expected type: String, found: Mapping
- | | | Shorthand commands, like checkout
- | | | SCHEMA:
- | | | type: string
- | | | INPUT:
- | | | run:
- | | | name: Install
- | | | commnd: npm install
- | | 2. [#/jobs/build/steps/1] extraneous key [run] is not permitted
- | | | when
/unless
step
- | | | Permitted keys:
- | | | - when
- | | | - unless
- | | 3. [#/jobs/build/steps/1/run] 0 subschemas matched instead of one
- | | | 1. [#/jobs/build/steps/1/run] expected type: String, found: Mapping
- | | | | SCHEMA:
- | | | | type: string
- | | | | INPUT:
- | | | | name: Install
- | | | | commnd: npm install
- | | | 2. [#/jobs/build/steps/1/run] required key [command] not found
- 2. [#/jobs/build] expected type: String, found: Mapping
- | Job may be a string reference to another job
- 3. [#/jobs/build] required key [type] not found
少しエラーが冗長で見づらいかな?という感じもありますけど、都度都度パイプラインを実行させるよりはもちろんはるかに簡単にエラーを検知できます。
このvalidate
コマンドは設定ファイルの構文をチェックするため、コマンドの間違いなどは対象外です。それは別の記事でまた触れていきたいと思いますが、実行時のコマンドミスをローカルでテストしたい場合は、circleci local execute を使うと実際にジョブをローカルでシミュレーションできます(Dockerが必要です)。
例えば以下のファイルはvalidate
は通ります。
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.0
steps:
- checkout
- run:
name: Install dependencies
command: npm install
- run:
name: Run tests
command: npm testt # ← わざと `testt` と間違えている
workflows:
version: 2
build_and_test:
jobs:
- build
command: npm testt # ← わざと `testt` と間違えている
Config file at config.yml is valid.
Discussion