
数据工程后端云原生任务调度微服务【免费下载链接】pachydermData-Centric Pipelines and Data Versioning项目地址https://gitcode.com/gh_mirrors/pa/pachyderm点击查看免费下载导读本文围绕 Pachyderm 仓库中 console/BAZEL.md 展开系统讲解 ConsolePachyderm 的 Web 控制台分为frontend与backend两个子工程在 Bazel 工具链下的依赖管理、构建方式和测试运行方案。读完本文你将掌握如何用 Bazel pnpm 生成node_modules并驱动 npm 命令、如何分别运行前端与后端 Jest 测试、如何处理canvas模块在 ARM 平台如 M 系列 Mac上的原生依赖问题以及如何借助pachdev启动本地 Pachyderm 实例来跑通 Cypress E2E 测试。一、背景Console 为什么引入 BazelPachyderm 仓库整体已迁移到 Bazel 构建体系根目录的 BUILD.bazel 定义了 gazelle、nogo、buildifier 等基础设施Console 子工程也随之接入。在引入 Bazel 之前Console 的开发者统一使用npm管理项目与依赖接入 Bazel 之后依赖管理切换到了pnpmAspect 的 JavaScript Rules 默认采用 pnpm 作为包管理器。两者的差异主要体现在三个方面锁文件不同npm 生成package-lock.json而 pnpm 生成并管理pnpm-lock.yaml。这一点在仓库结构中有直接体现console/backend/ 与 console/frontend/ 目录下同时存在package-lock.json与pnpm-lock.yaml其中pnpm-lock.yaml是 Bazel 工具链实际使用的锁文件。node_modules 结构不同pnpm 采用符号链接与内容寻址存储content-addressable store生成的node_modules/目录结构与 npm 的扁平化布局截然不同。命令入口不同Bazel 环境下的命令统一通过bazel run //:pnpm -- ...形式调用而不是直接敲npm ...。需要说明的是这两种工具大多兼容文档原文语但对node_modules布局有依赖的脚本或工具迁移时需留意。二、外部依赖ARM 平台上的 canvas 模块console/frontend的依赖清单见 console/frontend/package.json中包含canvasnode-canvas版本 2.11.2它被 PipelinesRuntimeChart 这类图表组件使用。问题在于node-canvas 没有发布 ARM 平台的预编译二进制因此在 M 系列 MacM1/M2/M3即 darwin/arm64上必须从源码构建。提示仓库根 BUILD.bazel 中同样体现了对 ARM 平台的关注——它定义了is_aarch64、is_aarch64_macos等config_setting与platform目标用于按架构区分构建与测试行为。在从源码编译 canvas 前需要安装其原生依赖。console/README.md给出了两种安装方式Homebrew 与 MacPorts# Homebrew brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman # 或 MacPorts port install pkgconfig cairo pango libpng jpeg giflib librsvg如果你是 M 系列 Mac 且要跑完整的本地测试请先完成上述安装否则canvas的安装或测试会失败。三、用 Bazel 生成 Node ModulesBazel 工具链下node_modules/目录由 Bazel 负责生成。在backend/与frontend/子目录中分别执行bazel run //:pnpm -- --dir $PWD install这里的//:pnpm指向仓库根 BUILD.bazel 中定义的别名目标约 L280-283# pnpm for running npm commands alias( name pnpm, actual pnpm//:pnpm, )也就是说//:pnpm是pnpm//:pnpm的别名Bazel 会从外部依赖中拉取 pnpm 工具并执行--dir $PWD install即在当前目录backend/或frontend/完成依赖安装。安装完成后后续所有 npm 类命令都可以继续走 Bazel 通道统一格式为bazel run //:pnpm -- --dir $PWD command例如在console/frontend下执行 lint 或构建脚本。当然如果你本机装有npm也可以直接使用npm运行 package.json 中的 scripts两条通道并存文档明确说明 you can usenpm, if installed。四、运行单元测试frontend 与 backendConsole 的单元测试基于 Jest分别由两个 Bazel 目标承载定义在 console/backend/BUILD.bazel 与 console/frontend/BUILD.bazel 中bazel test //console/backend:backend_tests bazel test //console/frontend:frontend_tests4.1 backend_testsconsole/backend/BUILD.bazel 中的backend_tests使用 Aspect 的jest_test规则chdir console/backend测试在 backend 目录内执行config jest.config.js使用 console/backend/jest.config.jsdata包含src/**/*.ts、node_modules_backend、tsconfig.json以及//console:jest_config_base后者来自 console/BUILD.bazel 定义的jest_config_base内含.env.test与jest.config.base.jsenv中注入了NODE_ENVtest、GRAPHQL_PORT0、LOG_LEVELnone避免测试时启动真实端口并抑制日志噪音。4.2 frontend_tests 与 canvas 排除机制console/frontend/BUILD.bazel 中的frontend_tests更进一步timeout moderateshard_count 50测试被分为 50 个分片并行执行同样注入NODE_ENVtest、GRAPHQL_PORT0、LOG_LEVELnone以及来自.env.test的REACT_APP_RUNTIME_ISSUER_URIfixed_args [--rootDir, ./src]固定了 Jest 的根目录。关键点在于canvas 相关测试被显式排除。Bazel 沙箱内无法为 ARM 平台编译canvas因此glob(...)的exclude列表手动移除了这个测试文件src/views/Project/components/PipelineList/components/PipelinesRuntimeChart/__tests__/PipelinesRuntimesChart.test.tsx对应源码位于 console/frontend/src/views/Project/components/PipelineList/components/PipelinesRuntimeChart/包含组件本体PipelinesRuntimeChart.tsx、index.ts与__tests__/PipelinesRuntimesChart.test.tsx。也就是说默认的bazel test //console/frontend:frontend_tests不会跑这个测试文件同时canvas依赖也被手动从 pnpm 锁文件中剔除文档原文thecanvasdependency is manually excluded from the pnpm lock file。4.3 在本地补跑被排除的测试如果你在本地尤其是已装好原生依赖的 M 系列 Mac想补跑这个测试需要先在console/frontend目录用 npm 通道安装依赖并执行bazel run nodejs//:npm -- --dir$PWD install bazel run nodejs//:npm -- --dir$PWD test -- src/views/Project/components/PipelineList/components/PipelinesRuntimeChart/__tests__/PipelinesRuntimesChart.test.tsx第一条命令通过 Bazel 托管的nodejs//:npm执行npm install此时会安装包括canvas在内的完整依赖本地系统需已具备第一节列出的原生库第二条命令把测试文件路径作为参数传给 Jest 单独运行。补充如果使用原生 npm 工具链也可以直接cd console/frontend后运行npm install与npx jest --config ./src/jest.config.js test-path具体 scripts 见 console/frontend/package.json 的test:frontend等条目。五、Cypress E2E 测试从本地集群到浏览器Console 的 E2E 测试使用 Cypress针对 Community Edition未认证与 Enterprise Edition带认证两套场景对应脚本定义在 console/package.jsoncypress:local: NODE_ENVdevelopment dotenv-flow -- cypress open --e2e --config {\e2e\: {\specPattern\: \cypress/e2e/unauthenticated/**/*\}}, cypress:local-auth: NODE_ENVdevelopment dotenv-flow -- cypress open --e2e --config {\e2e\: {\specPattern\: \cypress/e2e/authenticated/**/*\}}, start:e2e: LOG_LEVELdebug npm run start:dev --prefix ./backend npm run start:e2e-test --prefix ./frontend完整流程分三步第 1 步启动本地 Pachyderm 实例用 Bazel 提供的pachdev工具对应 src/testing/pachdev/BUILD.bazel 中的//src/testing/pachdev二进制推送并部署本地集群bazel run //src/testing/pachdev -- push从 src/testing/pachdev/BUILD.bazel 可见该二进制内置了//oci:pachd_image、//oci:pachd_image.digest、//oci:worker_image、//oci:worker_image.digest等数据依赖即它会把本地构建的 pachd / worker 镜像推送到本地集群中保证 E2E 测试面对的是当前源码构建的真实 Pachyderm 实例。第 2 步在 console 目录启动 Consolebazel run nodejs//:npm -- --dir$PWD run start:e2e该命令等价于执行console/package.json中的start:e2e脚本后台以LOG_LEVELdebug启动 backendstart:dev同时以 test 环境启动 frontendstart:e2e-test。第 3 步启动 Cypress按目标场景二选一bazel run nodejs//:npm -- --dir$PWD run cypress:local # --- or --- bazel run nodejs//:npm -- --dir$PWD run cypress:local-authcypress:local面向未认证的 Community Editionspec 目录cypress/e2e/unauthenticated/**cypress:local-auth面向带认证的 Enterprise Editionspec 目录cypress/e2e/authenticated/**。命令会打开 Cypress 应用界面从那里你可以单独选择并运行具体的测试用例对应仓库 console/cypress/e2e 下的 23 个.ts测试文件。E2E 注意事项若运行认证套件需要为本地的 Pachyderm 配置 Enterprise 环境具体到 Console 前端通常还需要在.env.development.local中准备PACHYDERM_ENTERPRISE_KEY等环境变量详见 console/README.md 的 E2E tests 一节。整个过程依赖 Bazel 构建的镜像pachd、worker与 pnpm/npm 通道安装的前端依赖因此建议先完成第三、四节中的依赖安装与构建步骤。六、两种命令通道的取舍建议综合全文Console 在 Bazel 体系下实际上并存两条命令通道可按场景选择场景推荐通道说明依赖安装受 Bazel 管理bazel run //:pnpm -- --dir $PWD install生成 pnpm 风格的node_modules锁文件为pnpm-lock.yaml常规 npm scriptsbazel run //:pnpm -- --dir $PWD command或本机npm两者均可Bazel 通道可复用锁定的工具版本单元测试bazel test //console/backend:backend_tests与//console/frontend:frontend_tests后者默认排除 canvas 相关测试被排除的 canvas 测试bazel run nodejs//:npm -- --dir$PWD test -- test-path需先安装原生依赖M 系列 MacE2E 测试bazel run //src/testing/pachdev -- pushstart:e2ecypress:local(-auth)需先有本地 Pachyderm 实例需要留意的是切换通道时node_modules的布局会随之变化pnpm 符号链接结构 vs npm 扁平结构若在两种通道之间反复切换建议清理后重新安装避免依赖解析异常。结语通过本文可以看到Pachyderm Console 在 Bazel 化之后形成了一套清晰的分层实践pnpm 管依赖、Bazel 管构建与测试调度、pachdev 管本地集群。其中 canvas 在 ARM 平台的源码编译 测试排除 本地补跑处理方式是跨平台原生依赖接入 Bazel 的典型样板。如果你在开发或运维中需要为 Console 编写、运行或接入测试直接以 console/BAZEL.md 为基准配合文中给出的 BUILD 目标与脚本即可快速上手。赞分享数据工程后端云原生任务调度微服务【免费下载链接】pachydermData-Centric Pipelines and Data Versioning项目地址https://gitcode.com/gh_mirrors/pa/pachyderm点击查看免费下载相关推荐Envoy Proxy-Wasm 测试构建指南C/Rust SDK 依赖管理与 Bazel 构建规则解析Envoy Proxy Wasm 测试构建指南C/Rust SDK 依赖管理与 Bazel 构建规则解析 本篇技术指南以 Envoy 仓库中的 bazel云原生服务网格网络微服务GetQzonehistory 教程三步把QQ空间历史说说批量备份到本地GetQzonehistory 教程三步把QQ空间历史说说批量备份到本地 某天翻QQ空间一条五六年前的动态突然加载不出来评论区也早就空了。这类瞬间提醒我们网页爬虫数据分析MediaMTX 跨平台部署速通3 个平台 3 条路径30 分钟跑通第一路视频流MediaMTX 跨平台部署速通3 个平台 3 条路径30 分钟跑通第一路视频流 MediaMTX原名 rtsp simple server是一款开箱即音视频后端上一篇智能农场环境通知系统终极指南使用Node.js实现跨平台监控下一篇OpenStatus 状态页社区主题开发指南从 Theme 接口到主题商店的完整实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考