SonarQube 门禁执行器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/sonarqube-gate-enforcer。
技能介绍
要解决的问题
质量门禁(Quality Gate)本质是 SonarQube 服务端的能力,但很多团队把它接进 CI 之后,仍然靠人盯面板上的颜色变化来决定能不能合并。一旦没人注意,覆盖率下滑、重复率超标、引入新缺陷的分支就会悄悄合进主干,等发现时已经影响了一批下游工作。这个技能要解决的问题很直接:把门禁判断从「事后看一眼」变成流水线里的一次自动检查,不通过就当场拦住合并。
工作原理
技能围绕 SonarQube 的 Web API 展开,核心是调用 /api/qualitygates/project_status 端点,大致分三步:
- 在 CI 中对目标项目触发一次门禁状态查询,拿到服务端计算好的项目状态结果;
- 依据返回结果判断门禁是否通过,关注覆盖率是否下降、重复率是否超出阈值、是否引入了新缺陷;
- 门禁未通过时,让流水线以失败状态结束,从而阻断后续的合并动作。
这套机制的关键在于,判断依据完全来自 SonarQube 服务端真实的扫描结果,而不是在 CI 里重新实现一套阈值比较逻辑,两边口径天然一致。
适用边界与注意点
- 技能只负责执行门禁判断与拦截,扫描本身仍由 SonarQube 完成,服务端需要先有可用的扫描数据;
- 构建环境要求 Java 17 和
npm,且原生git必须已安装并存在于PATH中; - 如果改动涉及 UI 部分,需要额外克隆
sonarqube-webapp仓库、在本地构建,再通过WEBAPP_BUILD_PATH环境变量让主仓库使用该前端构建产物; - 提交需遵守上游代码风格,每个 Pull Request 都会执行 Travis 构建;只想编译不跑测试时,可以用
-x test跳过测试。
使用场景
- 在 CI 流水线中对 Java 项目触发 SonarQube 扫描后,需自动调用门禁接口决定是否允许合并。
- 当代码改动导致单元测试覆盖率下滑或重复率超标时,需要在合并前通过门禁状态自动拦截。
- 在本地编译涉及前端改动的 SonarQube 代码时,需配合环境变量完成 webapp 与后端的联合构建。
- 每次提交 Pull Request 时,需确保代码风格符合规范并通过 CI 构建中的测试校验。
适合人员
- Java 后端开发者:需要在提交 PR 时确保代码质量指标符合 SonarQube 门禁要求,避免构建失败。
- DevOps 工程师:负责配置 CI 流水线,需要将 SonarQube 质量门禁状态作为合并代码的强制检查项。
- 项目维护者:需要在主分支上强制实施质量标准,自动拦截引入新缺陷或覆盖率下降的 PR。