开发工作流
本文引用的文件
- README.md
- pom.xml
- .github/workflows/maven.yml
- deploy/jenkins/test/build.Jenkinsfile.sh
- deploy/jenkins/prod/deploy.Jenkinsfile.sh
- deploy/readme.md
- deploy/docker/kafka/docker-compose.yml
- script/docker/docker-compose.yml
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/prometheus/PrometheusController.java
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/core/constant/DataSourceConstants.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/framework/core/constant/DataSourceConstants.java
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/controller/admin/blacklisted/AppBlacklistedController.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/controller/admin/chain/RuleLiteflowChainController.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/dal/dataobject/chain/RuleLiteflowChainDO.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceTrueCmp.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceFalseCmp.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/dto/RuleLiteflowChainCacheDTO.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/service/business/RuleBusinessApiServiceImpl.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/dto/RuleBindReqDTO.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/dal/dataobject/uotadetail/UotaDetailDO.java
目录
引言
本文件面向 yudao-cloud 项目的开发团队,系统化梳理 Git 工作流、Pull Request(PR)流程与代码审查标准;介绍基于 GitHub Actions 与 Jenkins 的 CI/CD 流程、自动化构建与测试、容器化部署策略;明确版本管理与发布规范;给出开发协作与问题变更流程建议;并提供开发工具链使用与常见问题排查方法,帮助团队高效、稳定地交付高质量版本。
项目结构
yudao-cloud 采用多模块 Maven 聚合工程,顶层 POM 定义版本与构建配置,各业务模块与框架模块独立构建与打包。项目包含网关模块、系统与基础设施模块、业务模块(设备、运营、黑名单、任务、规则引擎等),以及丰富的部署与运维脚本。
图示来源
章节来源
核心组件
- 网关与灰度发布:基于 Spring Cloud Gateway 的灰度负载均衡,支持按请求头版本号路由到指定实例,保障平滑发布与 A/B 测试。
- 规则引擎(LiteFlow):提供规则定义、缓存、业务绑定与审批流程,支持复杂条件匹配与高性能执行。
- 数据存储与多数据源:MySQL 与 TDengine 混合存储,分别承载 OLTP 与时序/日志数据;Redis 用于缓存与消息中间件。
- 监控与可观测性:SkyWalking Agent 注入与 Prometheus 暴露端点,结合 Nacos 配置中心与注册中心。
- CI/CD:GitHub Actions Maven 构建矩阵(JDK 8/11/17),Jenkins 多模块构建与生产部署脚本。
章节来源
- README.md
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/controller/admin/chain/RuleLiteflowChainController.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/dal/dataobject/chain/RuleLiteflowChainDO.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceTrueCmp.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceFalseCmp.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/dto/RuleLiteflowChainCacheDTO.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/service/business/RuleBusinessApiServiceImpl.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/dto/RuleBindReqDTO.java
架构总览
系统采用微服务架构,统一通过网关接入,后端服务通过 Nacos 注册与配置中心管理,流量可基于灰度发布策略进行分流。数据层采用 MySQL + TDengine 混合架构,配合 Redis 缓存与 Kafka 消息队列,实现高吞吐与低延迟。
图示来源
详细组件分析
网关灰度发布机制
- 灰度负载均衡:根据请求头中的版本号筛选匹配实例,若无匹配则回退至全量实例。
- 请求处理时序:过滤器检查 URL Scheme,调用负载均衡器选择实例,最终转发请求。
图示来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
章节来源
规则引擎(LiteFlow)与业务绑定
- 核心实体:RuleLiteflowChainDO 定义规则链、EL 表达式、业务类型与生效状态。
- 缓存与执行:RuleRunUtil 提供 Redis 缓存 + 分布式锁 + 数据库兜底的获取策略;DeviceTrueCmp/DeviceFalseCmp 作为匹配结果组件。
- 业务绑定:RuleBusinessApiServiceImpl 支持绑定/解绑规则与变更详情构建,结合 BPM 审批状态。
图示来源
章节来源
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/dal/dataobject/chain/RuleLiteflowChainDO.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceTrueCmp.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/component/result/DeviceFalseCmp.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/service/business/RuleBusinessApiServiceImpl.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/dto/RuleBindReqDTO.java
数据存储与多数据源
- 多数据源常量:System 与 Task 模块通过 DataSourceConstants 定义不同数据源(默认/时序/归档等)。
- 存储架构:业务数据走 MySQL,时序/日志走 TDengine,缓存走 Redis。
图示来源
- README.md
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/core/constant/DataSourceConstants.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/framework/core/constant/DataSourceConstants.java
章节来源
监控与可观测性
- SkyWalking:通过 JAVA_TOOL_OPTIONS 注入 Agent,忽略特定路径。
- Prometheus:Infra 模块提供控制器暴露服务发现 Target 列表。
章节来源
- README.md
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/prometheus/PrometheusController.java
消息队列集成
- Kafka:用于日志上报缓冲与业务异步解耦。黑名单模块提供 Kafka 生产者示例接口。
章节来源
- README.md
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/controller/admin/blacklisted/AppBlacklistedController.java
依赖分析
- 构建与测试:Maven Surefire 插件版本管理,支持 JUnit 5;编译插件配置 Lombok 与 MapStruct 注解处理器。
- 仓库源:配置华为云与阿里云 Maven 源,提升依赖下载速度。
- 环境配置:Maven Profile 定义 dev/prod 环境,包含 Nacos 服务地址、命名空间、日志收集地址等。
图示来源
章节来源
性能考虑
- 规则引擎缓存策略:Redis 缓存 + 分布式锁 + 数据库兜底,降低热点规则的数据库压力。
- 灰度发布:基于版本头的实例筛选与权重选择,避免全量切换带来的风险与抖动。
- 多数据源:将高频写入的设备日志与运行记录下沉至 TDengine,减轻 MySQL 压力。
- 监控与日志:SkyWalking 与 Prometheus 结合,便于定位性能瓶颈与异常。
[本节为通用指导,无需列出具体文件来源]
故障排查指南
- 网关灰度不生效:确认请求头是否携带版本号,检查 GrayLoadBalancer 的实例筛选逻辑与 Nacos 元数据配置。
- 规则引擎匹配异常:核对 RuleLiteflowChainDO 的 EL 表达式与业务绑定状态,检查 Redis 缓存是否命中或存在空值占位。
- Kafka 消息堆积:检查消费者消费速率与分区数,确认 Kafdrop UI 的主题状态与消费者组偏移。
- 定时任务执行异常:参考 deploy/readme.md 中的任务计划,核对 Quartz/XXL-Job 配置与日志输出。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- deploy/docker/kafka/docker-compose.yml
- deploy/readme.md
结论
yudao-cloud 项目通过清晰的模块化设计、灰度发布与规则 引擎能力、混合存储架构与可观测性体系,构建了可扩展、可演进的微服务开发框架。结合 GitHub Actions 与 Jenkins 的 CI/CD 流水线,能够稳定地支持多 JDK 版本构建与多模块部署。建议团队在日常开发中严格遵循 Git 工作流与 PR 审查规范,确保代码质量与发布节奏可控。
[本节为总结性内容,无需列出具体文件来源]
附录
Git 工作流与分支管理
- 主分支保护:master 作为受保护分支,禁止直接推送,所有改动通过 Pull Request 合并。
- 功能分支:feature/<issue-id>-短横线命名,合并后清理。
- 热修复分支:hotfix/<issue-id>-短横线命名,从 release 或 master 派生,修复后回并至 master 与 develop。
- 发布分支:release/<版本号>,冻结发布内容,执行回归测试与最终修复。
[本节为通用规范说明,无需列出具体文件来源]
Pull Request 流程与代码审查标准
- PR 描述:包含需求背景、变更内容、影响范围、测试要点与风险评估。
- 审查清单:代码风格、单元测试覆盖 率、安全与性能影响、兼容性与回归测试。
- 合并策略:至少一名审查者批准,冲突解决后方可合并。
[本节为通用规范说明,无需列出具体文件来源]
持续集成/持续部署(CI/CD)
- GitHub Actions:使用 Maven 构建矩阵,覆盖 JDK 8/11/17,跳过测试加速构建。
- Jenkins:多模块构建脚本支持框架组件、模块 API、模块 Biz 与网关的分阶段构建与 Docker 镜像构建、推送与回滚;生产部署脚本支持远程拉取镜像、容器重启与参数注入。
图示来源
- .github/workflows/maven.yml
- deploy/jenkins/test/build.Jenkinsfile.sh
- deploy/jenkins/prod/deploy.Jenkinsfile.sh
章节来源
- .github/workflows/maven.yml
- deploy/jenkins/test/build.Jenkinsfile.sh
- deploy/jenkins/prod/deploy.Jenkinsfile.sh
版本管理与发布流程
- 语义化版本:遵循主.次.修订,里程碑版本打 Tag 推送。
- 标签管理:发布前在 master 上创建 vX.Y.Z 标签,确保构建产物与标签一致。
- 发布流程:完成 PR 合并、CI 构建、镜像推送与生产部署,最后在 Issue/变更日志中标注版本与链接。
[本节为通用规范说明,无需列出具体文件来源]
开发协作规范
- 任务分配:通过 Issue 指派给责任人,明确截止时间与验收标准。
- 进度跟踪:使用项目看板(白板/看板工具)可视化任务状态。
- 沟通机制:日常站会、评审会与复盘会,重大决策形成会议纪要。
[本节为通用规范说明,无需列出具体文件来源]
问题管理与需求变更流程
- 问题登记:Issue 模板标准化,包含重现步骤、期望结果、实际结果与日志。
- 变更评审:需求变更提交变更请求,评估影响与成本,经评审通过后纳入迭代。
- 回归验证:修复完成后在测试环境验证,通过后合并至主分支。
[本节为通用规范说明,无需列出具体文件来源]
开发工具链与环境
- 环境准备:JDK 17+、MySQL 8.0+、Redis 5.0+、Nacos 2.x、TDengine、Kafka。
- 启动方式:根目录 Maven 构建后,分别启动网关与各业务模块;或使用 Docker Compose 一键启动。
- 端口与文档:各模块默认端口与接口文档地址见项目说明。
章节来源
任务与 OTA 数据模型示例
- UotaDetailDO:展示 OTA 升级包元数据设计,体现审批流与业务数据结合。
章节来源