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
Q. BASH_ENV とは?
Q. CircleCI はどのタイミングで BASH_ENV 環境変数を設定しますか?
Q. CircleCI は、 BASH_ENV 環境変数について、何か特殊な処理をしていますか?
Tags: bashcircleci
関連記事
Github における ssh 接続の認証認可の制約とその対処
2022/9/4