在gitlab runner中设置节点env变量

时间:2017-10-06 10:11:53

标签: node.js mongodb 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"
},

因此NODE_ENV=Dev将加载不同的设置文件。一个使用mongodb url "mongodb://mongo/DBName",当我在localhost上运行npm test时,服务器崩溃(因为它应该),因为它无法使用Dev setttings文件连接到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

1 个答案:

答案 0 :(得分:2)

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

有两种解决方案。

解决方案1 ​​

使用cross-env npm模块,如文档here所示 执行以下操作:

像这样安装cross-env:

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

注意解决方案1 ​​从长远来看更好,而解决方案2 快速但很脏