98
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.circleci/config.yml を書き始めるときは circleci コマンドを使うと効率が上がる

Last updated at Posted at 2018-01-24

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 という項目があります。

CircleCI の 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 さんに感謝! :clap:

98
62
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
98
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?