为啥我的 .gitlab-ci.yml 在纱线测试中不断失败,并出现错误“/bin/sh: 1: react-scripts: not found”?

Posted

技术标签:

【中文标题】为啥我的 .gitlab-ci.yml 在纱线测试中不断失败,并出现错误“/bin/sh: 1: react-scripts: not found”?【英文标题】:Why does my .gitlab-ci.yml keep failing on yarn test with error "/bin/sh: 1: react-scripts: not found"?为什么我的 .gitlab-ci.yml 在纱线测试中不断失败,并出现错误“/bin/sh: 1: react-scripts: not found”? 【发布时间】:2021-04-21 14:33:01 【问题描述】:

这里我有一个使用 npx create-react-app 创建的简单反应应用程序。

管道成功提取缓存,但在 yarn test --watchAll=false 上失败,错误为“/bin/sh: 1: react-scripts: not found”。

我该如何解决这个问题?

react 应用程序位于 src/client 目录中,因此 before_script 到 cd 正确目录中,如下面的 yml 文件所示。

.gitlab-ci.yml:

image: node:latest

default:
  before_script:
    - cd src/client

stages:
  - build
  - test

cache:
  paths:
    - node_modules/

build_react:
  stage: build
  script:
    - yarn install
    - yarn build
  artifacts:
    expire_in: 1 hour
    paths:
      - build

test_react:
  stage: test
  script:
    - pwd
    - yarn test --watchAll=false

【问题讨论】:

GitLab CI 是否保留阶段之间的上下文?您可能需要在测试阶段再次安装。 通过使用缓存,node_modules 在阶段之间共享。我尝试在另一个项目中设置一个反应应用程序,所有内容都在根目录中,所以在 .gitlab-ci.yml 我不需要 cd 进入不同的目录并且它工作得很好,所以我认为导致问题的事情是改变目录,不知道为什么。作为一种解决方法,我目前正在一个阶段完成所有工作,直到找到解决方案。 调试建议:在 test_react 作业中,列出“src/client”以查看它是否确实存在。如果不存在,则必须将其显式传递给测试阶段。 【参考方案1】:

在运行任何脚本之前下载并提取工件,因此它将被提取到project_root/,然后您的默认 before_script 将运行。您应该可以通过../../build 引用构建目录,或者在您的test_react 作业中将其移动到src/client

【讨论】:

以上是关于为啥我的 .gitlab-ci.yml 在纱线测试中不断失败,并出现错误“/bin/sh: 1: react-scripts: not found”?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 gitlab-ci.yml 推送

gitlab CI - 安装正确版本的纱线

Gitlab-CI:测试作业失败

.gitlab-ci.yml 管道中的 Plotly-Dash 测试因 NameError 失败:未定义名称“DashComposite”

从 Jenkins Ci 服务迁移到 gitlab-ci.yml

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