You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:57:05