在 gitlab runner 中设置节点环境变量

Den*_*ear 5 mongodb node.js gitlab-ci gitlab-ci-runner

我尝试使用 gitlab runner 来测试和构建我的节点服务器,但在尝试自动化测试时遇到了一个小问题。在我的 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"
},
Run Code Online (Sandbox Code Playgroud)

所以NODE_ENV=Dev会加载不同的设置文件。一个使用 mongodb url 的服务器"mongodb://mongo/DBName",当我在本地主机上运行时,npm test服务器崩溃(正如它应该的那样),因为它无法使用开发设置文件连接到 mongo。但是,当我在运行器上运行 GitLab 中的项目时,它不会连接到数据库,因为它使用具有 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
Run Code Online (Sandbox Code Playgroud)

Cli*_*ara 5

这是因为 gitlab 上运行的 docker 镜像是基于 Linux 的,因此该set命令不起作用。

有两种解决方案。

解决方案1

通过执行以下操作,使用此处记录的跨环境 npm 模块:

像这样安装跨环境:

npm install --save-dev cross-env
Run Code Online (Sandbox Code Playgroud)

然后将你的 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"
},
Run Code Online (Sandbox Code Playgroud)

解决方案2

只需修改Linux 的脚本即可,更快更简单。它应该是这样的。注意 npm run 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"
},
Run Code Online (Sandbox Code Playgroud)

注意:从长远来看,解决方案 1更好,而解决方案 2速度但比较脏