はじめに
CircleCIの動作確認を毎回Web上でポチポチ確認していましたが,ローカルで実行やバリデーションが出来ないのか気になり,調べたところ,CircleCI CLIがありました.
公式docによると,
CircleCI CLI は、CircleCI の高度で便利なツールの多くを、使い慣れた端末から利用できるコマンドライン インターフェイスです。 CircleCI CLI を使用すると、以下のような作業が行えます。
- CI の設定ファイルのデバッグとバリデーション
- ローカルでのジョブの実行
- CircleCI API のクエリ
- Orbs の作成、パブリッシュ、表示、管理
とのことで,なんか良さそうです.
インストール
公式docをみて入れます.Dockerなりご自由に使って環境を用意してください.curl,homebrew,Snapを用いてインストールができます.
本記事の作者は以下のバージョンで行っています.
❯ circleci version
0.1.10656+c7c1710
インストールができたら,CircleCI の API トークンを生成します. トークンを取得したら、以下を実行して CLI を構成します.
❯ circleci setup
APIトークンをペーストしましょう.
やってみる
テスト用に以下のymlファイルを作成しました.実行するとgolangのversionを示す簡単なものです.
version: 2.1
jobs:
build:
docker:
- image: circleci/golang:1.15
steps:
- run:
name: echo go version
command: go version
バリデーション
コマンドはcircleci config validate
使用します.
- 構文が正しい場合
❯ circleci config validate
Config file at .circleci/config.yml is valid.
- 構文が不正な場合
❯ circleci config validate
Error: Unable to parse YAML
mapping values are not allowed here
in 'string', line 9, column 18:
command: go version
^
ジョブの実行
circleci local execute --job JOB_NAME
でジョブ実行できます.
❯ circleci local execute
(いろいろ省略)
go version
go version go1.15 linux/amd64
Success!
注意点(2020/10現在)
circleciを使用してジョブをローカルで実行できるのは非常に便利ですが,いくつかの制限事項があります
-
ローカル ジョブでは Machine Executor を使用できない.
-
add_ssh_keysを使用してSSHキーを追加できない.
-
workflowが使えない
CLI ツールでは、ワークフローの実行がサポートされていません。 基本的にワークフローは、複数のマシンで行うビルドの並列実行を活用することによって、高速で複雑なビルドを可能にします。 CLI はユーザーのマシンでのみ動作するため、単一の jobs (ワークフローを構成する一要素) しか実行できません。 -
キャッシュが使えない
現在、ローカル ジョブではキャッシュがサポートされていません。 設定ファイルに save_cache ステップまたは restore_cache ステップが含まれている場合、circleci では該当のステップがスキップされ、警告が表示されます。 -
checkoutのリポジトリ
Web上でジョブの実行をするとgithubのリポジトリから取得するが,CLIではローカルにあるリポジトリから取得してくる. -
Web上で設定していた環境変数は使えないので引数で与える
セキュリティ上の理由から、UI で構成した暗号化環境変数は、ローカルのビルドにはインポートされません。 代わりに、-e フラグを使用して CLI に環境変数を指定できます。 (例: circleci build -e VAR1=FOO -e VAR2=BAR)
おわりに
Web版に比べて,いくつか制限がありますが,簡単なジョブの実行やバリデーションチェックは手軽に行えることが分かりました.キャッチアップや検証環境のためには使えるのではないでしょうか.
個人的にはworkflowはサポートして欲しかったですが,言われてみればローカルマシン上では厳しいのでしょうね...