为啥我的 .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 管道中的 Plotly-Dash 测试因 NameError 失败:未定义名称“DashComposite”