CircleCI 2.0 の .circleci/config.yml
を書き始めるときは circleci
コマンドを使うと効率が上がります。
TL;DR
- CircleCI 1.0 で使えた Test Commands は CircleCI 2.0 では使えない
- その代わりに CircleCI 2.0 では
circleci
コマンドが用意されている -
circleci
コマンドを使うと.circleci/config.yml
をローカルの Docker でテストできるので、わざわざ commit して push する手間が省ける
Test Commands は CircleCI 2.0 では使えない
CicleCI の各プロジェクトの設定画面には Test Commands という項目があります。
ここに書いたコマンドは設定ファイルをオーバーライドするので、追加したいコマンドをここで試してから circle.yml
に反映させるとスムーズに検証できました。ですが、"These settings are only for 1.0 builds" とあるように CircleCI 2.0 では使えません。
CircleCI 2.0 では circleci
コマンドを使う
CircleCI 2.0 では circleci
コマンドが用意されました。
CircleCI 2.0 は Docker で実行されるようになりました。この circleci
コマンドを使うとローカルの Docker 上で YAML ファイルの validate や build を行うことができます。
circleci
コマンドを試してみる
ここから先の作業は Docker が起動した状態で行ってください。私は Docker for Mac を使っています。
$ docker version
Client:
Version: 18.01.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: 03596f5
Built: Wed Jan 10 20:05:58 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.01.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: 03596f5
Built: Wed Jan 10 20:13:12 2018
OS/Arch: linux/amd64
Experimental: true
CLI のインストールはワンライナーです。
$ curl -o /usr/local/bin/circleci https://circle-downloads.s3.amazonaws.com/releases/build_agent_wrapper/circleci && chmod +x /usr/local/bin/circleci
$ which circleci
/usr/local/bin/circleci
今回は "Hello world!" を出力するだけのシンプルな設定で試します。
$ cat .circleci/config.yml
version: 2
jobs:
build:
docker:
- image: circleci/golang:1.9.2
working_directory: /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}}
steps:
- checkout
- run: echo 'Hello world!'
正しい YAML か確認するために validate してみます。
$ circleci config validate -c .circleci/config.yml
config file is valid
問題なさそうなので実際に build してみます。ローカルの Docker で実行されるので CircleCI の課金時間にはカウントされません。
$ circleci build
====>> Spin up Environment
Build-agent version 0.0.4658-97f1922 (2018-01-21T16:00:57+0000)
Starting container circleci/golang:1.9.2
image cache not found on this host, downloading circleci/golang:1.9.2
1.9.2: Pulling from circleci/golang
(snip)
Status: Downloaded newer image for circleci/golang:1.9.2
using image circleci/golang@sha256:c28d4147c954859fe5ac3721897b24740ab9e29b58cb914fe94847799e14a0ed
Using build environment variables:
BASH_ENV=/tmp/.bash_env-localbuild-1516776030
CI=true
CIRCLECI=true
CIRCLE_BRANCH=master
CIRCLE_BUILD_NUM=
CIRCLE_JOB=build
CIRCLE_NODE_INDEX=0
CIRCLE_NODE_TOTAL=1
CIRCLE_REPOSITORY_URL=git@github.com:manabusakai/aws-billing.git
CIRCLE_SHA1=f5b80899bb00d2bf7acd627c79456dfe4860cc03
CIRCLE_SHELL_ENV=/tmp/.bash_env-localbuild-1516776030
CIRCLE_WORKING_DIRECTORY=/go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}}
====>> Checkout code
#!/bin/sh
mkdir -p /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}} && cp -r /tmp/_circleci_local_build_repo/. /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}}
====>> echo 'Hello world!'
#!/bin/bash -eo pipefail
echo 'Hello world!'
Hello world!
Success!
注意点
circleci
コマンドではワークフローの機能は使えません。また、いくつか制限もあるので検証やデバッグ以外には使えません。
まとめ
circleci
コマンドを使うとローカルで .circleci/config.yml
の検証ができるので、わざわざ commit して push するのに比べて格段に効率が上がります。
この機能を教えてくれた同僚の @mumoshu さんに感謝!