为啥我的 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_scriptscripts 部分(如ls 部分)添加更多“调试”脚本,这将帮助您最终发现管道中出现的问题。

备注:如果不想将整个文件添加到 CI 中,可以将连接字符串单独添加为 Variable 类型。

【讨论】:

以上是关于为啥我的 gitlab-ci.yml 在 npm run test 上一直崩溃,而它在代码编辑器中工作?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 gitlab-ci.yml 推送

如何在 .gitlab-ci.yml 中指定通配符工件子目录?

如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载

获取使用 .gitlab-ci.yml 运行的 Windows Docker 容器

使用 gitlab-ci.yml 的 Docker 内部的 Docker

使用“:”的脚本命令导致 .gitlab-ci.yml 执行错误