在 gitlab runner 中设置节点环境变量
Setting node env variable in gitlab runner
我正在尝试使用 gitlab 运行ner 来测试和构建我的节点服务器,但是我 运行 在尝试自动化测试时遇到了一个小问题。在我的 package.json 我有脚本
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "set NODE_ENV=Dev&& node ./node_modules/jasmine/bin/jasmine.js"
},
因此 NODE_ENV=Dev
将加载不同的设置文件。一个使用 mongodb url "mongodb://mongo/DBName"
并且当我在本地主机上 运行 npm test
时服务器崩溃(正如它应该的那样)因为它无法连接到 mongo 使用 Dev 设置文件。但是当我 运行 GitLab 中的项目在 运行ner 上时,它不会连接到数据库,因为它使用具有 url 的非开发设置文件。 GitLab-ci 为什么没有设置 NODE_ENV 有什么原因吗?
下面是我的 GitLab-ci.yml
image: node:latest
stages:
- build
- test
cache:
paths:
- node_modules/
services:
- mongo
install_dependencies:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
test_with_lab:
stage: test
script:
- npm run test-init
- npm test
这是因为 gitlab 上的 docker 图片 运行 是基于 linux 的,因此 set
命令将不起作用。
有两种解决方案。
解决方案 1
使用 here 记录的跨环境 npm 模块
执行以下操作:
像这样安装跨环境:
npm install --save-dev cross-env
然后将您的 package.json 编辑为:
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "cross-env NODE_ENV=Dev node ./node_modules/jasmine/bin/jasmine.js"
},
解决方案 2
只需修改 linux 的脚本,更快更简单。这是它的外观。注意 npm 运行 test 不再适用于 windows。要避免这种情况,请使用上面的第一个解决方案。
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "NODE_ENV=Dev node ./node_modules/jasmine/bin/jasmine.js"
},
注意:解决方案1在长运行中更好,而解决方案2 是 快速 但脏
我正在尝试使用 gitlab 运行ner 来测试和构建我的节点服务器,但是我 运行 在尝试自动化测试时遇到了一个小问题。在我的 package.json 我有脚本
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "set NODE_ENV=Dev&& node ./node_modules/jasmine/bin/jasmine.js"
},
因此 NODE_ENV=Dev
将加载不同的设置文件。一个使用 mongodb url "mongodb://mongo/DBName"
并且当我在本地主机上 运行 npm test
时服务器崩溃(正如它应该的那样)因为它无法连接到 mongo 使用 Dev 设置文件。但是当我 运行 GitLab 中的项目在 运行ner 上时,它不会连接到数据库,因为它使用具有 url 的非开发设置文件。 GitLab-ci 为什么没有设置 NODE_ENV 有什么原因吗?
下面是我的 GitLab-ci.yml
image: node:latest
stages:
- build
- test
cache:
paths:
- node_modules/
services:
- mongo
install_dependencies:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
test_with_lab:
stage: test
script:
- npm run test-init
- npm test
这是因为 gitlab 上的 docker 图片 运行 是基于 linux 的,因此 set
命令将不起作用。
有两种解决方案。
解决方案 1
使用 here 记录的跨环境 npm 模块 执行以下操作:
像这样安装跨环境:
npm install --save-dev cross-env
然后将您的 package.json 编辑为:
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "cross-env NODE_ENV=Dev node ./node_modules/jasmine/bin/jasmine.js"
},
解决方案 2
只需修改 linux 的脚本,更快更简单。这是它的外观。注意 npm 运行 test 不再适用于 windows。要避免这种情况,请使用上面的第一个解决方案。
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "NODE_ENV=Dev node ./node_modules/jasmine/bin/jasmine.js"
},
注意:解决方案1在长运行中更好,而解决方案2 是 快速 但脏