📌 MSERP 版本管理规范(Draft)
版本控制是企业软件可持续交付的基础,统一规范可确保不同客户部署保持一致性、可升级性和可维护性。
1️⃣ 版本号命名规范
MSERP 使用 语义化版本号 SemVer:
主版本号.次版本号.修订号
MAJOR.MINOR.PATCH
示例:
v1.4.2
| 段位 | 增加时机 | 说明 |
|---|---|---|
| MAJOR 主版本 | 破坏性变更 | 不兼容升级、数据结构重大调整 |
| MINOR 次版本 | 新功能上线 | 向后兼容 |
| PATCH 修订 | Bug修复、性能优化 | 不影响业务逻辑 |
2️⃣ 版本体系划分
MSERP 版本由三部分构成:
| 类型 | 命名示例 | 控制范围 |
|---|---|---|
| 应用版本 | v1.4.2 | API、UI、业务逻辑 |
| 数据库版本 | db-1.2.1 | 表结构、索引、约束 |
| 预置数据版本 | preset-1.0.7 | 系统参数、系统属性等基础数据 |
三者 独立递进,避免强绑定,提高升级灵活性
3️⃣ 预置数据(系统属性/系统参数)版本管理
字段建议:
ALTER TABLE sys_params
ADD COLUMN scope TINYINT DEFAULT 0 COMMENT '0=系统预置 1=客户自定义',
ADD COLUMN locked TINYINT DEFAULT 0 COMMENT '1=锁定禁止UI编辑',
ADD COLUMN version_tag VARCHAR(50) COMMENT '预置数据来源版本';
升级策略:
✅ 只更新 scope=0(系统级)
✅ 不覆盖 scope=1(客户级)
✅ 根据 version_tag 避免重复执行
升级语句模板:
INSERT INTO sys_params (code, name, value, scope, locked, version_tag)
VALUES ('UNIT_KG', '公斤', 'kg', 0, 1, 'preset-1.0.7')
ON DUPLICATE KEY UPDATE
name = IF(scope = 0, VALUES(name), name),
value = IF(scope = 0, VALUES(value), value),
locked = IF(scope = 0, VALUES(locked), locked);
4️⃣ 数据库升级策略
数据库结构升级使用 完整版本号控制
记录字段:
CREATE TABLE sys_db_version (
version VARCHAR(50) PRIMARY KEY,
upgrade_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
升级逻辑示例:
IF NOT EXISTS (SELECT 1 FROM sys_db_version WHERE version = 'db-1.2.1') THEN
-- 执行表结构升级脚本
INSERT INTO sys_db_version VALUES ('db-1.2.1');
END IF;
✅ 多次执行不重复 ✅ 全部客户可持续升级
5️⃣ 应用版本控制
交付容器镜像命名:
mserp-api:v1.4.2
mserp-admin:v1.4.2
生产环境应使用固定 tag,不使用 latest
6️⃣ 客户部署差异处理
| 内容 | 方式 |
|---|---|
| 上传/下载目录 | .env 文件配置 |
| 数据库连接 | .env 配置 |
| 个性化参数 | scope=1 客户自定义 |
| 界面差异 | 页面配置表或客户特性表 |
| 审计/日志库 | 独立实例,版本独立更新 |
7️⃣ 升级流程(推荐)
1. 停止服务(可选)
2. 备份数据库
3. 执行数据库结构升级脚本(db-x.x.x)
4. 执行预置数据升级脚本(preset-x.x.x)
5. 部署应用镜像(vX.Y.Z)
6. 验证应用运行
所有脚本可重复执行,保证幂等性 ✅
✅ 总结
| 类别 | 升级方式 | 数据安全性 |
|---|---|---|
| 应用版本 | 镜像替换 | ✅ |
| 数据库版本 | 结构升级检测 | ✅ |
| 预置数据版本 | scope 控制 + 版本标记 | ✅✅✅(最强) |
升级不影响客户个性化,客户差异不影响系统升级