問題

ローカル環境でcircleciコマンドを実行するときに、環境変数を渡したいことがあると思う。こんなときどうすれば良いだろうか?

解決策

circleci build --env VAR=VAL

以上。

試してみた

config.yml

version: 2
jobs:
  build:
    docker:
      - image: circleci/ruby:2.5.0-node-browsers
        user: root
    steps:
      - run:
          command: |
            echo $VAR1

結果:

$ circleci build --env VAR1=FOOOOOOOOOO

====>> Spin up Environment
Build-agent version 0.0.4666-05dad47 (2018-01-25T18:14:33+0000)
Starting container circleci/ruby:2.5.0-node-browsers
  using image circleci/ruby@sha256:3cd92320f770f83d78b63622092afa609c77e29cdd8ecb357c99d9894512d0b0

Using build environment variables:
  BASH_ENV=/tmp/.bash_env-localbuild-1517491823
  CI=true
  CIRCLECI=true
  CIRCLE_BRANCH=master
...
====>> echo $VAR1

  #!/bin/bash -eo pipefail
echo $VAR1

FOOOOOOOOOO
Success!

複数の環境変数を渡したい場合

config.yml

version: 2
jobs:
  build:
    docker:
      - image: circleci/ruby:2.5.0-node-browsers
        user: root
    steps:
      - run:
          command: |
            echo $VAR1
            echo $VAR2

結果:

circleci build --env VAR1=FOOOOOOOOOO --env VAR2=WRYYYYYYYYYYYYY

====>> Spin up Environment
Build-agent version 0.0.4666-05dad47 (2018-01-25T18:14:33+0000)
Starting container circleci/ruby:2.5.0-node-browsers
  using image circleci/ruby@sha256:3cd92320f770f83d78b63622092afa609c77e29cdd8ecb357c99d9894512d0b0

Using build environment variables:
  BASH_ENV=/tmp/.bash_env-localbuild-1517492003
  CI=true
  CIRCLECI=true
  CIRCLE_BRANCH=master
...
====>> echo $VAR1
echo $VAR2

  #!/bin/bash -eo pipefail
echo $VAR1
echo $VAR2

FOOOOOOOOOO
WRYYYYYYYYYYYYY
Success!

複数の環境変数を渡すもっと良い方法がある気がするので引き続き調査中。

参考

https://discuss.circleci.com/t/injecting-custom-environment-variables-when-running-locally-via-circleci-cli/11234/11