fix(ci): 去掉前端脚本DooD嵌套,直接在CI容器内运行Node命令 #756
Reference in New Issue
Block a user
Delete Branch "fix/frontend-dood-mount"
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?
问题
Docker模式Runner下,前端脚本(step_frontend_install.sh / step_frontend_run.sh)使用 DooD(Docker-out-of-Docker)方式启动Node容器,
-v "$PWD:/workspace"挂载的是job容器内路径,宿主机docker daemon找不到对应路径,导致子容器内工作目录为空。现象:
No files matching the pattern "src" were found.,Frontend Lint 和 Frontend Unit Tests 全红。方案
CI基础镜像(ci-base:latest)已包含 Node 20 + pnpm 9 + npm 10,完全不需要再套一层DooD。直接在job容器内运行前端命令,从根本上解决挂载路径问题。
影响
📊 审查概览
❌ 需修改的问题(严重)
npm ci时包含for i in 1 2 3的重试逻辑,以应对网络抖动或 npm 镜像源(registry.npmmirror.com)不稳定的情况。新代码直接执行 `npm ci``,一旦网络请求失败,CI 流程将直接报错退出,可能导致频繁的 CI 失败。npm-retry等工具,确保在网络不稳定时能自动重试。💡 改进建议(一般)
[scripts/ci/step_frontend_install.sh: 第14行] 缺少关键文件前置检查
npm ci命令强制要求package-lock.json文件存在。原代码在逻辑中包含了对该文件的检查,新代码直接运行npm ci。虽然npm ci失败会触发set -e退出,但显式检查能提供更明确的错误提示(如 "Error: package-lock.json not found"),帮助开发者快速定位是文件缺失还是网络问题。[scripts/ci/step_frontend_run.sh: 第10行] 命令参数校验缺失
sh -lc "$CMD"执行传入的参数。虽然在 CI 环境中参数来源通常是受控的,但缺乏对$CMD是否为空的校验可能导致无意义的执行。此外,直接拼接命令存在潜在的命令注入风险(如果调用方未做好过滤),建议添加基本的非空校验,并在文档中明确调用规范。✅ 良好实践
set -eu,确保脚本在错误或变量未定义时能及时退出,符合 Shell 脚本最佳实践。npm ci而非npm install,确保了 CI 环境下依赖版本的可复现性。🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 09:34:37 | 模型:
🗑️ 预览环境已清理
PR #756 已关闭或合并,对应的预览环境已被清理。