Travis 变量在 node.js 中不可用

Travis variables not available in node.js

我正在使用控制台和 travis.yml 设置 travis 环境变量,所以当我 运行 在 travis 上构建时,所有变量都被导出,例如

我在控制台中设置的变量可以从 travis 脚本访问,因为 docker 构建的容器被部署到 docker 并且代码被推送到 AWS。

我遇到的问题是从 node.js 测试中访问这些变量,我从脚本 运行ning:

before_install:
  - docker build -t mydocker/api-test -f ./server/Dockerfile.dev ./server

script:
  - docker run -e CI=true mydocker/api-test npm test

当我尝试使用 process.env.TEST_ENV 或 process.env.TEST_VAR 或任何其他方法访问这些变量时,我变得不确定。

我正在使用此脚本从节点运行 进行测试:

"test": "NODE_ENV=test nyc --reporter=html mocha --timeout 10000 \"src/**/*.test.js\" --require @babel/polyfill --require @babel/register --recursive --exit",

有多种方法可以向您的容器声明和公开 ENV 变量。这里的问题是您在哪里将 ENV 变量暴露到您的 travis 管道中,而不是暴露到您的 containers 中。为了向您的容器公开 ENV 变量,您有多种选择:

  • 通过Dockerfile:

    # default value

    ENV hey

    # a default value

    ENV foo /bar

    # or

    ENV foo=/bar

  • 设置环境变量(-e, --env, --env-file)

export VAR1=value1
export VAR2=value2

$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2

来自文档:

When running the command, the Docker CLI client checks the value the variable has in your local environment and passes it to the container. If no = is provided and that variable is not exported in your local environment, the variable won’t be set in the container.

您还可以从文件加载环境变量。此文件应使用语法 =value(将变量设置为给定值)或(从本地环境获取值),并使用 # 进行注释。

$ cat env.list
# This is a comment
VAR1=value1
VAR2=value2
USER

$ docker run --env-file env.list ubuntu env | grep VAR
VAR1=value1
VAR2=value2
USER=denis

Documentation: https://docs.docker.com/engine/reference/commandline/run/