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/
我正在使用控制台和 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/