Claude Code Plugins

Community-maintained marketplace

Feedback

38-quality-module-architecture

@TencentBlueKing/bk-ci
2.5k
0

Quality 质量红线模块架构指南,涵盖质量规则管理、指标配置、准入准出控制点、红线拦截与放行机制。当用户需要开发质量管控功能、配置质量红线、实现质量检查拦截时使用。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name 38-quality-module-architecture
description Quality 质量红线模块架构指南,涵盖质量规则管理、指标配置、准入准出控制点、红线拦截与放行机制。当用户需要开发质量管控功能、配置质量红线、实现质量检查拦截时使用。

Quality 质量红线模块架构指南

概述

Quality(质量红线)模块是 BK-CI 的质量管控服务,负责在流水线执行过程中进行质量检查和拦截,确保只有符合质量标准的构建才能继续执行或发布。

模块职责

  • 质量规则管理(创建、编辑、启用/禁用)
  • 质量指标管理(内置指标、自定义指标)
  • 控制点管理(准入/准出检查点)
  • 质量红线拦截与放行
  • 质量数据统计与报表

一、模块结构

src/backend/ci/core/quality/
├── api-quality/           # API 接口定义
│   └── src/main/kotlin/com/tencent/devops/quality/
│       ├── api/           # Resource 接口
│       │   ├── UserGroupResource.kt
│       │   ├── v2/        # V2 版本 API
│       │   │   ├── UserQualityRuleResource.kt
│       │   │   ├── ServiceQualityRuleResource.kt
│       │   │   ├── UserQualityIndicatorResource.kt
│       │   │   └── ...
│       │   └── v3/        # V3 版本 API
│       ├── constant/      # 常量定义
│       │   ├── QualityMessageCode.kt
│       │   ├── I18nConstants.kt
│       │   └── MQ.kt
│       └── pojo/          # 数据传输对象
│           ├── QualityRule*.kt
│           ├── Group*.kt
│           └── RuleInterceptHistory.kt
├── biz-quality/           # 业务逻辑层
└── boot-quality/          # 启动模块

二、核心概念

2.1 质量红线模型

┌─────────────────────────────────────────────────────────────────────────┐
│                        质量红线核心模型                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                     质量规则 (Quality Rule)                        │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐   │   │
│  │  │ 规则名称    │  │ 控制点      │  │ 指标阈值列表             │   │   │
│  │  │ (name)      │  │ (control    │  │ (indicator_range)       │   │   │
│  │  │             │  │  point)     │  │                         │   │   │
│  │  └─────────────┘  └─────────────┘  └─────────────────────────┘   │   │
│  │                                                                   │   │
│  │  ┌─────────────────────────────────────────────────────────────┐ │   │
│  │  │                    生效范围                                  │ │   │
│  │  │  pipeline_template_range | indicator_range                 │ │   │
│  │  └─────────────────────────────────────────────────────────────┘ │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                                                          │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                     控制点 (Control Point)                        │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐   │   │
│  │  │ 原子类型    │  │ 研发阶段    │  │ 红线位置                 │   │   │
│  │  │ (element    │  │ (stage)     │  │ (BEFORE/AFTER)          │   │   │
│  │  │  type)      │  │             │  │                         │   │   │
│  │  └─────────────┘  └─────────────┘  └─────────────────────────┘   │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                                                          │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                     质量指标 (Indicator)                          │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐   │   │
│  │  │ 指标名称    │  │ 数据类型    │  │ 阈值操作                 │   │   │
│  │  │ (name)      │  │ (data_type) │  │ (>=, <=, =, !=)         │   │   │
│  │  └─────────────┘  └─────────────┘  └─────────────────────────┘   │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

2.2 核心实体关系

实体 说明 关系
Quality Rule 质量规则 包含多个指标阈值
Control Point 控制点 关联到流水线原子
Indicator 质量指标 定义检查项和阈值
Metadata 元数据 指标的数据来源
History 拦截历史 记录每次检查结果

2.3 红线位置

enum class ControlPointPosition {
    BEFORE,  // 准入检查(原子执行前)
    AFTER    // 准出检查(原子执行后)
}

三、数据库设计

3.1 核心表结构

表名 说明
T_QUALITY_RULE 质量规则表
T_QUALITY_CONTROL_POINT 控制点表
T_QUALITY_INDICATOR 质量指标表
T_QUALITY_METADATA 指标元数据表
T_QUALITY_HIS_DETAIL_METADATA 历史元数据详情
T_HISTORY 拦截历史记录
T_GROUP 通知组(红线触发通知)
T_COUNT_INTERCEPT 拦截统计(按项目/日期)
T_COUNT_PIPELINE 流水线拦截统计
T_COUNT_RULE 规则拦截统计
T_CONTROL_POINT 控制点定义
T_CONTROL_POINT_METADATA 控制点元数据
T_CONTROL_POINT_TASK 控制点任务

3.2 关键字段说明

T_QUALITY_RULE

- ID: 规则主键
- NAME: 规则名称
- PROJECT_ID: 项目ID(english_name)
- CONTROL_POINT: 控制点原子类型
- CONTROL_POINT_POSITION: 红线位置(BEFORE/AFTER)
- INDICATOR_RANGE: 指标阈值范围(JSON)
- PIPELINE_TEMPLATE_RANGE: 生效流水线/模板范围
- ENABLE: 是否启用
- GATEWAY_ID: 红线匹配ID

T_QUALITY_INDICATOR

- ID: 指标主键
- ELEMENT_TYPE: 关联的原子类型
- ELEMENT_NAME: 原子名称
- ELEMENT_DETAIL: 原子详情
- EN_NAME: 英文名称
- CN_NAME: 中文名称
- METADATA_IDS: 关联的元数据ID
- DEFAULT_OPERATION: 默认操作符
- OPERATION_AVAILABLE: 可用操作符
- THRESHOLD: 阈值
- THRESHOLD_TYPE: 阈值类型

四、API 接口设计

4.1 用户级接口

@Path("/user/rules")
interface UserQualityRuleResource {
    
    @POST
    @Path("/projects/{projectId}/create")
    fun create(
        @PathParam("projectId") projectId: String,
        @HeaderParam(AUTH_HEADER_USER_ID) userId: String,
        rule: RuleCreate
    ): Result<String>
    
    @GET
    @Path("/projects/{projectId}/list")
    fun list(
        @PathParam("projectId") projectId: String,
        @QueryParam("page") page: Int?,
        @QueryParam("pageSize") pageSize: Int?
    ): Result<Page<QualityRule>>
    
    @PUT
    @Path("/projects/{projectId}/{ruleHashId}/update")
    fun update(
        @PathParam("projectId") projectId: String,
        @PathParam("ruleHashId") ruleHashId: String,
        rule: RuleUpdate
    ): Result<Boolean>
    
    @DELETE
    @Path("/projects/{projectId}/{ruleHashId}/delete")
    fun delete(
        @PathParam("projectId") projectId: String,
        @PathParam("ruleHashId") ruleHashId: String
    ): Result<Boolean>
}

4.2 服务间接口

@Path("/service/rules")
interface ServiceQualityRuleResource {
    
    @POST
    @Path("/projects/{projectId}/pipelines/{pipelineId}/builds/{buildId}/check")
    fun check(
        @PathParam("projectId") projectId: String,
        @PathParam("pipelineId") pipelineId: String,
        @PathParam("buildId") buildId: String,
        request: QualityCheckRequest
    ): Result<QualityCheckResult>
    
    @GET
    @Path("/projects/{projectId}/matchRuleList")
    fun matchRuleList(
        @PathParam("projectId") projectId: String,
        @QueryParam("pipelineId") pipelineId: String
    ): Result<List<QualityRule>>
}

4.3 构建过程接口

@Path("/build/quality")
interface BuildQualityMetadataResource {
    
    @POST
    @Path("/projects/{projectId}/pipelines/{pipelineId}/builds/{buildId}/metadata/save")
    fun saveMetadata(
        @PathParam("projectId") projectId: String,
        @PathParam("pipelineId") pipelineId: String,
        @PathParam("buildId") buildId: String,
        metadata: List<QualityMetadata>
    ): Result<Boolean>
}

五、质量检查流程

5.1 红线检查时序

┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐
│ Process │     │ Quality │     │ 指标    │     │ 历史    │
│ Engine  │     │ Service │     │ Service │     │ Service │
└────┬────┘     └────┬────┘     └────┬────┘     └────┬────┘
     │               │               │               │
     │ 1.检查红线    │               │               │
     │──────────────>│               │               │
     │               │               │               │
     │               │ 2.获取匹配规则│               │
     │               │──────────────>│               │
     │               │               │               │
     │               │ 3.获取指标数据│               │
     │               │<──────────────│               │
     │               │               │               │
     │               │ 4.比对阈值    │               │
     │               │───────┐       │               │
     │               │       │       │               │
     │               │<──────┘       │               │
     │               │               │               │
     │               │ 5.记录历史    │               │
     │               │──────────────────────────────>│
     │               │               │               │
     │ 6.返回结果    │               │               │
     │<──────────────│               │               │
     │               │               │               │
     │ 7.拦截/放行   │               │               │
     │───────┐       │               │               │
     │       │       │               │               │
     │<──────┘       │               │               │

5.2 检查结果处理

enum class QualityCheckResult {
    PASS,           // 通过
    FAIL,           // 失败(拦截)
    WAIT,           // 等待审核
    INTERCEPT       // 已拦截
}

六、与其他模块的关系

6.1 依赖关系

Quality 模块
    │
    ├──> Process(流水线)
    │    - 在流水线执行时触发质量检查
    │    - 根据检查结果决定是否继续执行
    │
    ├──> Store(研发商店)
    │    - 获取插件的控制点定义
    │    - 获取插件的质量指标元数据
    │
    ├──> Project(项目)
    │    - 获取项目信息
    │    - 项目级别的质量规则管理
    │
    └──> Notify(通知)
         - 红线触发时发送通知
         - 通知审核人员

6.2 事件机制

// 质量检查事件
data class QualityCheckEvent(
    val projectId: String,
    val pipelineId: String,
    val buildId: String,
    val position: ControlPointPosition,
    val elementType: String
)

// MQ 队列定义
object QualityMQ {
    const val EXCHANGE_QUALITY_CHECK = "e.engine.quality.check"
    const val QUEUE_QUALITY_CHECK = "q.engine.quality.check"
    const val ROUTE_QUALITY_CHECK = "r.engine.quality.check"
}

七、开发规范

7.1 新增质量指标

  1. T_QUALITY_INDICATOR 表中注册指标
  2. 在对应插件中上报元数据
  3. 配置指标与控制点的关联
// 插件上报质量数据示例
val metadata = QualityMetadata(
    elementType = "CodeCC",
    data = mapOf(
        "defectCount" to "10",
        "coverageRate" to "85.5"
    )
)
client.get(BuildQualityMetadataResource::class).saveMetadata(
    projectId = projectId,
    pipelineId = pipelineId,
    buildId = buildId,
    metadata = listOf(metadata)
)

7.2 新增控制点

  1. T_QUALITY_CONTROL_POINT 表中注册
  2. 配置支持的红线位置(BEFORE/AFTER)
  3. 关联可用的质量指标

7.3 自定义规则

// 创建质量规则
val rule = RuleCreate(
    name = "代码扫描质量门禁",
    desc = "代码扫描缺陷数不能超过10个",
    controlPoint = "CodeCC",
    controlPointPosition = "AFTER",
    indicators = listOf(
        RuleIndicator(
            indicatorId = "defectCount",
            operation = "<=",
            threshold = "10"
        )
    ),
    range = listOf("*"),  // 所有流水线
    notifyGroupList = listOf(groupId)
)

八、常见问题

Q: 质量规则如何与流水线关联? A: 通过 PIPELINE_TEMPLATE_RANGE 字段配置生效范围,支持:

  • 指定流水线ID列表
  • 指定流水线模板
  • * 表示项目下所有流水线

Q: 红线拦截后如何处理? A: 有三种处理方式:

  1. 自动拦截:构建失败
  2. 人工审核:等待审核人员决定
  3. 告警模式:仅发送通知,不拦截

Q: 如何查看拦截历史? A: 通过 UserQualityInterceptResource 接口查询,或在前端"质量红线"页面查看。


版本: 1.0.0 | 更新日期: 2025-12-11