store-module-architecture

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

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "store-module-architecture" with this command: npx skills add tencentblueking/bk-ci/tencentblueking-bk-ci-store-module-architecture

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 新增组件类型

  • 在 StoreTypeEnum 添加新类型

  • 创建对应的主表和关联表

  • 创建 DAO、Service、Resource 层代码

  • 在处理器链中注册新类型的处理器

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_PATH 、TARGET 等信息。

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

git-commit-specification

No summary provided by upstream source.

Repository SourceNeeds Review
General

design-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

database-design

No summary provided by upstream source.

Repository SourceNeeds Review
General

api-interface-design

No summary provided by upstream source.

Repository SourceNeeds Review