恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Arduino CI/CD 流水线加速:aily-builder 预处理与编译分离,实现 1 次分析 N 次编译
首页
资讯中心
/
Arduino CI/CD 流水线加速:aily-builder 预处理与编译分离,实现 1 次分析 N 次编译
Arduino CI/CD 流水线加速:aily-builder 预处理与编译分离,实现 1 次分析 N 次编译
发布时间:2026/10/7 11:24:47
Arduino CI/CD 流水线加速aily-builder 预处理与编译分离实现 1 次分析 N 次编译【免费下载链接】aily-builderFaster Arduino compilation CLI. Arduino快速编译工具小项目提速50%大项目提速80%! 时间就是金钱我的朋友!项目地址: https://gitcode.com/gh_mirrors/ai/aily-builderArduino 项目的 CI/CD 流水线跑得慢多数时间都浪费在重复的依赖分析 配置解析上。aily-builder是一款 Arduino 快速编译 CLI 工具通过预处理与编译分离实现1 次分析、N 次编译官方实测小项目提速 50%、大项目提速 80%。本文带你把它接入 CI/CD 流水线让每次构建都快人一步。为什么 Arduino 流水线这么慢一次普通的 Arduino 编译其实包含两大阶段阶段做了什么耗时占比预处理校验 sketch、提取宏、解析开发板/平台配置、分析依赖库、生成编译配置、跑 prebuild 钩子大项目中常常是一半以上编译逐个文件调用编译器、链接生成固件剩余部分问题在于流水线每次触发每次 push、每个 PR、多开发板矩阵任务都会把完全相同的预处理再跑一遍。库没变、开发板没变、宏没变——这些分析结果本该是稳定的。核心思路1 次分析N 次编译 ⚡️aily-builder 把编译拆成两个独立命令预处理结果可以保存成 JSON 文件在后续编译中直接复用# 第 1 步只执行预处理依赖分析、配置生成、prebuild 钩子结果存成 JSON aily-builder preprocess sketch.ino --board arduino:avr:uno --save-result ./preprocess.json # 第 2 步编译时带上预处理结果直接跳过整个预处理阶段 aily-builder compile sketch.ino --board arduino:avr:uno --preprocess-result ./preprocess.json预处理阶段一共完成 7 件事在 ArduinoCompiler.ts 的preprocess方法中实现验证 sketch 文件从 sketch.ino 中提取宏定义解析开发板FQBN与平台配置准备构建目录流式、宏感知的依赖分析见 DependencyAnalyzer.ts 与 PreprocessorDirectiveScanner.ts生成 Ninja 编译配置运行 prebuild 钩子ESP32 等平台需要关键代码在 ArduinoCompiler.ts只要传入的preprocessResult成功编译阶段就直接复用其中的arduinoConfig、compileConfig和dependencies整个预处理被跳过。结果里还藏了什么--save-result保存的 JSON 不只是配置还包括预处理时抓取的一整套环境变量编译器路径、SDK 路径、工具链路径等见 ArduinoCompiler.ts编译时会完整恢复main.ts。这意味着✅ 预处理和编译可以不在同一台机器上执行——正好命中 CI 的并行构建场景✅ 可以在编译前检查预处理结果方便调试依赖问题✅ 依赖没变化时直接跳过预处理省下最贵的那一步三步接入 CI/CD 流水线 步骤 1安装 aily-buildernpm install -g aily-builder工具自带 Ninja 构建器ninja/ninja无需额外安装系统依赖Node 18 即可。步骤 2预处理一次并上传产物在流水线的第一个任务或矩阵任务的共享前置任务中执行aily-builder preprocess src/sketch.ino \ --board esp32:esp32:esp32 \ --save-result ./preprocess.json然后把preprocess.json作为流水线产物artifact上传。步骤 3N 个编译任务共享同一份结果开发板矩阵、多分支、多宏组合的并行任务各自只需一步aily-builder compile src/sketch.ino \ --board arduino:avr:uno \ --preprocess-result ./preprocess.json \ --jobs 8一张图理解流程文字版preprocess1 次──→ preprocess.json │ ┌─────────────────────┼─────────────────────┐ ▼ ▼ ▼ compile (UNO) compile (ESP32) compile (MEGA) ← N 次各自跳过预处理顺手的 3 个加速特性 ① Ninja 并行编译编译阶段由 NinjaCompilationPipeline.ts 生成构建图并驱动 Ninja 并行执行用-j/--jobs调高并行度即可吃满 CI 节点的 CPU。② 本地 云端双缓存对象文件级缓存CacheManager.ts让没改动的库文件直接恢复.o产物archive 云端缓存可跨流水线、跨节点共享整包.a归档通过--archive-cloud-cache系列选项开启。每次编译结束还会自动做缓存维护配合aily-builder cache stats/cache clear --unused-30管理磁盘。③ 增量构建Ninja 原生记录依赖只重编真正改动的文件CI 中反复构建同一项目时收益明显。适用场景速查场景用法收益CI/CD 流水线预处理一次多次编译复用 JSON跳过重复依赖分析多节点并行构建节点间共享预处理结果各节点免分析编译排错编译前检查预处理结果定位更快依赖未变化的反复构建直接复用旧结果显著省时延伸阅读 完整中文文档README-ZH.md预处理命令定义与选项说明main.ts编译时加载预处理结果的完整逻辑main.ts预处理执行流程7 步并行优化ArduinoCompiler.ts编译流水线与缓存恢复NinjaCompilationPipeline.ts把分析和编译拆开是 aily-builder 最值得借鉴的设计在 CI/CD 里凡是结果稳定的步骤都只该执行一次。【免费下载链接】aily-builderFaster Arduino compilation CLI. Arduino快速编译工具小项目提速50%大项目提速80%! 时间就是金钱我的朋友!项目地址: https://gitcode.com/gh_mirrors/ai/aily-builder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考