node.js - 特拉维斯变量在 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",
解决方案
有几种方法可以向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/
推荐阅读
- amazon-web-services - AppSync - 当数组属性具有与之关联的`@key`指令时,无法使用数组创建架构
- java - 将 Pulsar appender 与 Ignite logger 一起使用时,具有名称的 Producer 已连接到主题
- c - 如何在微控制器固件中实现延迟
- php - 无法使用 Symfony 进程从 PHP-FPM 运行任何命令
- linkedin - LinkedIn Share API 为我们的 URL 抛出 500 错误
- angular - 如何处理 spring security + angular 中的 401 错误?
- c++ - LNK1104 cannot open file boost_thread-vc140-mt-gd-1_61.lib
- sql - Ruby on Rails - 引用表的值大于 0 的 Active Record 过滤器
- authentication - Nuxt 创建共享应用状态的微应用
- sql - 在查询 oracle 中更新列中的第一个字符