node.js - Circleci - 无法读取脚本内定义的环境变量

标签 node.js circleci

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

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应用程序无法读取环境变量,并且我也没有在printenv中看到。

我不想将环境变量直接写入circle.yml文件,因为我想让prod_config.shdev_config.sh动态更改。

我怎样才能做到这一点?

最佳答案

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

-里卡多·N·费里西亚诺
开发者传播者,CircleCI

关于node.js - Circleci - 无法读取脚本内定义的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44380338/

相关文章:

mysql - 如何从 Node.js 中的服务器向数据库 OrientDB 进行查询

javascript - Typescript 不/不能在泛型上使用传递的类型

javascript - 将异步/等待 block 中的部分代码提取到单独的函数中

android - CircleCI Android构建因Gradle 6.4失败

caching - 跳过缓存生成, key 的缓存已存在

docker - 带有circleci的SpringBoot:错误:/bin/bash:docker:找不到命令

javascript - Facebook Messenger 获取消息应用程序的访问 token

javascript - 如何使用 Typescript 映射进行 ElasticSearch 响应?

android - 在CircleCI中构建android应用程序测试时找不到gradlew

python - 如何使用 Tox 和 Poetry 在 CircleCI 中设置多个解释器?