CircleCI 上の BASH_ENV 環境変数について

Published: 2021/9/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 してから、実行対象のスクリプトなどの実行に入る。 例えば、 bash の man ページから抜粋して、この挙動は大体以下と等価。

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

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

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

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

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

サマリー IN FAQ


Tags: bashcircleci

関連記事