CircleCI と BASH_ENV について

Published at: 2021/09/18

CircleCI は、ジョブを跨いで環境変数の定義を持ち越したい場合には、その方法として BASH_ENV の環境変数を利用するように案内している。 (参考: https://circleci.com/docs/2.0/env-vars/#example-configuration-of-environment-variables )

#
echo 'export FOO=bar' >> "${BASH_ENV}"

BASH_ENV とは、 bash が non-interactive (スクリプト実行のインタプリタとして) 起動している場合に、もしそのファイルが存在すれば、まずはそれを source してから、実行対象のスクリプトなどの実行に入る。

そして、 circleci は、run の指定に対して、その中身を何のシェルで実行するかを、各 job ないし run step ごとに指定できるようになっている。 なので、デフォルトの shell としては、ただの bash が想定されていると考えられる。

また、 CircleCI 自体が BASH_ENV を設定するタイミングとしては、固定初期化 step その2である "Preparing environment variables" のタイミングで実行されていて、ここで /tmp ディレクトリ下に適当な名前のファイルとして、設定される模様。 (なお、ファイル名を設定するだけで、実際にファイルは run ステップで書き込んでいかないとファイル自体は生成されていない)

これらのことにより、各 run step においては、対象の docker image の上で、以下のような形で実行されていると考えられる。

$ circleciのシェルパラメータ 実際にrunの中身を書き込んだファイル

tags: bashcircleci