circleci - 无法读取脚本内定义的env变量

时间:2017-06-06 02:12:47

标签: node.js circleci

我编写了一个用于设置env变量的脚本。

export DB_HOST='127.0.0.1'
export DB_USER='ubuntu'
export DB_PWD=''
export DB_NAME='circle_test'

我的circle.yml看起来像这样

machine:
  timezone: Asia/Taipei
  services:
    - mysql

dependencies:
  pre:
    - sudo apt-get update
    - nvm install 7.9 && npm install

test:
  pre:
    - source ./config/test_config.sh
    - sh ./config/test_config.sh
    - pwd
    - printenv
  override:
    - nvm use 7.9 && npm test

我的nodejs应用程序无法读取env变量,我也没有在printenv中看到过。

我不想直接将env变量写入circle.yml文件,因为我希望动态更改prod_config.shdev_config.sh

我该怎么做?

1 个答案:

答案 0 :(得分:2)

每个单独的命令(以-为前缀的行)都在自己的shell中运行。这就是您获取的环境变量在以下命令中不存在的原因。我看到了三种方式:

1)在circle.yml中定义您的环境变量。我知道你说你不想这样做,但这是迄今为止最简单,最明确的方法。

2)您可以使用source命令为需要变量的行添加前缀。例如:

test:
  override:
    - source ./config/test_config.sh; nvm use 7.9 && npm test

3)利用多线YAML:

test:
  override:
    - >
      source ./config/test_config.sh
      nvm use 7.9 && npm test

4)或者将所有命令放在Bash文件中,然后运行该脚本:

test:
  override:
    - ./all-commands-script.sh

-Ricardo N Feliciano
开发者传播者,CircleCI