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)
这是因为 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速度快但比较脏
| 归档时间: |
|
| 查看次数: |
9764 次 |
| 最近记录: |