【发布时间】:2022-07-06 11:56:14
【问题描述】:
以下是我用于 gitlab-runner 管道以执行 cypress 测试的 Dockerfile。
FROM cypress/base:14.18.1 as dependencies
WORKDIR /app
COPY .yarn ./.yarn
COPY package.json yarn.lock tsconfig.json .yarnrc.yml jest.config.js .lighthouserc.json ./
COPY mailer/package.json ./mailer/package.json
COPY inventory/package.json ./inventory/package.json
COPY backoffice/package.json ./backoffice/package.json
COPY storefront/package.json ./storefront/package.json
COPY db/package.json ./db/package.json
COPY e2e/package.json ./e2e/package.json
RUN yarn
COPY mailer ./mailer
COPY db ./db
COPY inventory ./inventory
COPY backoffice/ ./backoffice/
COPY storefront/ ./storefront/
COPY e2e ./e2e
RUN cd mailer && yarn run tsc <-- Error seems to occur here
RUN cd db && yarn run tsc
RUN cd inventory && yarn run tsc
RUN yarn run e2e:run <-- this will actually run the application and the tests
通过RUN yarn 命令的安装过程看起来成功,但是在标记的行我得到以下错误:
#30 [27/39] RUN cd mailer && yarn run tsc
#30 sha256:73ba143f22b6fb626fd5f0e97a5716b3ce1d9a4fbc38da1c9bf5bc940ec08299
#30 16.32 Usage Error: The project in /app/package.json doesn't seem to have been installed - running an install there might help
#30 16.32
#30 16.32 $ yarn run [--inspect] [--inspect-brk] [-T,--top-level] [-B,--binaries-only] <scriptName> ...
#30 ERROR: executor failed running [/bin/sh -c cd mailer && yarn run tsc]: exit code: 1
但该消息对我来说没有意义,因为安装命令在上一步中成功运行。
这个错误的原因可能是什么?
更新: 值得注意的是,这个错误只出现在新的 gitlab-runner 上。在旧的上,它工作正常。但我无法想象任何可能导致这种错误的 gitlab-runner 配置。新跑步者使用的所有图像都与旧跑步者相同
【问题讨论】:
-
看起来你从来没有在
RUN yarn install安装各种package.json文件中的包,所以容器中不会有node_modules树。 -
(看起来您在这里安装了六个不同的应用程序;考虑将其分成六个单独的图像。)
-
@DavidMaze 哦,对不起,我的错。我不小心剪切而不是复制
RUN yarn命令。我加回来了。是的,每个组件都可以单独运行,但是由于它们位于由工作区分隔的同一个存储库中并且相互依赖以运行测试,因此将它们拆分会增加更多复杂性 -
您是否也为每个子目录
RUN cd mailer && yarn?每个子目录是否也有需要复制的yarn.lock文件? -
@DavidMaze 通常不需要,但我试过了。这导致了相同的错误消息。我确认在容器的
/app目录中存在根级别的锁定文件