在 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 快速 但脏