2017-06-06 106 views
0

我编写了一个用于设置env变量的脚本。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.sh,dev_config.sh动态更改。

我该怎么做?

回答

1

每个单独的命令(以-为前缀的行)都在其自己的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

+0

Thanks @FelicianoTec h,我在circleci论坛发布了同样的问题。对不起再次打扰你了。 顺便说一句,这是真的很高兴得到circleci团队的及时答案:) –

+0

它根本没有打扰。在两个地方发帖都是有益的。将您的答案翻倍,再加上Stack Overflow意味着未来用户对此问题的更多可见性。 – FelicianoTech