Skip to content

质量门禁机制

**本文引用的文件** - [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)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

引言

本文件面向DeviceMate项目的质量门禁机制,系统化梳理前端与后端在持续集成中的质量保障实践,覆盖代码规范检查、静态代码分析、覆盖率要求、自动化测试策略(单元测试、集成测试)、安全扫描与敏感信息检测、性能测试要求、质量门禁配置(阈值、失败处理、例外管理),以及质量报告与度量指标,帮助项目管理与开发团队建立可落地的质量控制体系。

项目结构

DeviceMate由多模块构成,前端采用Vue生态,后端基于Spring Cloud/Spring Boot Maven多模块工程。质量门禁在CI层统一编排,前端通过Jenkinsfile与devops-ci.yml驱动构建、打包与静态分析;后端通过Jenkinsfile与Maven插件实现构建、测试与SonarQube分析。

图表来源

章节来源

核心组件

  • 前端质量门禁
    • 构建与打包:通过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版本,关闭镜像构建。

章节来源

架构总览

下图展示质量门禁在CI中的整体流程:前端与后端分别通过各自的Jenkinsfile与配置文件接入通用CI框架,完成构建、测试与静态分析,并将结果上报至SonarQube。

图表来源

详细组件分析

前端质量门禁(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管理依赖与构建。

图表来源

章节来源

性能考虑

  • SonarQube分析耗时:建议在夜间或低峰期运行,避免影响开发效率。
  • 测试执行:后端默认跳过测试,建议在质量门禁中开启测试并分环境执行,减少CI时间。
  • 覆盖率报告:前端与后端均应生成并上报覆盖率,作为质量门禁的量化指标之一。

故障排查指南

  • 前端构建失败
  • 前端覆盖率缺失
    • 检查jest.config.js的collectCoverageFrom与coverageDirectory配置,确保测试文件被匹配且报告输出路径正确。
    • 参考:dm/lemes-web/jest.config.js:16-27
  • 后端SonarQube分析失败
  • 后端测试未执行
    • 检查pom.xml中maven-surefire-plugin的skipTests配置,必要时在质量门禁中调整为false。
    • 参考:lemes-cloud/pom.xml:347-353
  • CI部署目标不匹配

章节来源

结论

当前DeviceMate项目已在CI中实现了前端与后端的SonarQube静态分析,前端具备单元测试与覆盖率配置,后端具备Maven测试与分析能力。建议在质量门禁中进一步完善以下方面:

  • 明确覆盖率阈值与测试失败策略;
  • 补充后端测试执行与覆盖率统计;
  • 新增安全扫描与敏感信息检测;
  • 引入性能测试与基准测试;
  • 统一质量报告与度量指标,支撑项目管理与质量控制。

附录

  • 质量门禁配置清单(建议)
    • 代码规范检查:ESLint/Prettier(前端)与Spotless(后端)。
    • 静态代码分析:SonarQube(已实现)。
    • 代码覆盖率:前端Jest覆盖率、后端JaCoCo覆盖率。
    • 安全扫描:OWASP Dependency-Check、Secrets Detection。
    • 性能测试:JMeter/k6基准与压测。
    • 阈值与失败处理:覆盖率阈值、安全问题阈值、性能指标阈值。
    • 例外管理:白名单、临时豁免与审批流程。