为啥我的 gitlab-ci.yml 在 npm run test 上一直崩溃,而它在代码编辑器中工作?
Posted
技术标签:
【中文标题】为啥我的 gitlab-ci.yml 在 npm run test 上一直崩溃,而它在代码编辑器中工作?【英文标题】:Why does my gitlab-ci.yml keep crashing on npm run test, while it works in the code editor?为什么我的 gitlab-ci.yml 在 npm run test 上一直崩溃,而它在代码编辑器中工作? 【发布时间】:2021-12-30 15:03:18 【问题描述】:我已经为我的代码编写了测试并且它们都通过了。我使用 nodejs 来制作一个 REST api。我决定将所有内容提交到 gitlab 存储库。这一切都奏效了。然后我将 gitlab-ci.yml 文件添加到我的项目中。目前看起来是这样的:
stages:
- testing
Testing:
stage: testing
image: node:latest
services:
- mongo:latest
before_script:
- npm install --no-optional
script:
- npm run test
我对管道相当陌生,我不确定它有什么问题。我使用 MongoDB 作为我的数据库,我的连接字符串位于 .env 文件中。测试是使用 mocha 和 chai 编写的。 当我提交时,管道失败。我得到了错误:
ERROR: Job failed: exit code 1
当我进一步查看错误时,它说:
Error: Cannot find module '../controllers/UserController'
这很奇怪,因为我在我的代码编辑器(可视代码)中没有收到此错误,并且文件 UserController 位于控制器文件夹中。 我觉得 gitlab-ci.yml 缺少一些东西,但我不知道它是什么。任何提示将不胜感激。
【问题讨论】:
【参考方案1】:可能发生的其他事情是您在 gitlab 上运行不同的节点和 npm,然后在本地运行。我会确保它们同步并且 GitLab 不会随机更新 - 即,我会设置 node:16
或您确定运行正常的任何版本。
【讨论】:
【参考方案2】:我使用 MongoDB 作为我的数据库,我的连接字符串位于 .env 文件中。
如果您的应用程序是动态配置的,这可能是问题所在(我假设 您没有将秘密提交给版本控制),请确保转到您的 Project -> Settings -> CI/CD -> Variables
,点击 @ 987654324@ 并将您的.env
文件的内容放入其中,确保选择File
作为类型。
Gitlab 不允许名称 .env
作为有效名称,因此请确保使用其他值,例如 ENV
。
stages:
- testing
Testing:
stage: testing
image: node:latest
services:
- mongo:latest
before_script:
# ENV is exported as a path to your "ENV" file,
# this is copying it to a local '.env' file
- cp $ENV .env
# If you need it, this is a way to export the
# environment variables inside your file
- source .env; export $(cut -d= -f1 .env);
# Debugging the pipelines
- ls -lah
# Your old commands
- npm install --no-optional
script:
- npm run test
您可以在before_script
或scripts
部分(如ls
部分)添加更多“调试”脚本,这将帮助您最终发现管道中出现的问题。
备注:如果不想将整个文件添加到 CI 中,可以将连接字符串单独添加为 Variable
类型。
【讨论】:
以上是关于为啥我的 gitlab-ci.yml 在 npm run test 上一直崩溃,而它在代码编辑器中工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .gitlab-ci.yml 中指定通配符工件子目录?
如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载
获取使用 .gitlab-ci.yml 运行的 Windows Docker 容器