已关闭
[Feature]: 基于 devcontainer 的 MindStudio 统一开发环境方案 #32
Zhang-Yu001创建于  8月3日关闭于  8月12日
Zhang-Yu001
Zhang-Yu001成员
8月3日 创建

提交提案之前,请先检索仓库内是否已有相同的提案,如已有请在同一提案中进行讨论。

💻 需求背景、当前现状、期望实现的功能内容、具体的设计方案、以及测试方案

需求背景

MindStudio 工具链覆盖算子和训推两大场景共 20+ 工具(C++/Python/混合),目前缺少统一的开发环境基础设施。开发者 clone 代码后需要手工搭建编译工具链、Python 版本、C++ 调试环境、IDE 插件和 pre-commit 检查,新人环境配置耗时 2-4 小时。

msmonitor 作为 MindStudio 算子场景的监控工具(Python + C++ 混合架构,plugin 子模块使用 CMake 构建 C++ pybind11 扩展,含 dynolog 三方依赖),同样面临以上问题。本变更依据 devcontainer 统一方案,为 msmonitor 建立一键式开发环境。

参考连接:

当前现状

问题 具体表现
环境搭建复杂 msmonitor 依赖 GCC 11.2.0、CMake 3.16+、pybind11、protobuf、dynolog 等,均需手工安装和配置
入口分散 产品构建(build.pyplugin/build.sh + scripts/build.sh)、UT 测试(scripts/run_ut.sh)各有不同入口,无统一 IDE Task
C++ 代码跳转不可用 plugin/CMakeLists.txt 未设置 CMAKE_EXPORT_COMPILE_COMMANDS,clangd 无法加载编译数据库
调试模板缺失 msmonitor Python 模块依赖 C++ 扩展 .so,需手动配置 PYTHONPATHLD_LIBRARY_PATH 才能调试
pre-commit 漏装 已有 .pre-commit-config.yaml(含 ruff、pylint、bandit、codespell、typos、clang-format、clang-tidy、gitleaks),但 hook 依赖开发者自觉安装
工作区污染 构建时 _fetch_dynolog() 通过 wget+tar 解压到 third_party/dynolog/ 产生 10000+ 文件,污染 git status

期望实现的功能

开发者在 VS Code 中打开 msmonitor 仓库后,可一键进入容器、一键编译、一键运行 UT、代码跳转和调试开箱即用git commit 自动触发 pre-commit 检查;构建/测试后 git status 保持清洁。

具体目标:

功能 说明
容器固化 devcontainer.json 声明 MindStudio 构建镜像、挂载、用户映射、环境变量、推荐 VS Code 扩展
自动初始化 post-create.sh 幂等准备:Python 3 环境、pyenv 优先、系统/pip 依赖、gitleaks 架构自适应+多镜像源+pip 兜底、pre-commit、clangd、Git 身份
一键构建/测试 4 个 VS Code Task:Release 构建 / Debug 构建 / UT 测试 / 清理
一键调试 Python debugpy 调试模板,自动注入 PYTHONPATHLD_LIBRARY_PATH
代码跳转 C++ clangd(CompileFlags.CompilationDatabase: plugin/build/)+ Python Pylance
自动检查 git commit 自动触发 pre-commit 全量检查
工作区洁净 .gitignore 扩展 + skip-worktree .vscode/settings.json + .gitmodules ignore=all

具体的设计方案

目录结构

msmonitor/
├── .devcontainer/
│   ├── devcontainer.json        # 容器底座配置
│   └── post-create.sh           # 幂等初始化(8 个步骤)
├── .vscode/
│   ├── tasks.json               # Build: Release/Debug、Test、Clean
│   ├── launch.json              # Python debugpy 调试配置
│   └── settings.json            # watcher/search 排除 + 禁用 cpptools
├── .clangd                      # CompileFlags.CompilationDatabase: plugin/build/
└── .gitignore                   # 扩展忽略规则

核心变更

新增 6 个文件:

  • .devcontainer/devcontainer.json — 容器底座,clangd.pathToCompdb: plugin/build(CMake 在 plugin 子目录)
  • .devcontainer/post-create.sh — 幂等初始化,8 个步骤
  • .vscode/tasks.json — 4 个任务,Debug 构建 cmake -S plugin -B plugin/build -DCMAKE_BUILD_TYPE=Debug
  • .vscode/launch.json — Python debugpy + pytest,自动注入 PYTHONPATH 和 LD_LIBRARY_PATH 指向 plugin/build
  • .vscode/settings.json — watcher/search 排除构建和 third_party 目录,clangd 参数由 devcontainer.json 统一管理
  • .clangdCompileFlags.CompilationDatabase: plugin/build/

修改 5 个文件:

  • .gitignore.vscode/ 改为 .vscode/settings.json;新增 artifacts/*.rpm*.deb.ruff_cache/.devcontainer/.host-gitconfigthird_party/dynolog/
  • .pre-commit-config.yaml — gitleaks entry 改为系统 gitleaks;bandit 增加 additional_dependencies: ["bandit[toml]"]
  • .gitmodules — dynolog submodule 增加 ignore = all
  • plugin/CMakeLists.txt — 新增 CMAKE_EXPORT_COMPILE_COMMANDS ON
  • build.py — 新增 only_down_deps 参数,test 和产品构建两分支均生效

测试方案

环境就绪性

验证项 操作 预期
post-create 零阻塞 Rebuild Container Without Cache 容器正常创建,8 个步骤全部执行
pre-commit 自动安装 git commit Hook 触发全量检查
Git 状态洁净 构建+UT 后 git status --short 无 dynolog 或构建产物污染

构建验证

验证项 操作 预期
Release 构建 VS Code Task Build: Release Mode 产出 whl + rpm/deb 包
UT 测试 VS Code Task Test: Run Unit Tests 全量通过

调试与跳转验证

验证项 操作 预期
Python 断点调试 F5 → Python: Debug Active File 断点命中,变量查看正常
C++ F12 跳转 对 plugin/ 下的函数按 F12 clangd 跨文件跳转到定义
Python F12 跳转 对 Python 模块按 F12 Pylance 语义跳转

替代方案

补充说明

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
Mrtutu
Mrtutu成员
8月3日 评论:

👋 您好,欢迎向 MindStudio-Monitor 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉

📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:

📖 MindStudio MindStudio-Monitor官方文档
📝 贡献者指南

请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!

likedislike
MrtutuMrtutu成员
8月3日 添加了label:triaged
ascend-robotascend-robot成员
8月3日 添加了label:feature
Zhang-Yu001Zhang-Yu001成员
8月6日 关联了pull request:基于 devcontainer 的 MindStudio 统一开发环境方案
Ccai-weiwei1989成员
8月10日 关联了pull request:docs:修改链接
Ccai-weiwei1989成员
8月10日 删除了关联的pull request:docs:修改链接
ascend-robotascend-robot成员
8月12日 关闭了 issue
WangJieWangJie成员
8月12日 添加了label:resolved
WangJieWangJie成员
8月12日 将 2404_88560538 设为负责人
WangJieWangJie成员
8月12日 issue状态由 TODO 改变为 DONE