Appearance
质量门禁机制
**本文引用的文件** - [dm/lemes-web/devops-ci.yml](file://dm/lemes-web/devops-ci.yml) - [lemes-cloud/devops-ci.yml](file://lemes-cloud/devops-ci.yml) - [dm/lemes-web/Jenkinsfile](file://dm/lemes-web/Jenkinsfile) - [lemes-cloud/Jenkinsfile](file://lemes-cloud/Jenkinsfile) - [dm/lemes-web/jest.config.js](file://dm/lemes-web/jest.config.js) - [lemes-cloud/pom.xml](file://lemes-cloud/pom.xml) - [lemes-cloud/lemes-business-devicemate/lemes-service-dm-device/lemes-service-dm-device-server/src/test/java/EqualsTest.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-device/lemes-service-dm-device-server/src/test/java/EqualsTest.java) - [lemes-cloud/lemes-business-devicemate/lemes-service-dm-device/lemes-service-dm-device-server/src/test/java/com/lenovo/lemes/service/dm/device/GlboalSerialTest.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-device/lemes-service-dm-device-server/src/test/java/com/lenovo/lemes/service/dm/device/GlboalSerialTest.java) - [lemes-cloud/lemes-service-common/lemes-service-common-server/src/test/java/PasswordValidTest.java](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/test/java/PasswordValidTest.java) - [lemes-cloud/lemes-service-common/lemes-service-common-server/src/test/java/UniqueKeyTest.java](file://lemes-cloud/lemes-service-common/lemes-service-common-server/src/test/java/UniqueKeyTest.java)目录
引言
本文件面向DeviceMate项目的质量门禁机制,系统化梳理前端与后端在持续集成中的质量保障实践,覆盖代码规范检查、静态代码分析、覆盖率要求、自动化测试策略(单元测试、集成测试)、安全扫描与敏感信息检测、性能测试要求、质量门禁配置(阈值、失败处理、例外管理),以及质量报告与度量指标,帮助项目管理与开发团队建立可落地的质量控制体系。
项目结构
DeviceMate由多模块构成,前端采用Vue生态,后端基于Spring Cloud/Spring Boot Maven多模块工程。质量门禁在CI层统一编排,前端通过Jenkinsfile与devops-ci.yml驱动构建、打包与静态分析;后端通过Jenkinsfile与Maven插件实现构建、测试与SonarQube分析。
图表来源
- dm/lemes-web/Jenkinsfile:1-27
- dm/lemes-web/devops-ci.yml:1-40
- dm/lemes-web/jest.config.js:1-28
- lemes-cloud/Jenkinsfile:1-13
- lemes-cloud/devops-ci.yml:1-27
- lemes-cloud/pom.xml:1-583
章节来源
- dm/lemes-web/Jenkinsfile:1-27
- dm/lemes-web/devops-ci.yml:1-40
- dm/lemes-web/jest.config.js:1-28
- lemes-cloud/Jenkinsfile:1-13
- lemes-cloud/devops-ci.yml:1-27
- lemes-cloud/pom.xml:1-583
核心组件
- 前端质量门禁
- 构建与打包:通过devops-ci.yml定义prepare/build/tar/sonar阶段,调用sonar-scanner进行静态分析。
- 单元测试与覆盖率:通过jest.config.js配置测试匹配规则、覆盖率采集目录与报告格式。
- CI流水线:通过Jenkinsfile加载通用库,按分支/视图选择子模块与部署目标。
- 后端质量门禁
- SonarQube分析:通过devops-ci.yml调用mvn sonar:sonar执行静态分析。
- 测试与插件:pom.xml中配置maven-surefire-plugin,默认跳过测试;各模块存在少量单元测试示例。
- CI流水线:通过Jenkinsfile自定义构建命令与JDK版本,关闭镜像构建。
章节来源
- dm/lemes-web/devops-ci.yml:14-40
- dm/lemes-web/jest.config.js:16-27
- dm/lemes-web/Jenkinsfile:1-27
- lemes-cloud/devops-ci.yml:20-27
- lemes-cloud/pom.xml:347-353
架构总览
下图展示质量门禁在CI中的整体流程:前端与后端分别通过各自的Jenkinsfile与配置文件接入通用CI框架,完成构建、测试与静态分析,并将结果上报至SonarQube。
图表来源
- dm/lemes-web/Jenkinsfile:1-27
- dm/lemes-web/devops-ci.yml:35-40
- lemes-cloud/Jenkinsfile:1-13
- lemes-cloud/devops-ci.yml:20-27
详细组件分析
前端质量门禁(Jest + SonarQube)
- 单元测试与覆盖率
- 测试匹配:通过jest.config.js定义测试文件匹配模式,覆盖tests/unit与__tests__目录下的多种语言文件。
- 覆盖率采集:collectCoverageFrom指定源码目录集合,排除认证与请求等特定模块;输出至tests/unit/coverage目录,生成lcov与text-summary报告。
- 构建与静态分析
- devops-ci.yml定义prepare/build/tar/sonar四个阶段,其中sonar阶段调用sonar-scanner并传入项目键与主机地址,实现前端代码静态分析。
- CI编排
- Jenkinsfile加载通用库,按分支/视图配置willDeploy与submodule,支持按需选择模块与部署目标,同时关闭通用Dockerfile以适配当前构建需求。
图表来源
章节来源
后端质量门禁(Maven + SonarQube)
- 静态分析
- devops-ci.yml通过mvn sonar:sonar执行SonarQube分析,传入项目键、主机地址与登录凭据,实现Java代码静态分析。
- 测试与插件
- pom.xml中maven-surefire-plugin默认跳过测试(skipTests=true),并允许测试失败不阻断构建(testFailureIgnore=true);建议在质量门禁中明确开启测试并设置失败阈值。
- 各模块存在少量单元测试示例文件,表明具备单元测试能力,但当前CI未强制执行。
- CI编排
- Jenkinsfile自定义构建命令为mvn clean deploy -N -Dmaven.test.skip=true,关闭测试;建议在质量门禁中启用测试与覆盖率统计。
图表来源
章节来源
测试策略与覆盖率要求
- 前端
- 单元测试:jest.config.js已配置测试匹配与覆盖率输出,建议在质量门禁中设置覆盖率阈值(如语句、分支、函数、行)。
- 集成/端到端测试:当前未发现集成或E2E测试配置文件,建议补充Cypress或Playwright流水线并在质量门禁中强制执行。
- 后端
- 单元测试:pom.xml默认跳过测试,建议在质量门禁中开启测试执行,并结合Surefire报告与JaCoCo覆盖率统计。
- 集成测试:建议在CI中增加对服务间通信与数据库交互的集成测试步骤,并纳入质量门禁阈值。
章节来源
安全扫描与敏感信息检测
- 依赖漏洞扫描
- 建议在CI中引入OWASP Dependency-Check或类似工具,扫描Maven/Node依赖中的已知漏洞,并在质量门禁中设置“禁止存在高危漏洞”的策略。
- 代码安全审计
- 建议在SonarQube中启用安全规则集(Security Hotspots/Issues),并设置安全问题阈值。
- 敏感信息检测
- 在CI中加入Secrets Detection(如Trufflehog、Gitleaks)扫描,拦截硬编码密码、Token等敏感信息。
说明:当前仓库未发现专门的安全扫描脚本或配置,建议在质量门禁中新增上述步骤。
性能测试要求
- 压力测试与负载测试
- 建议在CI中引入JMeter或k6等工具,针对关键接口与页面进行压力与负载测试,并将RPS、P95/P99延迟、错误率纳入质量门禁阈值。
- 性能基准测试
- 建议定期运行基准测试,对比不同版本的性能指标,形成趋势报告。
说明:当前仓库未发现性能测试配置,建议补充至质量门禁流程。
依赖关系分析
前端与后端均通过各自的Jenkinsfile接入通用CI框架,SonarQube作为统一的质量分析平台。后端通过Maven聚合工程管理模块与依赖,前端通过npm管理依赖与构建。
图表来源
- dm/lemes-web/Jenkinsfile:1-27
- dm/lemes-web/devops-ci.yml:35-40
- lemes-cloud/Jenkinsfile:1-13
- lemes-cloud/devops-ci.yml:20-27
- lemes-cloud/pom.xml:1-583
章节来源
性能考虑
- SonarQube分析耗时:建议在夜间或低峰期运行,避免影响开发效率。
- 测试执行:后端默认跳过测试,建议在质量门禁中开启测试并分环境执行,减少CI时间。
- 覆盖率报告:前端与后端均应生成并上报覆盖率,作为质量门禁的量化指标之一。
故障排查指南
- 前端构建失败
- 检查devops-ci.yml中prepare/build/tar阶段命令是否正确,确认npm registry与dist路径。
- 参考:dm/lemes-web/devops-ci.yml:16-40
- 前端覆盖率缺失
- 检查jest.config.js的collectCoverageFrom与coverageDirectory配置,确保测试文件被匹配且报告输出路径正确。
- 参考:dm/lemes-web/jest.config.js:16-27
- 后端SonarQube分析失败
- 检查devops-ci.yml中sonar参数(项目键、主机、凭据)是否正确,确认网络可达性。
- 参考:lemes-cloud/devops-ci.yml:20-27
- 后端测试未执行
- 检查pom.xml中maven-surefire-plugin的skipTests配置,必要时在质量门禁中调整为false。
- 参考:lemes-cloud/pom.xml:347-353
- CI部署目标不匹配
- 检查Jenkinsfile中的willDeploy与submodule配置,确认分支/视图与目标环境一致。
- 参考:dm/lemes-web/Jenkinsfile:5-22
章节来源
- dm/lemes-web/devops-ci.yml:16-40
- dm/lemes-web/jest.config.js:16-27
- lemes-cloud/devops-ci.yml:20-27
- lemes-cloud/pom.xml:347-353
- dm/lemes-web/Jenkinsfile:5-22
结论
当前DeviceMate项目已在CI中实现了前端与后端的SonarQube静态分析,前端具备单元测试与覆盖率配置,后端具备Maven测试与分析能力。建议在质量门禁中进一步完善以下方面:
- 明确覆盖率阈值与测试失败策略;
- 补充后端测试执行与覆盖率统计;
- 新增安全扫描与敏感信息检测;
- 引入性能测试与基准测试;
- 统一质量报告与度量指标,支撑项目管理与质量控制。
附录
- 质量门禁配置清单(建议)
- 代码规范检查:ESLint/Prettier(前端)与Spotless(后端)。
- 静态代码分析:SonarQube(已实现)。
- 代码覆盖率:前端Jest覆盖率、后端JaCoCo覆盖率。
- 安全扫描:OWASP Dependency-Check、Secrets Detection。
- 性能测试:JMeter/k6基准与压测。
- 阈值与失败处理:覆盖率阈值、安全问题阈值、性能指标阈值。
- 例外管理:白名单、临时豁免与审批流程。