Circle CI 2.0でenvironmentの中で環境変数を参照したい

Posted on
Circle CI
  • たとえば下記のような感じでCircleCIのビルド番号を参照して新たに環境変数をenvironmentセクションの中で定義しようとしても期待したとおり(c5f3e6619f3637af832c862918ad6e896d87b85d.zipみたいな)にはなりません。

  • .circleci/config.yml

environment:
  TEST_FILE_NAME: ${CIRCLE_SHA1}.zip
  • 結果、できない。
====>> Spin up Environment
Build-agent version 0.0.4892-489ba99 (2018-04-20T16:46:32+0000)
...
Using build environment variables:
  BASH_ENV=/tmp/.bash_env-localbuild-1524494655
...
  CIRCLE_SHA1=c5f3e6619f3637af832c862918ad6e896d87b85d

====>> echo $TEST_FILE_NAME
  #!/bin/bash -eo pipefail
echo $TEST_FILE_NAME
${CIRCLE_SHA1}.zip
  • work around感がありますが、$BASH_ENVに環境変数をexportするよう追記するstepを書くことで目的は達成できそうです。

  • .circleci/config.yml

steps:
  - run: echo "export TEST_FILE_NAME=${CIRCLE_SHA1}.zip" >> $BASH_ENV
  - run: echo $TEST_FILE_NAME
  • 結果、できる。
====>> echo "export TEST_FILE_NAME=${CIRCLE_SHA1}.zip" >> $BASH_ENV
  #!/bin/bash -eo pipefail
echo "export TEST_FILE_NAME=${CIRCLE_SHA1}.zip" >> $BASH_ENV
====>> echo $TEST_FILE_NAME
  #!/bin/bash -eo pipefail
echo $TEST_FILE_NAME
c5f3e6619f3637af832c862918ad6e896d87b85d.zip
Success!
  • あんまりDockerもCircle CIも詳しくないんですが、environmentセクションで定義する環境変数はコンテナにセットするやつなんで、スクリプトを評価して動的に値をセットすることが難しいのではないのかなと推測しています(が適当言ってるんでまったく参考にしないようにお願いします)。

参考

  • Reference an environment variable in “environment” yaml map? - CircleCI 2.0 / 2.0 Support - CircleCI Community Discussion