首页 > 解决方案 > 特拉维斯变量在 node.js 中不可用

问题描述

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

在此处输入图像描述

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

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

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",

标签: node.jsdockertravis-ci

解决方案


有几种方法可以向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

从文档中:

运行该命令时,Docker CLI 客户端会检查变量在本地环境中的值并将其传递给容器。如果未提供 = 并且该变量未在本地环境中导出,则不会在容器中设置该变量。

您还可以从文件加载环境变量。该文件应使用语法 =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

文档:https ://docs.docker.com/engine/reference/commandline/run/


推荐阅读