CircleCI中如何基于现有环境变量动态创建新的环境变量?
问题根因
你的配置存在两个核心问题:
- 你使用单引号包裹
echo后的导出语句,Bash中单引号会禁用内部的变量替换,若未后续重新加载,变量不会被解析为实际值。 - CircleCI仅会在每个
run步骤启动前自动加载$BASH_ENV的内容,你在同一个run步骤中写入$BASH_ENV的内容不会被后续命令自动读取,需要手动触发加载。
解决方案
方案1:单步执行,手动加载环境变量
在写入$BASH_ENV后新增source命令加载最新配置,同时将单引号改为双引号确保变量正常替换:
- run: name: Run Tests command: | if [ "${CIRCLE_BRANCH}" == "master" ]; then echo "export FIREBASE_API_KEY=${PROD_FIREBASE_API_KEY}" >> $BASH_ENV elif [ "${CIRCLE_BRANCH}" == "develop" ]; then echo "export FIREBASE_API_KEY=${DEV_FIREBASE_API_KEY}" >> $BASH_ENV fi # 手动加载刚写入的环境变量 source $BASH_ENV yarn test
方案2:拆分步骤,利用CircleCI自动加载机制
将变量设置和测试运行拆分为两个独立的run步骤,第二个步骤启动时会自动加载你写入$BASH_ENV的所有变量:
- run: name: Set Branch Environment Variables command: | if [ "${CIRCLE_BRANCH}" == "master" ]; then echo "export FIREBASE_API_KEY=${PROD_FIREBASE_API_KEY}" >> $BASH_ENV elif [ "${CIRCLE_BRANCH}" == "develop" ]; then echo "export FIREBASE_API_KEY=${DEV_FIREBASE_API_KEY}" >> $BASH_ENV fi - run: name: Run Tests command: yarn test
补充说明
如果你的环境变量包含特殊字符,可在导出时加双引号包裹值:echo "export FIREBASE_API_KEY=\"${PROD_FIREBASE_API_KEY}\"" >> $BASH_ENV
内容的提问来源于stack exchange,提问作者supertux
相关产品推荐
相关产品推荐

