fix(ci): 修复Staging E2E/API Tests DooD挂载路径问题 - 改用docker cp #769
Reference in New Issue
Block a user
Delete Branch "fix/ci-staging-e2e-dood"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题根因
Staging E2E Tests 和 Staging API Integration Tests 运行时找不到
package-lock.json,npm ci直接失败,整个job 1秒就挂。根因:DooD(Docker-outside-of-Docker)挂载路径不一致。
step_checkout.sh把代码下载到容器内的工作目录docker run -v "$PWD:/workspace"挂载的是宿主机的路径,不是CI容器内的路径/workspace/apps/web是空的npm ci找不到package-lock.json,直接报错修复方案
改用
docker create+docker cp+docker start模式:docker create创建容器(不启动)docker cp把CI容器内的代码拷进playwright容器docker start -a启动并attach输出docker wait获取退出码,docker rm清理完全绕开-v挂载的路径问题,跟其他前端job(Frontend Lint等)的DooD处理思路一致。
改动
.gitea/workflows/ci-pipeline.ymlstaging-e2e和staging-api-testsCI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #769
⚠️ 问题(1个需要修改)
set -eu,这意味着docker cp或docker start一旦失败(例如源文件不存在或容器启动异常),脚本会立即退出。此时后续的docker rm清理命令将无法执行,导致创建的容器在宿主机上残留,长期运行会占用大量资源。trap指令以确保无论脚本因何种原因退出,都能执行清理操作。例如:trap 'docker rm -f "$CONTAINER_NAME" 2>/dev/null' EXIT。💡 建议(2个可选)
docker cp package-lock.json ... 2>/dev/null || true的逻辑与后续npm ci命令冲突。npm ci强制要求package-lock.json必须存在,如果拷贝失败(文件不存在),忽略错误只会导致后续npm ci报错退出,且掩盖了根本原因。建议移除|| true,让拷贝阶段直接报错,或者确认文件是否可选并改用npm install。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 11:49:51 | 模型:
🗑️ 预览环境已清理
PR #769 已关闭或合并,对应的预览环境已被清理。