纱线安装错误“ENOENT:没有这样的文件或目录
Yarn install errors with "ENOENT: no such file or directory
我有一个 Dockerfile
,当我在本地 运行 时,一切正常,但是我通过 GitHub 操作构建似乎失败了,我得到的错误是:
error An unexpected error occurred: "ENOENT: no such file or directory, stat '/home/runner/work/akira/akira/README.md'".
我尝试删除 yarn.lock
但没有成功,可以找到失败构建的完整日志 here,我的 Dockerfile
如下:
Dockerfile:
FROM node:14.0.0 AS base
WORKDIR /usr/src/app
FROM base as builder
COPY ./lerna.json .
COPY ./package.json .
COPY ./tsconfig.json .
COPY ./yarn.lock .
COPY ./packages/akira/prisma ./packages/akira/prisma
COPY ./packages/akira/src ./packages/akira/src
COPY ./packages/akira/types ./packages/akira/types
COPY ./packages/akira/package*.json ./packages/akira/
COPY ./packages/akira/tsconfig.json ./packages/akira
RUN yarn install --frozen-lockfile
RUN yarn build
FROM builder as migrate
RUN yarn workspace akira prisma migrate up --experimental
FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
COPY --from=builder /usr/src/app/packages/akira/dist ./dist
COPY --from=builder /usr/src/app/packages/akira/prisma ./prisma
COPY --from=builder /usr/src/app/packages/akira/package.json .
RUN yarn install --production
USER node
ENV NODE_ENV=production
EXPOSE 4000
CMD ["node", "dist/index.js"]
如果你看看你的 GitHub Actions workflow,
或来自您链接的失败构建的日志,它似乎是 docker.
之外的 运行ning yarn
命令
看起来 yarn
正在努力处理 README 符号链接,不知道为什么,但看起来你想用 docker 构建,我会尝试以下操作:
替换这部分yaml
- name: Use Node.js
uses: actions/setup-node@master
with:
node-version: 14.4.0
- name: Install dependencies
run: yarn --frozen-lockfile
- name: Build packages
run: yarn build
类似
- name: Build docker image
run: docker build .
编辑:
正如下面评论中指出的,Dockerfile 包含部署数据库迁移的副作用。
如果您不想 运行 构建管道中 Dockerfile 中的所有内容,
您可以利用 multi-stage builds 并在特定阶段停止。
即,将迁移移至其自己的阶段:
FROM node:14.0.0 AS base
WORKDIR /usr/src/app
FROM base as builder
COPY ./lerna.json .
<< lines omitted >>
RUN yarn install --frozen-lockfile
RUN yarn build
FROM builder AS migr
RUN yarn workspace akira prisma migrate up --experimental
FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
<< lines omitted >>
然后你可以在 builder
阶段后停止
docker build --target builder .
编辑 2:
或者您可以保持构建管道和 Dockerfile 不变,而不是修复损坏的符号链接,即还原提交 0c87fa3
我有一个 Dockerfile
,当我在本地 运行 时,一切正常,但是我通过 GitHub 操作构建似乎失败了,我得到的错误是:
error An unexpected error occurred: "ENOENT: no such file or directory, stat '/home/runner/work/akira/akira/README.md'".
我尝试删除 yarn.lock
但没有成功,可以找到失败构建的完整日志 here,我的 Dockerfile
如下:
Dockerfile:
FROM node:14.0.0 AS base
WORKDIR /usr/src/app
FROM base as builder
COPY ./lerna.json .
COPY ./package.json .
COPY ./tsconfig.json .
COPY ./yarn.lock .
COPY ./packages/akira/prisma ./packages/akira/prisma
COPY ./packages/akira/src ./packages/akira/src
COPY ./packages/akira/types ./packages/akira/types
COPY ./packages/akira/package*.json ./packages/akira/
COPY ./packages/akira/tsconfig.json ./packages/akira
RUN yarn install --frozen-lockfile
RUN yarn build
FROM builder as migrate
RUN yarn workspace akira prisma migrate up --experimental
FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
COPY --from=builder /usr/src/app/packages/akira/dist ./dist
COPY --from=builder /usr/src/app/packages/akira/prisma ./prisma
COPY --from=builder /usr/src/app/packages/akira/package.json .
RUN yarn install --production
USER node
ENV NODE_ENV=production
EXPOSE 4000
CMD ["node", "dist/index.js"]
如果你看看你的 GitHub Actions workflow, 或来自您链接的失败构建的日志,它似乎是 docker.
之外的 运行ningyarn
命令
看起来 yarn
正在努力处理 README 符号链接,不知道为什么,但看起来你想用 docker 构建,我会尝试以下操作:
替换这部分yaml
- name: Use Node.js
uses: actions/setup-node@master
with:
node-version: 14.4.0
- name: Install dependencies
run: yarn --frozen-lockfile
- name: Build packages
run: yarn build
类似
- name: Build docker image
run: docker build .
编辑:
正如下面评论中指出的,Dockerfile 包含部署数据库迁移的副作用。
如果您不想 运行 构建管道中 Dockerfile 中的所有内容, 您可以利用 multi-stage builds 并在特定阶段停止。
即,将迁移移至其自己的阶段:
FROM node:14.0.0 AS base
WORKDIR /usr/src/app
FROM base as builder
COPY ./lerna.json .
<< lines omitted >>
RUN yarn install --frozen-lockfile
RUN yarn build
FROM builder AS migr
RUN yarn workspace akira prisma migrate up --experimental
FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
<< lines omitted >>
然后你可以在 builder
阶段后停止
docker build --target builder .
编辑 2:
或者您可以保持构建管道和 Dockerfile 不变,而不是修复损坏的符号链接,即还原提交 0c87fa3