29-4-process-dao-database

TencentBlueKing's avatarfrom TencentBlueKing

Process 模块 DAO 层与数据库表结构详细分析,涵盖 JOOQ 使用、表结构设计、索引优化、数据分片。当用户开发 Process 数据访问、设计表结构、优化查询性能或处理数据存储时使用。

⭐2.5kstars🔀514forks📁View on GitHub🕐Updated Jan 9, 2026

When & Why to Use This Skill

This Claude skill provides a comprehensive technical analysis of the Process module's DAO (Data Access Object) layer and database architecture. It covers JOOQ implementation, detailed table schema design, index optimization strategies, and data sharding techniques. It is specifically optimized for developers working on high-concurrency CI/CD engines, offering deep insights into managing pipeline metadata, build histories, and execution records for maximum performance and scalability.

Use Cases

  • Database Schema Design: Providing architectural guidance for designing and extending relational tables to support complex CI/CD pipeline models.
  • Performance Tuning: Optimizing SQL queries and indexing strategies for large-scale tables like T_PIPELINE_BUILD_HISTORY to reduce latency in high-load environments.
  • JOOQ Integration: Assisting developers in implementing type-safe, maintainable DAO layers using JOOQ within Kotlin-based backend services.
  • Execution vs. Record Separation: Implementing the architectural pattern of separating real-time engine execution tables (BUILD) from historical query tables (RECORD) to improve system throughput.
  • Data Sharding & Scalability: Applying data sharding and partitioning strategies to handle massive volumes of build logs and pipeline execution data.
name29-4-process-dao-database
descriptionProcess 模块 DAO 层与数据库表结构详细分析,涵盖 JOOQ 使用、表结构设计、索引优化、数据分片。当用户开发 Process 数据访问、设计表结构、优化查询性能或处理数据存储时使用。

Process 模块 DAO 层与数据库表结构详细分析

模块路径: src/backend/ci/core/process/biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/ 数据库: devops_process

一、DAO 层概述

1.1 目录结构

biz-base/src/main/kotlin/com/tencent/devops/process/engine/dao/
├── PipelineInfoDao.kt              # 流水线信息 (29KB)
├── PipelineBuildDao.kt             # 构建历史 (85KB) - 最大
├── PipelineBuildSummaryDao.kt      # 构建摘要 (27KB)
├── PipelineBuildContainerDao.kt    # 构建容器 (14KB)
├── PipelineBuildStageDao.kt        # 构建阶段 (14KB)
├── PipelineBuildTaskDao.kt         # 构建任务 (18KB)
├── PipelineBuildVarDao.kt          # 构建变量 (9KB)
├── PipelineResourceDao.kt          # 流水线资源/模型 (12KB)
├── PipelineResourceVersionDao.kt   # 资源版本 (29KB)
├── PipelineModelTaskDao.kt         # 模型任务索引 (16KB)
├── PipelineOperationLogDao.kt      # 操作日志 (6KB)
├── PipelinePauseValueDao.kt        # 暂停值 (5KB)
├── PipelineWebhookDao.kt           # Webhook (12KB)
├── PipelineWebhookVersionDao.kt    # Webhook 版本 (4KB)
├── PipelineJobMutexGroupDao.kt     # 互斥组 (3KB)
├── PipelineRuleDao.kt              # 规则 (6KB)
├── PipelineTriggerReviewDao.kt     # 触发审核 (3KB)
├── SubPipelineRefDao.kt            # 子流水线引用 (6KB)
├── WebhookBuildParameterDao.kt     # Webhook 参数 (1KB)
└── template/
    ├── TemplateDao.kt              # 模板 (24KB)
    └── TemplatePipelineDao.kt      # 模板流水线 (16KB)

1.2 DAO 类与表映射

DAO 类 主表 职责
PipelineInfoDao T_PIPELINE_INFO 流水线基本信息
PipelineBuildDao T_PIPELINE_BUILD_HISTORY 构建历史记录
PipelineBuildSummaryDao T_PIPELINE_BUILD_SUMMARY 构建摘要统计
PipelineBuildContainerDao T_PIPELINE_BUILD_CONTAINER 构建容器记录
PipelineBuildStageDao T_PIPELINE_BUILD_STAGE 构建阶段记录
PipelineBuildTaskDao T_PIPELINE_BUILD_TASK 构建任务记录
PipelineBuildVarDao T_PIPELINE_BUILD_VAR 构建变量
PipelineResourceDao T_PIPELINE_RESOURCE 流水线模型(JSON)
PipelineResourceVersionDao T_PIPELINE_RESOURCE_VERSION 模型版本历史
PipelineModelTaskDao T_PIPELINE_MODEL_TASK 模型任务索引
TemplateDao T_TEMPLATE 流水线模板
TemplatePipelineDao T_TEMPLATE_PIPELINE 模板实例关系

二、核心数据库表结构

2.1 T_PIPELINE_INFO - 流水线信息表

CREATE TABLE `T_PIPELINE_INFO` (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT,
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_NAME` varchar(255) NOT NULL COMMENT '流水线名称',
    `PIPELINE_DESC` varchar(255) DEFAULT '' COMMENT '流水线描述',
    `VERSION` int(11) NOT NULL DEFAULT '1' COMMENT '版本号',
    `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `UPDATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    `CREATOR` varchar(64) NOT NULL COMMENT '创建者',
    `LAST_MODIFY_USER` varchar(64) NOT NULL COMMENT '最后修改人',
    `CHANNEL` varchar(32) NOT NULL DEFAULT 'BS' COMMENT '渠道',
    `MANUAL_STARTUP` int(11) DEFAULT '1' COMMENT '是否手动启动',
    `ELEMENT_SKIP` int(11) DEFAULT '0' COMMENT '是否允许跳过插件',
    `TASK_COUNT` int(11) DEFAULT '0' COMMENT '任务数量',
    `DELETE` bit(1) DEFAULT b'0' COMMENT '是否删除',
    `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
    `LATEST_VERSION_STATUS` varchar(64) DEFAULT 'RELEASED' COMMENT '最新版本状态',
    `LOCKED` bit(1) DEFAULT b'0' COMMENT '是否锁定',
    PRIMARY KEY (`ID`),
    UNIQUE KEY `UNI_PIPELINE_ID` (`PIPELINE_ID`),
    KEY `IDX_PROJECT_ID` (`PROJECT_ID`),
    KEY `IDX_CHANNEL` (`CHANNEL`),
    KEY `IDX_DELETE` (`DELETE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线信息表';

关键字段说明:

字段 类型 说明
PIPELINE_ID varchar(34) 流水线唯一标识,格式:p-{uuid}
PROJECT_ID varchar(64) 所属项目 ID
VERSION int 当前发布版本号
CHANNEL varchar(32) 渠道:BS(蓝盾)、CODECC、GIT 等
DELETE bit 软删除标记
LATEST_VERSION_STATUS varchar(64) RELEASED/COMMITTING/BRANCH_RELEASE

2.2 T_PIPELINE_BUILD_HISTORY - 构建历史表

CREATE TABLE `T_PIPELINE_BUILD_HISTORY` (
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `PARENT_BUILD_ID` varchar(34) DEFAULT NULL COMMENT '父构建ID',
    `PARENT_TASK_ID` varchar(34) DEFAULT NULL COMMENT '父任务ID',
    `BUILD_NUM` int(11) NOT NULL COMMENT '构建号',
    `TRIGGER` varchar(32) NOT NULL COMMENT '触发方式',
    `STATUS` int(11) NOT NULL COMMENT '构建状态',
    `START_USER` varchar(64) DEFAULT NULL COMMENT '启动用户',
    `TRIGGER_USER` varchar(64) DEFAULT NULL COMMENT '触发用户',
    `START_TIME` datetime DEFAULT NULL COMMENT '开始时间',
    `END_TIME` datetime DEFAULT NULL COMMENT '结束时间',
    `QUEUE_TIME` datetime DEFAULT NULL COMMENT '排队时间',
    `TASK_COUNT` int(11) DEFAULT NULL COMMENT '任务数',
    `FIRST_TASK_ID` varchar(34) DEFAULT NULL COMMENT '第一个任务ID',
    `CHANNEL` varchar(32) DEFAULT 'BS' COMMENT '渠道',
    `VERSION` int(11) DEFAULT NULL COMMENT '流水线版本',
    `EXECUTE_TIME` bigint(20) DEFAULT NULL COMMENT '执行耗时(毫秒)',
    `BUILD_PARAMETERS` mediumtext COMMENT '构建参数(JSON)',
    `WEBHOOK_TYPE` varchar(32) DEFAULT NULL COMMENT 'Webhook类型',
    `RECOMMEND_VERSION` varchar(64) DEFAULT NULL COMMENT '推荐版本号',
    `ERROR_INFO` text COMMENT '错误信息',
    `BUILD_MSG` varchar(255) DEFAULT NULL COMMENT '构建信息',
    `BUILD_NUM_ALIAS` varchar(256) DEFAULT NULL COMMENT '构建号别名',
    `CONCURRENCY_GROUP` varchar(255) DEFAULT NULL COMMENT '并发组',
    `EXECUTE_COUNT` int(11) DEFAULT '1' COMMENT '执行次数',
    `RETRY_FLAG` bit(1) DEFAULT b'0' COMMENT '是否重试',
    `DEBUG_BUILD` bit(1) DEFAULT b'0' COMMENT '是否调试构建',
    PRIMARY KEY (`BUILD_ID`),
    KEY `IDX_PROJECT_PIPELINE` (`PROJECT_ID`, `PIPELINE_ID`),
    KEY `IDX_STATUS` (`STATUS`),
    KEY `IDX_START_TIME` (`START_TIME`),
    KEY `IDX_BUILD_NUM` (`BUILD_NUM`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建历史表';

关键字段说明:

字段 类型 说明
BUILD_ID varchar(34) 构建唯一标识,格式:b-{uuid}
BUILD_NUM int 构建号,自增
TRIGGER varchar(32) 触发方式:MANUAL/TIME_TRIGGER/WEB_HOOK 等
STATUS int 构建状态码(见 BuildStatus 枚举)
BUILD_PARAMETERS mediumtext 构建参数 JSON
EXECUTE_COUNT int 执行次数(重试时递增)

BuildStatus 状态码:

状态码 名称 说明
0 SUCCEED 成功
1 FAILED 失败
2 CANCELED 取消
3 RUNNING 运行中
4 TERMINATE 终止
5 REVIEWING 审核中
6 REVIEW_ABORT 审核驳回
7 REVIEW_PROCESSED 审核通过
8 HEARTBEAT_TIMEOUT 心跳超时
9 PREPARE_ENV 准备环境
10 UNEXEC 未执行
11 SKIP 跳过
12 QUALITY_CHECK_FAIL 质量红线失败
13 QUEUE 排队中
14 LOOP_WAITING 循环等待
15 CALL_WAITING 调用等待
16 TRY_FINALLY 执行 finally
17 QUEUE_TIMEOUT 排队超时
18 EXEC_TIMEOUT 执行超时
19 QUEUE_CACHE 排队缓存
20 RETRY 重试中
21 PAUSE 暂停
22 STAGE_SUCCESS 阶段成功
23 QUOTA_FAILED 配额失败
24 DEPENDENT_WAITING 依赖等待
25 QUALITY_REVIEWING 质量审核中
26 WAIT_QUEUE 等待排队

2.3 T_PIPELINE_BUILD_SUMMARY - 构建摘要表

CREATE TABLE `T_PIPELINE_BUILD_SUMMARY` (
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `BUILD_NUM` int(11) NOT NULL DEFAULT '0' COMMENT '构建号',
    `BUILD_NO` int(11) DEFAULT '0' COMMENT '构建序号',
    `FINISH_COUNT` int(11) DEFAULT '0' COMMENT '完成次数',
    `RUNNING_COUNT` int(11) DEFAULT '0' COMMENT '运行次数',
    `QUEUE_COUNT` int(11) DEFAULT '0' COMMENT '排队次数',
    `LATEST_BUILD_ID` varchar(34) DEFAULT NULL COMMENT '最新构建ID',
    `LATEST_TASK_ID` varchar(34) DEFAULT NULL COMMENT '最新任务ID',
    `LATEST_START_USER` varchar(64) DEFAULT NULL COMMENT '最新启动用户',
    `LATEST_START_TIME` datetime DEFAULT NULL COMMENT '最新开始时间',
    `LATEST_END_TIME` datetime DEFAULT NULL COMMENT '最新结束时间',
    `LATEST_TASK_COUNT` int(11) DEFAULT NULL COMMENT '最新任务数',
    `LATEST_TASK_NAME` varchar(128) DEFAULT NULL COMMENT '最新任务名',
    `LATEST_STATUS` int(11) DEFAULT NULL COMMENT '最新状态',
    `BUILD_NUM_ALIAS` varchar(256) DEFAULT NULL COMMENT '构建号别名',
    `DEBUG_BUILD_NUM` int(11) DEFAULT '0' COMMENT '调试构建号',
    PRIMARY KEY (`PIPELINE_ID`),
    KEY `IDX_PROJECT_ID` (`PROJECT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建摘要表';

2.4 T_PIPELINE_BUILD_STAGE - 构建阶段表

CREATE TABLE `T_PIPELINE_BUILD_STAGE` (
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `STAGE_ID` varchar(34) NOT NULL COMMENT '阶段ID',
    `SEQ` int(11) NOT NULL COMMENT '序号',
    `STATUS` int(11) DEFAULT NULL COMMENT '状态',
    `START_TIME` datetime DEFAULT NULL COMMENT '开始时间',
    `END_TIME` datetime DEFAULT NULL COMMENT '结束时间',
    `COST` int(11) DEFAULT '0' COMMENT '耗时(秒)',
    `EXECUTE_COUNT` int(11) DEFAULT '1' COMMENT '执行次数',
    `CONDITIONS` mediumtext COMMENT '执行条件(JSON)',
    `CHECK_IN` mediumtext COMMENT '准入配置(JSON)',
    `CHECK_OUT` mediumtext COMMENT '准出配置(JSON)',
    PRIMARY KEY (`BUILD_ID`, `STAGE_ID`),
    KEY `IDX_PROJECT_PIPELINE` (`PROJECT_ID`, `PIPELINE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建阶段表';

2.5 T_PIPELINE_BUILD_CONTAINER - 构建容器表

CREATE TABLE `T_PIPELINE_BUILD_CONTAINER` (
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `STAGE_ID` varchar(34) NOT NULL COMMENT '阶段ID',
    `CONTAINER_ID` varchar(34) NOT NULL COMMENT '容器ID',
    `CONTAINER_TYPE` varchar(45) NOT NULL COMMENT '容器类型',
    `SEQ` int(11) NOT NULL COMMENT '序号',
    `STATUS` int(11) DEFAULT NULL COMMENT '状态',
    `START_TIME` datetime DEFAULT NULL COMMENT '开始时间',
    `END_TIME` datetime DEFAULT NULL COMMENT '结束时间',
    `COST` int(11) DEFAULT '0' COMMENT '耗时(秒)',
    `EXECUTE_COUNT` int(11) DEFAULT '1' COMMENT '执行次数',
    `CONDITIONS` mediumtext COMMENT '执行条件(JSON)',
    `CONTAINER_HASH_ID` varchar(64) DEFAULT NULL COMMENT '容器哈希ID',
    `MATRIX_GROUP_FLAG` bit(1) DEFAULT b'0' COMMENT '是否矩阵组',
    `MATRIX_GROUP_ID` varchar(64) DEFAULT NULL COMMENT '矩阵组ID',
    PRIMARY KEY (`BUILD_ID`, `CONTAINER_ID`),
    KEY `IDX_PROJECT_PIPELINE` (`PROJECT_ID`, `PIPELINE_ID`),
    KEY `IDX_STAGE_ID` (`STAGE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建容器表';

2.6 T_PIPELINE_BUILD_TASK - 构建任务表

CREATE TABLE `T_PIPELINE_BUILD_TASK` (
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `STAGE_ID` varchar(34) NOT NULL COMMENT '阶段ID',
    `CONTAINER_ID` varchar(34) NOT NULL COMMENT '容器ID',
    `TASK_ID` varchar(34) NOT NULL COMMENT '任务ID',
    `TASK_NAME` varchar(128) DEFAULT NULL COMMENT '任务名称',
    `TASK_TYPE` varchar(64) NOT NULL COMMENT '任务类型',
    `TASK_ATOM` varchar(128) DEFAULT NULL COMMENT '任务插件',
    `ATOM_CODE` varchar(128) DEFAULT NULL COMMENT '插件代码',
    `CLASS_TYPE` varchar(64) DEFAULT NULL COMMENT '类类型',
    `TASK_SEQ` int(11) DEFAULT '1' COMMENT '任务序号',
    `STATUS` int(11) DEFAULT NULL COMMENT '状态',
    `STARTER` varchar(64) DEFAULT NULL COMMENT '启动者',
    `APPROVER` varchar(64) DEFAULT NULL COMMENT '审批者',
    `SUB_PROJECT_ID` varchar(64) DEFAULT NULL COMMENT '子项目ID',
    `SUB_BUILD_ID` varchar(34) DEFAULT NULL COMMENT '子构建ID',
    `START_TIME` datetime DEFAULT NULL COMMENT '开始时间',
    `END_TIME` datetime DEFAULT NULL COMMENT '结束时间',
    `EXECUTE_COUNT` int(11) DEFAULT '0' COMMENT '执行次数',
    `TASK_PARAMS` mediumtext COMMENT '任务参数(JSON)',
    `ADDITIONAL_OPTIONS` mediumtext COMMENT '附加选项(JSON)',
    `TOTAL_TIME` bigint(20) DEFAULT NULL COMMENT '总耗时(毫秒)',
    `ERROR_TYPE` int(11) DEFAULT NULL COMMENT '错误类型',
    `ERROR_CODE` int(11) DEFAULT NULL COMMENT '错误码',
    `ERROR_MSG` text COMMENT '错误信息',
    `CONTAINER_HASH_ID` varchar(64) DEFAULT NULL COMMENT '容器哈希ID',
    `STEP_ID` varchar(64) DEFAULT NULL COMMENT '步骤ID',
    PRIMARY KEY (`BUILD_ID`, `TASK_ID`),
    KEY `IDX_PROJECT_PIPELINE` (`PROJECT_ID`, `PIPELINE_ID`),
    KEY `IDX_CONTAINER_ID` (`CONTAINER_ID`),
    KEY `IDX_STATUS` (`STATUS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建任务表';

2.7 T_PIPELINE_RESOURCE - 流水线资源表

CREATE TABLE `T_PIPELINE_RESOURCE` (
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `VERSION` int(11) NOT NULL DEFAULT '1' COMMENT '版本',
    `MODEL` mediumtext COMMENT '流水线模型(JSON)',
    `YAML` mediumtext COMMENT 'YAML内容',
    `CREATOR` varchar(64) DEFAULT NULL COMMENT '创建者',
    `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`PIPELINE_ID`, `VERSION`),
    KEY `IDX_PROJECT_ID` (`PROJECT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线资源表';

MODEL 字段示例:

{
  "name": "示例流水线",
  "desc": "流水线描述",
  "stages": [
    {
      "id": "stage-1",
      "name": "Stage-1",
      "containers": [
        {
          "id": "1",
          "@type": "trigger",
          "name": "构建触发",
          "elements": [
            {
              "id": "T-1-1-1",
              "@type": "manualTrigger",
              "name": "手动触发"
            }
          ]
        }
      ]
    },
    {
      "id": "stage-2",
      "name": "Stage-2",
      "containers": [
        {
          "id": "2",
          "@type": "vmBuild",
          "name": "Linux构建机",
          "baseOS": "LINUX",
          "elements": [
            {
              "id": "T-2-1-1",
              "@type": "linuxScript",
              "name": "Shell脚本",
              "script": "echo hello"
            }
          ]
        }
      ]
    }
  ]
}

2.8 T_PIPELINE_BUILD_VAR - 构建变量表

CREATE TABLE `T_PIPELINE_BUILD_VAR` (
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `KEY` varchar(255) NOT NULL COMMENT '变量名',
    `VALUE` mediumtext COMMENT '变量值',
    `PROJECT_ID` varchar(64) DEFAULT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) DEFAULT NULL COMMENT '流水线ID',
    `VAR_TYPE` varchar(64) DEFAULT NULL COMMENT '变量类型',
    `READ_ONLY` bit(1) DEFAULT NULL COMMENT '是否只读',
    PRIMARY KEY (`BUILD_ID`, `KEY`),
    KEY `IDX_PROJECT_PIPELINE` (`PROJECT_ID`, `PIPELINE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建变量表';

2.9 T_TEMPLATE - 模板表

CREATE TABLE `T_TEMPLATE` (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT,
    `TYPE` varchar(32) NOT NULL DEFAULT 'CUSTOMIZE' COMMENT '模板类型',
    `TEMPLATE_ID` varchar(34) NOT NULL COMMENT '模板ID',
    `TEMPLATE_NAME` varchar(64) NOT NULL COMMENT '模板名称',
    `VERSION_NAME` varchar(64) NOT NULL COMMENT '版本名称',
    `VERSION` bigint(20) NOT NULL DEFAULT '1' COMMENT '版本号',
    `LOGO_URL` varchar(512) DEFAULT NULL COMMENT 'Logo URL',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `SRC_TEMPLATE_ID` varchar(34) DEFAULT NULL COMMENT '源模板ID',
    `DESC` varchar(1024) DEFAULT NULL COMMENT '描述',
    `CATEGORY` varchar(128) DEFAULT NULL COMMENT '分类',
    `CREATOR` varchar(64) NOT NULL COMMENT '创建者',
    `CREATE_TIME` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `TEMPLATE` mediumtext COMMENT '模板内容(JSON)',
    `STORE_FLAG` bit(1) DEFAULT b'0' COMMENT '是否商店模板',
    PRIMARY KEY (`ID`),
    UNIQUE KEY `UNI_TEMPLATE_VERSION` (`TEMPLATE_ID`, `VERSION`),
    KEY `IDX_PROJECT_ID` (`PROJECT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线模板表';

三、核心 DAO 类详解

3.1 PipelineInfoDao

文件: PipelineInfoDao.kt (29KB)

@Repository
class PipelineInfoDao {

    fun create(
        dslContext: DSLContext,
        pipelineId: String,
        projectId: String,
        version: Int,
        pipelineName: String,
        pipelineDesc: String,
        userId: String,
        channelCode: ChannelCode,
        manualStartup: Boolean,
        canElementSkip: Boolean,
        taskCount: Int
    ): Int {
        with(T_PIPELINE_INFO) {
            dslContext.insertInto(this,
                PIPELINE_ID, PROJECT_ID, VERSION, PIPELINE_NAME, PIPELINE_DESC,
                CREATE_TIME, UPDATE_TIME, CHANNEL, CREATOR, LAST_MODIFY_USER,
                MANUAL_STARTUP, ELEMENT_SKIP, TASK_COUNT
            ).values(
                pipelineId, projectId, version, pipelineName, pipelineDesc,
                LocalDateTime.now(), LocalDateTime.now(), channelCode.name, userId, userId,
                if (manualStartup) 1 else 0, if (canElementSkip) 1 else 0, taskCount
            ).execute()
        }
        return version
    }

    fun getPipelineInfo(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String
    ): TPipelineInfoRecord? {
        return with(T_PIPELINE_INFO) {
            dslContext.selectFrom(this)
                .where(PROJECT_ID.eq(projectId))
                .and(PIPELINE_ID.eq(pipelineId))
                .and(DELETE.eq(false))
                .fetchOne()
        }
    }

    fun listPipelineIdByProject(
        dslContext: DSLContext,
        projectId: String,
        channelCode: ChannelCode? = null
    ): List<String> {
        return with(T_PIPELINE_INFO) {
            val query = dslContext.select(PIPELINE_ID)
                .from(this)
                .where(PROJECT_ID.eq(projectId))
                .and(DELETE.eq(false))
            channelCode?.let { query.and(CHANNEL.eq(it.name)) }
            query.fetch(PIPELINE_ID)
        }
    }

    fun softDelete(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String,
        userId: String
    ): Int {
        return with(T_PIPELINE_INFO) {
            dslContext.update(this)
                .set(DELETE, true)
                .set(DELETE_TIME, LocalDateTime.now())
                .set(LAST_MODIFY_USER, userId)
                .where(PROJECT_ID.eq(projectId))
                .and(PIPELINE_ID.eq(pipelineId))
                .execute()
        }
    }
}

3.2 PipelineBuildDao

文件: PipelineBuildDao.kt (85KB) - 最大的 DAO 文件

@Repository
class PipelineBuildDao {

    fun create(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String,
        buildId: String,
        version: Int,
        buildNum: Int,
        trigger: String,
        status: BuildStatus,
        startUser: String,
        triggerUser: String,
        buildParameters: String? = null
    ) {
        with(T_PIPELINE_BUILD_HISTORY) {
            dslContext.insertInto(this,
                BUILD_ID, PROJECT_ID, PIPELINE_ID, VERSION, BUILD_NUM,
                TRIGGER, STATUS, START_USER, TRIGGER_USER, QUEUE_TIME,
                BUILD_PARAMETERS
            ).values(
                buildId, projectId, pipelineId, version, buildNum,
                trigger, status.ordinal, startUser, triggerUser, LocalDateTime.now(),
                buildParameters
            ).execute()
        }
    }

    fun getBuildInfo(
        dslContext: DSLContext,
        projectId: String,
        buildId: String
    ): BuildInfo? {
        return with(T_PIPELINE_BUILD_HISTORY) {
            dslContext.selectFrom(this)
                .where(PROJECT_ID.eq(projectId))
                .and(BUILD_ID.eq(buildId))
                .fetchOne()?.let { convert(it) }
        }
    }

    fun updateStatus(
        dslContext: DSLContext,
        projectId: String,
        buildId: String,
        status: BuildStatus,
        startTime: LocalDateTime? = null,
        endTime: LocalDateTime? = null
    ): Int {
        return with(T_PIPELINE_BUILD_HISTORY) {
            val update = dslContext.update(this)
                .set(STATUS, status.ordinal)
            startTime?.let { update.set(START_TIME, it) }
            endTime?.let { update.set(END_TIME, it) }
            update.where(PROJECT_ID.eq(projectId))
                .and(BUILD_ID.eq(buildId))
                .execute()
        }
    }

    fun listBuildHistory(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String,
        offset: Int,
        limit: Int
    ): List<BuildHistory> {
        return with(T_PIPELINE_BUILD_HISTORY) {
            dslContext.selectFrom(this)
                .where(PROJECT_ID.eq(projectId))
                .and(PIPELINE_ID.eq(pipelineId))
                .orderBy(BUILD_NUM.desc())
                .offset(offset)
                .limit(limit)
                .fetch()
                .map { convertToHistory(it) }
        }
    }
}

3.3 PipelineResourceDao

文件: PipelineResourceDao.kt (12KB)

@Repository
class PipelineResourceDao {

    fun create(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String,
        version: Int,
        model: String,
        creator: String
    ) {
        with(T_PIPELINE_RESOURCE) {
            dslContext.insertInto(this,
                PROJECT_ID, PIPELINE_ID, VERSION, MODEL, CREATOR, CREATE_TIME
            ).values(
                projectId, pipelineId, version, model, creator, LocalDateTime.now()
            ).execute()
        }
    }

    fun getModel(
        dslContext: DSLContext,
        projectId: String,
        pipelineId: String,
        version: Int? = null
    ): String? {
        return with(T_PIPELINE_RESOURCE) {
            val query = dslContext.select(MODEL)
                .from(this)
                .where(PROJECT_ID.eq(projectId))
                .and(PIPELINE_ID.eq(pipelineId))
            version?.let { query.and(VERSION.eq(it)) }
                ?: query.orderBy(VERSION.desc()).limit(1)
            query.fetchOne()?.value1()
        }
    }
}

四、数据库表关系图

┌─────────────────────────────────────────────────────────────────────────┐
│                         T_PIPELINE_INFO                                  │
│                      (流水线基本信息)                                     │
│  PIPELINE_ID ──────────────────────────────────────────────────────────┐ │
└─────────────────────────────────────────────────────────────────────────┘ │
         │                                                                  │
         │ 1:N                                                              │
         ▼                                                                  │
┌─────────────────────────────────────────────────────────────────────────┐ │
│                         T_PIPELINE_RESOURCE                              │ │
│                      (流水线模型/版本)                                    │ │
│  PIPELINE_ID + VERSION (PK)                                             │ │
│  MODEL (JSON) ← 存储完整的流水线编排模型                                  │ │
└─────────────────────────────────────────────────────────────────────────┘ │
         │                                                                  │
         │ 1:1                                                              │
         ▼                                                                  │
┌─────────────────────────────────────────────────────────────────────────┐ │
│                         T_PIPELINE_BUILD_SUMMARY                         │ │
│                      (构建摘要/统计)                                      │ │
│  PIPELINE_ID (PK) ← 每个流水线一条记录                                   │ │
│  BUILD_NUM ← 自增构建号                                                  │ │
│  LATEST_BUILD_ID ← 最新构建                                              │ │
└─────────────────────────────────────────────────────────────────────────┘ │
         │                                                                  │
         │ 1:N                                                              │
         ▼                                                                  │
┌─────────────────────────────────────────────────────────────────────────┐ │
│                         T_PIPELINE_BUILD_HISTORY                         │◄┘
│                      (构建历史)                                          │
│  BUILD_ID (PK)                                                          │
│  PIPELINE_ID (FK) ────────────────────────────────────────────────────┘
│  BUILD_NUM, STATUS, START_TIME, END_TIME                                │
└─────────────────────────────────────────────────────────────────────────┘
         │
         │ 1:N
         ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         T_PIPELINE_BUILD_STAGE                           │
│                      (构建阶段)                                          │
│  BUILD_ID + STAGE_ID (PK)                                               │
│  SEQ, STATUS, CONDITIONS                                                │
└─────────────────────────────────────────────────────────────────────────┘
         │
         │ 1:N
         ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         T_PIPELINE_BUILD_CONTAINER                       │
│                      (构建容器/Job)                                      │
│  BUILD_ID + CONTAINER_ID (PK)                                           │
│  STAGE_ID (FK), SEQ, STATUS, CONTAINER_TYPE                             │
└─────────────────────────────────────────────────────────────────────────┘
         │
         │ 1:N
         ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         T_PIPELINE_BUILD_TASK                            │
│                      (构建任务/插件)                                      │
│  BUILD_ID + TASK_ID (PK)                                                │
│  CONTAINER_ID (FK), TASK_SEQ, STATUS, TASK_PARAMS                       │
└─────────────────────────────────────────────────────────────────────────┘
         │
         │ 1:N
         ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         T_PIPELINE_BUILD_VAR                             │
│                      (构建变量)                                          │
│  BUILD_ID + KEY (PK)                                                    │
│  VALUE, VAR_TYPE, READ_ONLY                                             │
└─────────────────────────────────────────────────────────────────────────┘

五、RECORD 系列表(构建执行记录)

重要: BK-CI 有两套构建记录表,BUILD 系列用于引擎执行调度,RECORD 系列用于前端展示和历史查询。

5.1 两套表的设计目的

┌─────────────────────────────────────────────────────────────────────────────┐
│                        BUILD 系列表(引擎执行用)                             │
│  T_PIPELINE_BUILD_STAGE / CONTAINER / TASK                                  │
│  • 用于引擎调度和执行控制                                                     │
│  • 记录当前构建的实时状态                                                     │
│  • 每次构建只有一份记录(重试时覆盖更新)                                       │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    │ 区别
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                        RECORD 系列表(历史记录用)                            │
│  T_PIPELINE_BUILD_RECORD_MODEL / STAGE / CONTAINER / TASK                   │
│  • 用于前端展示和历史查询                                                     │
│  • 支持多次执行记录(EXECUTE_COUNT 区分)                                     │
│  • 保留每次执行的完整快照                                                     │
└─────────────────────────────────────────────────────────────────────────────┘

5.2 T_PIPELINE_BUILD_RECORD_MODEL - 构建模型记录

CREATE TABLE IF NOT EXISTS `T_PIPELINE_BUILD_RECORD_MODEL` (
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `PROJECT_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL DEFAULT '' COMMENT '流水线ID',
    `RESOURCE_VERSION` int(11) NOT NULL COMMENT '编排版本',
    `BUILD_NUM` int(20) NOT NULL COMMENT '构建次数',
    `EXECUTE_COUNT` int(11) NOT NULL COMMENT '执行次数',
    `START_USER` varchar(32) NOT NULL DEFAULT '' COMMENT '启动者',
    `MODEL_VAR` mediumtext NOT NULL COMMENT '当次执行的变量记录',
    `START_TYPE` varchar(32) NOT NULL DEFAULT '' COMMENT '触发方式',
    `QUEUE_TIME` datetime(3) NOT NULL COMMENT '触发时间',
    `START_TIME` datetime(3) NULL COMMENT '启动时间',
    `END_TIME` datetime(3) NULL COMMENT '结束时间',
    `STATUS` varchar(32) DEFAULT NULL COMMENT '构建状态',
    `ERROR_INFO` text COMMENT '错误信息',
    `CANCEL_USER` varchar(32) DEFAULT NULL COMMENT '取消者',
    `TIMESTAMPS` text COMMENT '运行中产生的时间戳集合',
    PRIMARY KEY (`BUILD_ID`, `EXECUTE_COUNT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建详情表';

关键字段说明:

字段 说明
EXECUTE_COUNT 执行次数,支持同一构建多次重试的记录
RESOURCE_VERSION 使用的流水线编排版本
MODEL_VAR 模型级别的变量(如 timeCost)
TIMESTAMPS 时间戳集合(排队、启动、结束等)

5.3 T_PIPELINE_BUILD_RECORD_STAGE - 阶段记录

CREATE TABLE IF NOT EXISTS `T_PIPELINE_BUILD_RECORD_STAGE` (
    `BUILD_ID` varchar(64) NOT NULL COMMENT '构建ID',
    `PROJECT_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '项目ID',
    `PIPELINE_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '流水线ID',
    `RESOURCE_VERSION` int(11) DEFAULT NULL COMMENT '编排版本号',
    `STAGE_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '步骤ID',
    `SEQ` int(11) NOT NULL COMMENT '步骤序列',
    `STAGE_VAR` text NOT NULL COMMENT '当次执行的变量记录',
    `STATUS` varchar(32) DEFAULT NULL COMMENT '构建状态',
    `EXECUTE_COUNT` int(11) NOT NULL DEFAULT '1' COMMENT '执行次数',
    `START_TIME` datetime(3) NULL COMMENT '开始时间',
    `END_TIME` datetime(3) NULL COMMENT '结束时间',
    `TIMESTAMPS` text COMMENT '运行中产生的时间戳集合',
    PRIMARY KEY (`BUILD_ID`, `STAGE_ID`, `EXECUTE_COUNT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建阶段表';

5.4 T_PIPELINE_BUILD_RECORD_CONTAINER - 容器记录

CREATE TABLE IF NOT EXISTS `T_PIPELINE_BUILD_RECORD_CONTAINER` (
    `BUILD_ID` varchar(64) NOT NULL COMMENT '构建ID',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(64) NOT NULL COMMENT '流水线ID',
    `RESOURCE_VERSION` int(11) NOT NULL COMMENT '编排版本',
    `STAGE_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '步骤ID',
    `CONTAINER_ID` varchar(64) NOT NULL DEFAULT '' COMMENT '构建容器ID',
    `EXECUTE_COUNT` int(11) NOT NULL DEFAULT '1' COMMENT '执行次数',
    `STATUS` varchar(32) DEFAULT NULL COMMENT '构建状态',
    `CONTAINER_VAR` mediumtext NOT NULL COMMENT '当次执行的变量记录',
    `CONTAINER_TYPE` varchar(45) DEFAULT NULL COMMENT '容器类型',
    `CONTAIN_POST_TASK` bit(1) DEFAULT NULL COMMENT '包含POST插件标识',
    `MATRIX_GROUP_FLAG` bit(1) DEFAULT NULL COMMENT '矩阵标识',
    `MATRIX_GROUP_ID` varchar(64) DEFAULT NULL COMMENT '所属的矩阵组ID',
    `START_TIME` datetime(3) NULL COMMENT '开始时间',
    `END_TIME` datetime(3) NULL COMMENT '结束时间',
    `TIMESTAMPS` text COMMENT '运行中产生的时间戳集合',
    PRIMARY KEY (`BUILD_ID`, `CONTAINER_ID`, `EXECUTE_COUNT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建容器环境表';

关键字段说明:

字段 说明
CONTAINER_VAR 容器级别的变量(如 name、dispatchType)
MATRIX_GROUP_FLAG 是否是矩阵组
CONTAIN_POST_TASK 是否包含 POST 插件

5.5 T_PIPELINE_BUILD_RECORD_TASK - 任务记录

CREATE TABLE IF NOT EXISTS `T_PIPELINE_BUILD_RECORD_TASK` (
    `BUILD_ID` varchar(34) NOT NULL COMMENT '构建ID',
    `PROJECT_ID` varchar(64) NOT NULL COMMENT '项目ID',
    `PIPELINE_ID` varchar(34) NOT NULL COMMENT '流水线ID',
    `RESOURCE_VERSION` int(11) NOT NULL COMMENT '编排版本号',
    `STAGE_ID` varchar(34) NOT NULL DEFAULT '' COMMENT '步骤ID',
    `CONTAINER_ID` varchar(34) NOT NULL COMMENT '构建容器ID',
    `TASK_ID` varchar(34) NOT NULL COMMENT '任务ID',
    `TASK_SEQ` int(11) NOT NULL DEFAULT '1' COMMENT '任务序列',
    `EXECUTE_COUNT` int(11) NOT NULL DEFAULT '1' COMMENT '执行次数',
    `STATUS` varchar(32) DEFAULT NULL COMMENT '构建状态',
    `TASK_VAR` mediumtext NOT NULL COMMENT '当次执行的变量记录',
    `POST_INFO` text DEFAULT NULL COMMENT '市场插件的POST关联信息',
    `CLASS_TYPE` varchar(64) NOT NULL DEFAULT '' COMMENT '类类型',
    `ATOM_CODE` varchar(128) NOT NULL DEFAULT '' COMMENT '插件的唯一标识',
    `ORIGIN_CLASS_TYPE` varchar(64) DEFAULT NULL COMMENT '原始类类型',
    `START_TIME` datetime(3) NULL COMMENT '开始时间',
    `END_TIME` datetime(3) NULL COMMENT '结束时间',
    `TIMESTAMPS` text COMMENT '运行中产生的时间戳集合',
    `ASYNC_STATUS` varchar(32) NULL COMMENT '插件异步执行状态',
    PRIMARY KEY (`BUILD_ID`, `TASK_ID`, `EXECUTE_COUNT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水线构建任务表';

关键字段说明:

字段 说明
TASK_VAR 任务级别的变量(插件参数、输出等)
POST_INFO POST 插件关联信息
ASYNC_STATUS 异步执行状态

5.6 BUILD vs RECORD 使用场景对比

场景 BUILD 表 RECORD 表
引擎调度执行 ✅ 使用 ❌ 不用
Worker 拉取任务 ✅ 使用 ❌ 不用
前端构建详情页 ❌ 不用 ✅ 使用
查看历史执行记录 ❌ 不用 ✅ 使用
重试时保留历史 ❌ 会覆盖 ✅ 新增记录
耗时统计 ❌ 不准确 ✅ 精确

5.7 RECORD 系列表的 DAO 和 Service

DAO 层:

DAO 类 表 路径
BuildRecordModelDao T_PIPELINE_BUILD_RECORD_MODEL biz-base/.../dao/record/
BuildRecordStageDao T_PIPELINE_BUILD_RECORD_STAGE biz-base/.../dao/record/
BuildRecordContainerDao T_PIPELINE_BUILD_RECORD_CONTAINER biz-base/.../dao/record/
BuildRecordTaskDao T_PIPELINE_BUILD_RECORD_TASK biz-base/.../dao/record/

Service 层:

Service 类 职责
PipelineBuildRecordService 构建记录管理,查询 ModelRecord
StageBuildRecordService Stage 记录更新
ContainerBuildRecordService Container 记录更新
TaskBuildRecordService Task 记录更新
BaseBuildRecordService 基础服务,公共方法

5.8 完整的表关系图(含 RECORD 系列)

┌─────────────────────────────────────────────────────────────────────────────┐
│                              构建启动时创建                                   │
└─────────────────────────────────────────────────────────────────────────────┘

                    ┌──────────────────────────────────────┐
                    │     T_PIPELINE_BUILD_HISTORY         │
                    │     (构建历史 - 顶层入口)              │
                    └───────────────┬──────────────────────┘
                                    │
        ┌───────────────────────────┼───────────────────────────┐
        │                           │                           │
        ▼                           ▼                           ▼
┌───────────────────┐   ┌───────────────────┐   ┌───────────────────────────┐
│ T_PIPELINE_BUILD_ │   │ T_PIPELINE_BUILD_ │   │ T_PIPELINE_BUILD_RECORD_  │
│ DETAIL            │   │ VAR               │   │ MODEL                     │
│ (完整Model JSON)   │   │ (构建变量)         │   │ (执行记录-支持多次)         │
└───────────────────┘   └───────────────────┘   └─────────────┬─────────────┘
                                                              │
                    ┌─────────────────────────────────────────┤
                    │                                         │
        ┌───────────┴───────────┐                 ┌───────────┴───────────┐
        │   引擎执行用 (BUILD)    │                 │   历史记录用 (RECORD)   │
        │   单次执行状态          │                 │   多次执行快照          │
        └───────────┬───────────┘                 └───────────┬───────────┘
                    │                                         │
    ┌───────────────┼───────────────┐         ┌───────────────┼───────────────┐
    ▼               ▼               ▼         ▼               ▼               ▼
┌────────┐    ┌────────┐    ┌────────┐   ┌────────┐    ┌────────┐    ┌────────┐
│ STAGE  │    │CONTAINER│   │ TASK   │   │ STAGE  │    │CONTAINER│   │ TASK   │
│(阶段)   │    │(Job)    │   │(插件)   │   │(阶段)   │    │(Job)    │   │(插件)   │
└────────┘    └────────┘    └────────┘   └────────┘    └────────┘    └────────┘
     │             │             │            │             │             │
     └─────────────┴─────────────┘            └─────────────┴─────────────┘
              引擎实时更新                           前端查询展示

5.9 EXECUTE_COUNT 的作用

场景:用户对构建 #100 进行了 3 次重试

BUILD 系列表:
┌─────────────────────────────────────────┐
│ BUILD_ID = xxx                          │
│ 只保留最新一次执行的状态                   │
│ (第3次重试的状态)                        │
└─────────────────────────────────────────┘

RECORD 系列表:
┌─────────────────────────────────────────┐
│ BUILD_ID = xxx, EXECUTE_COUNT = 1       │  ← 第1次执行
├─────────────────────────────────────────┤
│ BUILD_ID = xxx, EXECUTE_COUNT = 2       │  ← 第2次执行(重试)
├─────────────────────────────────────────┤
│ BUILD_ID = xxx, EXECUTE_COUNT = 3       │  ← 第3次执行(重试)
└─────────────────────────────────────────┘

六、开发规范

6.1 DAO 编写规范

@Repository
class XxxDao {
    
    // 1. 使用 with(TABLE) 简化代码
    fun create(dslContext: DSLContext, ...) {
        with(T_XXX) {
            dslContext.insertInto(this, ...)
                .values(...)
                .execute()
        }
    }
    
    // 2. 查询方法返回可空类型
    fun get(dslContext: DSLContext, id: String): XxxRecord? {
        return with(T_XXX) {
            dslContext.selectFrom(this)
                .where(ID.eq(id))
                .fetchOne()
        }
    }
    
    // 3. 列表查询使用 fetch()
    fun list(dslContext: DSLContext, ...): List<Xxx> {
        return with(T_XXX) {
            dslContext.selectFrom(this)
                .where(...)
                .fetch()
                .map { convert(it) }
        }
    }
    
    // 4. 更新/删除返回影响行数
    fun update(dslContext: DSLContext, ...): Int {
        return with(T_XXX) {
            dslContext.update(this)
                .set(...)
                .where(...)
                .execute()
        }
    }
}

6.2 新增表检查清单

  • 表名以 T_PIPELINE_ 开头
  • 主键使用 BUILD_ID + 业务 ID 组合
  • 添加 PROJECT_ID、PIPELINE_ID 索引
  • 添加必要的时间字段(CREATE_TIME、UPDATE_TIME)
  • SQL 脚本放在 support-files/sql/ 目录

6.3 RECORD 表使用注意事项

  • 查询前端展示数据时优先使用 RECORD 表
  • 引擎调度逻辑使用 BUILD 表
  • 重试场景需要同时更新两套表
  • EXECUTE_COUNT 字段用于区分多次执行

版本: 2.0.0 | 更新日期: 2025-12-12 | 更新内容: 新增 RECORD 系列表(BUILD_RECORD_MODEL/STAGE/CONTAINER/TASK)详解