2017-06-06 49 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