切换主题
产品介绍
CICD 自动打包部署平台是一套「管理端 + 执行端」分离的自动打包部署工具。你在 Web 控制台上配置项目,部署在构建机上的执行端完成 拉取代码 → 打包 → 上传 → 部署 → 启动 全流程,并通过任务队列、Webhook 自动触发、实时日志与通知把整个过程管起来。
一句话概括:配置集中在管理端,构建与部署分散在执行端,产物与日志汇聚回管理端。
产品定位
| 角色 | 部署位置 | 定位 |
|---|---|---|
管理端 cicd_server | 一台可被浏览器与执行端访问的服务器 | 唯一的 Web 服务与控制台(前端已嵌入二进制),独占 MySQL;负责配置管理、权限、队列派发、Webhook 与通知 |
执行机 cicd_agent | 构建机(可多台) | 主动连接管理端(Token 鉴权 + 长轮询取指令),不连数据库;负责 Git 密钥自建、拉码、构建、上传与远程部署 |
部署节点 cicd_node | 目标服务器(可选) | 同样主动注册并长轮询取指令;部署时由它在本机落地产物(管理端中转),目标机无需开放 SSH |
| 控制台前端 | 已嵌入管理端二进制 | Vue3 + Element Plus 单页应用,覆盖项目、任务、资源、执行机、系统与审计 |
三端共享同一个 protocol 包作为协议与模型来源;管理端与执行端之间只通过 HTTP 交互,两端都不需要互相可达的通路以外的东西。
解决什么问题
现状痛点
早期实现把「打包(构建)」与「部署(目标机操作)」放在同一台机器上完成:管理界面、构建环境、目标环境三者强耦合。由此带来一系列结构性问题:
- 构建机无法横向扩展,只能管理端所在的那一台机器承担全部打包;
- 构建环境与目标环境绑定,做完构建又顺手部署,职责不清;
- 多台构建机场景无法集中管理,配置散落、日志割裂。
设计目标
平台围绕「管理集中、执行分散、数据单一来源」重新划分职责:
- 管理端集中管控:配置管理、执行机纳管、任务编排下发、日志汇聚展示、通知与审计全部在管理端完成,数据唯一落库点为管理端 MySQL。
- 执行端自治取码:执行端启动时自动生成 Git 密钥对并只上报公钥,用户把公钥配置到 Git 平台即可免密拉取;项目配置 Git 地址与分支后,执行端自动把代码克隆/更新到可配置的工作目录,并按项目「是否缓存」开关决定任务结束后保留还是删除。
- 执行端不持有数据权限:执行端不连接数据库,只保留本地工作目录、Git 密钥与本地日志文件。
- 计划在管理端合成:一次任务的执行细节(变量展开、资源引用解析、凭据解密)由管理端合成为不可变的 RunPlan 快照,执行端只按计划执行。
- 保留既有体验:四阶段执行模型、SSE 实时日志、失败重试/取消、资源引用式配置、钉钉通知、启动脚本与系统服务安装方式全部保留。
环境准备见 安装部署,跑通第一个项目见 快速开始,各模块能力见 平台功能。
核心能力
| 能力 | 说明 |
|---|---|
| 项目与项目分组 | 一个项目维护构建步骤、Git 取码、部署文件、任务变量、通知与 Webhook 等配置;项目必须归属分组,分组可承载组级任务变量与数据权限授权 |
| 多类型构建步骤 | 支持 java(Maven)、go、frontend(npm)、docker 四类步骤,一个项目可含多个步骤按序串行构建,产物统一汇入后续上传/部署阶段,也支持步骤级环境变量(如 Go 交叉编译) |
| 四阶段执行模型 | 固定为打包 build → 上传 upload → 部署 deploy → 启动 start,可按需只选部分阶段,支持失败后从指定阶段重试 |
| 多产物部署与备份 | 一次任务可上传多个文件或整个目录,逐条配置来源、远端目标、覆盖方式(replace/merge/clean)、权限与属主;覆盖前自动备份,失败可回滚 |
| 目标服务器双链路 | mode=ssh 由执行机 SSH 直连目标机上传并执行启停脚本(目标机无需装组件);mode=node 由目标机上注册的部署节点经管理端中转在本机落地 |
| 任务队列 | 同一项目只允许一个任务处于执行中,其余入队;队列以数据库 task.status=queued 为唯一依据,按「优先级 + 先入先出」自动继续,支持置顶 |
| Webhook 自动触发 | 项目生成随机端点的 Webhook 地址与验签密钥,Git 平台推送后按可配置的分支/tag/事件/路径规则过滤自动触发;带防抖合并,每次投递留痕可查、可重放 |
| 通知 | 任务成功/失败、等待人工确认、执行机离线等事件可推送钉钉、企业微信、飞书、邮件或通用 Webhook,通知内容按任务状态与渠道内置渲染(图标、配色、卡片 / HTML) |
| 执行机与部署节点纳管 | 主动注册、心跳保活、标签、并发容量、环境探测(JDK/Go/Node/Docker/HBuilderX/Git)、Git 密钥轮换、工作目录清理;离线自动判定 |
| 人工卡点 | 关键项目可开启「部署前人工确认」:上传完成、部署开始前暂停等待人工放行,超时自动失败;放行/驳回需项目操作权限 |
| 产物归档 | 每个构建步骤的主产物在打包阶段由执行端归档到管理端长期留存,项目详情与任务详情均可下载;存储可为本机磁盘或 S3 对象存储 |
| 项目模板与内容模板 | 项目可另存为模板并导入导出;内容模板用于定义启停脚本等文件内容,部署时在目标机生成 |
| 镜像仓库 | 独立维护私有镜像仓库凭据,供 docker push / docker pull 鉴权;凭据渲染为临时 docker 配置目录,不修改机器全局配置 |
| 多实例集群 | 管理端可多实例部署,基于 MySQL 租约表选主,只有领导者执行任务派发与巡检,所有实例都对外提供 HTTP 服务 |
| 数据权限与审计 | admin / user 两种角色,数据权限做到项目组 / 项目两级(只读 / 可触发 / 可管理);登录、配置变更、任务触发、密钥操作等写审计日志 |
非目标(本期不做)
| 不做的事 | 说明 |
|---|---|
| 代码仓库托管 | 仅作为 Git 客户端拉取代码,不提供仓库服务 |
| 容器化编排平台 | 不支持 K8s / Helm,仅支持镜像构建与 docker load / docker pull |
| 流水线可视化编排 | 不做 DAG 画布,阶段固定为 build/upload/deploy/start,停/部/启步骤脚本在项目配置内维护 |
| 多租户 | 角色固定为 admin / user,数据权限只到项目组 / 项目两级,不做按钮级或字段级权限点 |