Claude Code Plugins

Community-maintained marketplace

Feedback

33-store-module-architecture

@TencentBlueKing/bk-ci
2.5k
0

Store 研发商店模块架构指南,涵盖插件/模板/镜像管理、版本发布、审核流程、商店市场、扩展点机制。当用户开发研发商店功能、发布插件、管理模板或实现扩展点时使用。

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 33-store-module-architecture
description Store 研发商店模块架构指南,涵盖插件/模板/镜像管理、版本发布、审核流程、商店市场、扩展点机制。当用户开发研发商店功能、发布插件、管理模板或实现扩展点时使用。

Store 研发商店模块架构指南

模块定位: Store 是 BK-CI 的研发商店模块,负责管理流水线插件(Atom)、流水线模板(Template)、容器镜像(Image)等可复用组件的发布、审核、安装、统计等全生命周期管理。

一、模块整体结构

1.1 子模块划分

src/backend/ci/core/store/
├── api-store/               # API 接口定义层
│   └── src/main/kotlin/com/tencent/devops/store/
│       ├── api/
│       │   ├── atom/            # 插件相关接口(25+ 文件)
│       │   ├── common/          # 通用接口(40+ 文件)
│       │   ├── container/       # 容器相关接口
│       │   ├── image/           # 镜像相关接口
│       │   └── template/        # 模板相关接口
│       ├── constant/            # 常量和消息码
│       └── pojo/                # 数据对象(100+ 文件)
│           ├── app/             # 应用相关
│           ├── atom/            # 插件相关
│           ├── common/          # 通用对象
│           ├── image/           # 镜像相关
│           └── template/        # 模板相关
│
├── biz-store/               # 业务逻辑层
│   └── src/main/kotlin/com/tencent/devops/store/
│       ├── atom/                # 插件业务
│       │   ├── dao/             # 插件数据访问
│       │   ├── factory/         # 工厂类
│       │   ├── resources/       # API 实现
│       │   └── service/         # 插件服务
│       ├── common/              # 通用业务
│       │   ├── dao/             # 通用数据访问(60+ 文件)
│       │   ├── handler/         # 处理器链
│       │   ├── resources/       # API 实现
│       │   └── service/         # 通用服务
│       ├── image/               # 镜像业务
│       └── template/            # 模板业务
│
├── model-store/             # 数据模型层(JOOQ 生成)
└── boot-store/              # Spring Boot 启动模块

1.2 Store 组件类型

类型 枚举值 说明 核心表
插件(Atom) ATOM 流水线可执行插件 T_ATOM
模板(Template) TEMPLATE 流水线模板 T_TEMPLATE
镜像(Image) IMAGE 容器构建镜像 T_IMAGE

二、核心概念

2.1 插件(Atom)模型

┌─────────────────────────────────────────────────────────────────────────┐
│                         插件模型                                         │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                      T_ATOM(插件主表)                           │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │   │
│  │  │  ATOM_CODE  │  │    NAME     │  │   VERSION   │              │   │
│  │  │ (插件标识)   │  │ (插件名称)   │  │ (版本号)     │              │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘              │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │   │
│  │  │ ATOM_STATUS │  │ CLASS_TYPE  │  │ LATEST_FLAG │              │   │
│  │  │ (插件状态)   │  │ (插件大类)   │  │ (最新版本)   │              │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘              │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                              │                                           │
│         ┌────────────────────┼────────────────────┐                     │
│         ▼                    ▼                    ▼                     │
│  ┌───────────────┐   ┌───────────────┐   ┌───────────────┐             │
│  │ T_ATOM_ENV_   │   │ T_ATOM_       │   │ T_ATOM_       │             │
│  │     INFO      │   │   FEATURE     │   │ VERSION_LOG   │             │
│  │ (执行环境信息) │   │ (特性配置)    │   │ (版本日志)     │             │
│  └───────────────┘   └───────────────┘   └───────────────┘             │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

2.2 插件核心字段

字段 类型 说明
ID String 插件版本 ID(UUID)
ATOM_CODE String 插件唯一标识(不变)
NAME String 插件名称
VERSION String 版本号(如 1.0.0)
ATOM_STATUS Int 插件状态
CLASS_TYPE String 插件大类(marketBuild 等)
JOB_TYPE String 适用 Job 类型(AGENT/AGENT_LESS)
OS String 支持的操作系统
CLASSIFY_ID String 分类 ID
LATEST_FLAG Boolean 是否最新版本
DEFAULT_FLAG Boolean 是否默认插件
PUBLISHER String 发布者
REPOSITORY_HASH_ID String 代码库 HashId

2.3 插件状态流转

enum class AtomStatusEnum(val status: Int) {
    INIT(0),              // 初始化
    COMMITTING(1),        // 提交中
    BUILDING(2),          // 构建中
    BUILD_FAIL(3),        // 构建失败
    TESTING(4),           // 测试中
    AUDITING(5),          // 审核中
    AUDIT_REJECT(6),      // 审核驳回
    RELEASED(7),          // 已发布
    GROUNDING_SUSPENSION(8), // 上架中止
    UNDERCARRIAGING(9),   // 下架中
    UNDERCARRIAGED(10),   // 已下架
}
┌─────────────────────────────────────────────────────────────────┐
│                     插件状态流转图                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  INIT ──► COMMITTING ──► BUILDING ──► TESTING ──► AUDITING     │
│                              │                        │          │
│                              ▼                        ▼          │
│                         BUILD_FAIL              AUDIT_REJECT     │
│                                                       │          │
│                                                       ▼          │
│                                                   RELEASED       │
│                                                       │          │
│                                                       ▼          │
│                                              UNDERCARRIAGING     │
│                                                       │          │
│                                                       ▼          │
│                                              UNDERCARRIAGED      │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

2.4 插件分类

// 插件大类
enum class AtomTypeEnum(val type: Int) {
    SELF_DEVELOPED(0),    // 自研
    THIRD_PARTY(1),       // 第三方
}

// Job 类型
enum class JobTypeEnum(val type: String) {
    AGENT("AGENT"),           // 有构建环境
    AGENT_LESS("AGENT_LESS"), // 无构建环境
}

三、核心数据库表

3.1 插件相关表

表名 说明 核心字段
T_ATOM 插件主表 ATOM_CODE, NAME, VERSION, ATOM_STATUS, LATEST_FLAG
T_ATOM_ENV_INFO 插件执行环境 ATOM_ID, PKG_PATH, LANGUAGE, TARGET
T_ATOM_FEATURE 插件特性 ATOM_CODE, VISIBILITY_LEVEL, YAML_FLAG, QUALITY_FLAG
T_ATOM_BUILD_INFO 插件构建信息 LANGUAGE, SCRIPT, SAMPLE_PROJECT_PATH
T_ATOM_VERSION_LOG 版本日志 ATOM_ID, RELEASE_TYPE, CONTENT
T_ATOM_LABEL_REL 插件标签关联 ATOM_ID, LABEL_ID
T_ATOM_OFFLINE 插件下架记录 ATOM_CODE, EXPIRE_TIME, STATUS

3.2 模板相关表

表名 说明 核心字段
T_TEMPLATE 模板主表 TEMPLATE_CODE, TEMPLATE_NAME, VERSION, TEMPLATE_STATUS
T_TEMPLATE_CATEGORY_REL 模板分类关联 TEMPLATE_ID, CATEGORY_ID
T_TEMPLATE_LABEL_REL 模板标签关联 TEMPLATE_ID, LABEL_ID

3.3 镜像相关表

表名 说明 核心字段
T_IMAGE 镜像主表 IMAGE_CODE, IMAGE_NAME, VERSION, IMAGE_STATUS
T_IMAGE_CATEGORY_REL 镜像分类关联 IMAGE_ID, CATEGORY_ID
T_IMAGE_LABEL_REL 镜像标签关联 IMAGE_ID, LABEL_ID

3.4 通用表

表名 说明
T_CLASSIFY 分类表
T_CATEGORY 范畴表
T_LABEL 标签表
T_STORE_MEMBER 组件成员表
T_STORE_PROJECT_REL 组件项目关联表
T_STORE_COMMENT 评论表
T_STORE_COMMENT_REPLY 评论回复表
T_STORE_COMMENT_PRAISE 评论点赞表
T_STORE_STATISTICS 统计表
T_STORE_APPROVE 审批表
T_STORE_SENSITIVE_API 敏感 API 表
T_STORE_SENSITIVE_CONF 敏感配置表

3.5 容器编译环境表

表名 说明
T_APPS 编译环境信息表
T_APP_ENV 编译环境变量表
T_APP_VERSION 编译环境版本表
T_CONTAINER 容器信息表
T_BUILD_RESOURCE 构建资源表

四、分层架构

┌─────────────────────────────────────────────────────────────────────────┐
│                              请求入口                                    │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         API 层 (api-store)                               │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐    │
│  │UserMarket    │ │ServiceAtom   │ │UserTemplate  │ │UserImage     │    │
│  │AtomResource  │ │Resource      │ │Resource      │ │Resource      │    │
│  │(用户插件管理) │ │(服务间调用)   │ │(模板管理)     │ │(镜像管理)    │    │
│  └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘    │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐                     │
│  │UserAtom      │ │OpAtom        │ │UserStore     │                     │
│  │ReleaseRes    │ │Resource      │ │MemberRes     │                     │
│  │(插件发布)     │ │(运维管理)     │ │(成员管理)     │                     │
│  └──────────────┘ └──────────────┘ └──────────────┘                     │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                       业务层 (biz-store)                                 │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                      插件服务 (atom/service/)                     │   │
│  │  MarketAtomService       - 插件市场服务                           │   │
│  │  AtomReleaseService      - 插件发布服务                           │   │
│  │  AtomService             - 插件基础服务                           │   │
│  │  MarketAtomEnvService    - 插件环境服务                           │   │
│  │  MarketAtomArchiveService - 插件归档服务                          │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                    │                                     │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                      通用服务 (common/service/)                   │   │
│  │  StoreCommentService     - 评论服务                               │   │
│  │  StoreMemberService      - 成员管理服务                           │   │
│  │  StoreProjectService     - 项目关联服务                           │   │
│  │  StoreStatisticService   - 统计服务                               │   │
│  │  StoreApproveService     - 审批服务                               │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                    │                                     │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │                      处理器链 (common/handler/)                   │   │
│  │  StoreCreateHandlerChain   - 创建处理器链                         │   │
│  │  StoreUpdateHandlerChain   - 更新处理器链                         │   │
│  │  StoreDeleteHandlerChain   - 删除处理器链                         │   │
│  └──────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         DAO 层 (biz-store/dao)                           │
│  AtomDao (59KB) | MarketAtomDao (31KB) | StoreProjectRelDao (25KB)       │
│  StoreBaseQueryDao (20KB) | MarketAtomEnvInfoDao | ...                  │
└─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                      数据层 (model-store + MySQL)                        │
│  数据库:devops_ci_store(共 50+ 张表)                                  │
└─────────────────────────────────────────────────────────────────────────┘

五、核心类速查

5.1 API 接口层

类名 路径前缀 职责
UserMarketAtomResource /user/market/atom 用户插件市场操作
UserAtomReleaseResource /user/market/atom/release 插件发布
ServiceAtomResource /service/atoms 服务间插件查询
ServiceMarketAtomResource /service/market/atom 服务间市场插件
OpAtomResource /op/market/atom 运维插件管理
UserTemplateResource /user/market/template 模板管理
UserMarketImageResource /user/market/image 镜像管理
UserStoreMemberResource /user/store/member 成员管理

5.2 Service 层

类名 职责
MarketAtomService 插件市场核心服务
AtomReleaseService 插件发布流程
AtomService 插件基础操作
MarketAtomEnvService 插件执行环境
MarketAtomArchiveService 插件归档
AtomCooperationService 插件协作
AtomNotifyService 插件通知

5.3 DAO 层

类名 文件大小 职责
AtomDao 59KB 插件主表访问(最大)
MarketAtomDao 31KB 市场插件访问
StoreProjectRelDao 25KB 项目关联访问
StoreBaseQueryDao 20KB 基础查询
MarketAtomEnvInfoDao 13KB 插件环境访问

六、核心流程

6.1 插件发布流程

开发者提交发布请求
    │
    ▼
UserAtomReleaseResource.createAtom()
    │
    ▼
AtomReleaseService.handleAtomRelease()
    │
    ├─► 参数校验
    │   ├─► 校验插件代码唯一性
    │   ├─► 校验版本号格式
    │   └─► 校验代码库权限
    │
    ├─► 创建插件记录
    │   ├─► atomDao.create()
    │   └─► 状态设为 INIT
    │
    ├─► 触发构建流水线
    │   └─► 调用 Process 模块构建插件包
    │
    ├─► 构建完成回调
    │   ├─► 更新状态为 TESTING
    │   └─► 上传插件包到制品库
    │
    ├─► 提交审核
    │   └─► 状态设为 AUDITING
    │
    └─► 审核通过
        ├─► 状态设为 RELEASED
        └─► 更新 LATEST_FLAG

6.2 插件安装流程

用户安装插件到项目
    │
    ▼
UserMarketAtomResource.installAtom()
    │
    ▼
MarketAtomService.installAtom()
    │
    ├─► 权限校验
    │   └─► 检查用户是否有项目权限
    │
    ├─► 检查插件可见性
    │   └─► 检查项目是否在可见范围内
    │
    ├─► 创建关联记录
    │   └─► storeProjectRelDao.create()
    │
    └─► 更新统计数据
        └─► 增加安装量

6.3 处理器链模式

Store 模块使用责任链模式处理组件的创建、更新、删除:

// 创建处理器链
class StoreCreateHandlerChain {
    private val handlers = listOf(
        StoreCreateParamCheckHandler,    // 参数校验
        StoreCreatePreBusHandler,        // 前置业务处理
        StoreCreateDataPersistHandler,   // 数据持久化
        StoreCreatePostBusHandler        // 后置业务处理
    )
    
    fun handle(context: StoreContext) {
        handlers.forEach { it.handle(context) }
    }
}

七、与其他模块的关系

7.1 依赖关系

┌─────────────────────────────────────────────────────────────────┐
│                    Store 模块依赖关系                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│                  ┌───────────────┐                               │
│                  │     store     │                               │
│                  └───────┬───────┘                               │
│                          │                                       │
│       ┌──────────────────┼──────────────────┐                   │
│       ▼                  ▼                  ▼                   │
│  ┌───────────┐    ┌───────────┐    ┌───────────┐               │
│  │  project  │    │repository │    │artifactory│               │
│  │ (项目信息) │    │ (代码库)   │    │ (制品库)   │               │
│  └───────────┘    └───────────┘    └───────────┘               │
│                                                                  │
│  被依赖:                                                        │
│  - process(流水线使用插件)                                      │
│  - worker(构建机执行插件)                                       │
└─────────────────────────────────────────────────────────────────┘

7.2 服务间调用示例

// Process 模块获取插件信息
// 注意:projectCode 是 T_PROJECT.english_name
client.get(ServiceAtomResource::class).getAtomByCode(
    atomCode = atomCode,
    username = userId
)

// 获取插件执行环境
client.get(ServiceMarketAtomEnvResource::class).getAtomEnv(
    projectCode = projectId,  // english_name
    atomCode = atomCode,
    atomVersion = version
)

// 获取项目可用的插件列表
client.get(ServiceMarketAtomResource::class).getProjectElements(
    projectCode = projectId
)

八、插件开发规范

8.1 插件目录结构

my-atom/
├── task.json           # 插件配置文件
├── README.md           # 插件说明
├── src/                # 源代码
│   └── main.py         # 入口文件
├── requirements.txt    # Python 依赖
└── logo.png            # 插件图标

8.2 task.json 配置

{
  "atomCode": "myAtom",
  "execution": {
    "language": "python",
    "packagePath": "src/",
    "target": "main.py"
  },
  "input": {
    "param1": {
      "label": "参数1",
      "type": "vuex-input",
      "required": true
    }
  },
  "output": {
    "output1": {
      "type": "string",
      "description": "输出参数"
    }
  }
}

8.3 插件开发语言支持

语言 说明
Python 推荐,有完善的 SDK
NodeJS 支持
Java 支持
Golang 支持

九、开发规范

9.1 新增组件类型

  1. StoreTypeEnum 添加新类型
  2. 创建对应的主表和关联表
  3. 创建 DAO、Service、Resource 层代码
  4. 在处理器链中注册新类型的处理器

9.2 插件查询示例

// 根据插件代码查询最新版本
val atom = atomDao.getLatestAtomByCode(
    dslContext = dslContext,
    atomCode = atomCode
)

// 查询项目可用的插件
val atoms = atomDao.getProjectAtoms(
    dslContext = dslContext,
    projectCode = projectId,  // english_name
    classifyCode = classifyCode
)

// 查询插件执行环境
val envInfo = marketAtomEnvInfoDao.getMarketAtomEnvInfo(
    dslContext = dslContext,
    atomId = atomId
)

十、常见问题

Q: atomCode 和 atomId 的区别? A: atomCode 是插件唯一标识(不变),atomId 是具体版本的 ID(每个版本不同)。

Q: 如何判断插件是否可用? A: 检查 ATOM_STATUS = 7(RELEASED)且 LATEST_FLAG = true

Q: 插件如何关联到项目? A: 通过 T_STORE_PROJECT_REL 表关联,STORE_CODE 存储 atomCode

Q: 如何获取插件的执行环境? A: 查询 T_ATOM_ENV_INFO 表,根据 ATOM_ID 获取 PKG_PATHTARGET 等信息。


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