290 lines
12 KiB
Markdown
290 lines
12 KiB
Markdown
# CIPS Auto Deployment Refactor Implementation Plan
|
||
|
||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||
|
||
**Goal:** 在保留“基础环境预置”的前提下,将 CISD/CIPS 初始化从“cpconfig.cfg 驱动 vendor shell”逐步升级为“TMS 后端接管客户化渲染、输出物管理和执行编排”的自动化部署流程。
|
||
|
||
**Architecture:** 运维继续负责操作系统、目录、基础软件、介质上传解压、数据库和中间件平台级账号密码等与客户无关的预置动作;TMS 负责根据前端参数生成部署上下文,输出渲染后的配置和 SQL,按版本/支持方式编排客户化初始化步骤,并产出可审计的日志、配置快照和结果摘要。vendor 原始脚本默认只读,优先采用 staging 临时渲染执行,而不是直接改写介质本体。
|
||
|
||
**Tech Stack:** Spring Boot 3, Shell staging execution, 模板渲染, TiDB SQL 初始化, RabbitMQ/TLQ, CMSP/CMTP, Nginx/Web 发布
|
||
|
||
---
|
||
|
||
### Task 1: 固化“预置层 / 初始化层”边界
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/docs/plans/2026-03-09-auto-deploy-refactor.md`
|
||
- Reference: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/service/InitService.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json`
|
||
|
||
**Step 1: 明确定义预置层**
|
||
预置层仅包含与客户参数无关的动作:
|
||
- OS 用户、用户组、目录、权限创建
|
||
- JDK、RabbitMQ/TLQ/TiDB/Nginx 安装
|
||
- 防火墙和服务注册
|
||
- 安装介质上传、解压、静态资源预放置
|
||
- 数据库账号密码、中间件管理员账号密码等平台级凭据预置
|
||
- 许可证预置(如果出厂前已拿到)
|
||
|
||
**Step 2: 明确定义初始化层**
|
||
初始化层仅包含客户化动作:
|
||
- 机构号 / BIC / CIPS ID / LEI
|
||
- 节点 IP / 数据库地址
|
||
- RabbitMQ 通道账号密码
|
||
- RabbitMQ 用户 / 队列 / VHost 初始化
|
||
- TLQ 配置替换
|
||
- SQL 渲染与导库编排
|
||
- CMSP / CMTP / filetrans 配置渲染
|
||
- Nginx upstream / organization.json / Web 发布
|
||
- 服务启动与验收
|
||
|
||
**Step 3: 删除“初始化阶段执行预置脚本”的需求**
|
||
以下脚本只保留为预置脚本,不纳入 TMS 初始化主流程:
|
||
- `setpd.sh`
|
||
- `opencport.sh`
|
||
- `install_newpackage.sh`
|
||
- `setrabqstart.sh`
|
||
- `setxsd.sh`
|
||
- `setngservice.sh`
|
||
- `pongx.sh`
|
||
|
||
### Task 2: 固化部署上下文模型
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/docs/plans/2026-03-09-auto-deploy-refactor.md`
|
||
- Reference: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/dto/InitPreviewRequest.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
|
||
**Step 1: 区分“前端输入参数”和“后端部署上下文”**
|
||
前端输入参数只承载业务输入;后端部署上下文承载可直接渲染文件和执行脚本的派生值。
|
||
|
||
**Step 2: 部署上下文仅保留初始化阶段所需客户化字段**
|
||
部署上下文至少应包含:
|
||
- `productType`
|
||
- `supportMode`
|
||
- `myCipsIdOrBic`
|
||
- `mq01Ip`
|
||
- `mq02Ip`
|
||
- `app01Ip`
|
||
- `app02Ip`
|
||
- `dbIp`
|
||
- `bicCode`
|
||
- `cipsId`
|
||
- `leiCode`
|
||
- `organizationNameCn`
|
||
- `organizationNameEn`
|
||
- `signVendor`
|
||
- `signIp`
|
||
- `signPort`
|
||
- `signDn`
|
||
- `signPasswordEnc`
|
||
|
||
**Step 3: 平台级凭据不进入初始化上下文**
|
||
以下内容由预置层提供,不作为初始化接口输入:
|
||
- 数据库用户名 / 密码
|
||
- RabbitMQ 管理员账号 / 密码
|
||
- TiDB 管理员账号 / 密码
|
||
|
||
**Step 4: supportMode 显式按产品定义**
|
||
- `ENTERPRISE`: `RABBITMQ` / `TLQ`
|
||
- `INDIRECT`: `RABBITMQ` / `RABBITMQ_TLQ`
|
||
- `DIRECT`: `RABBITMQ_TLQ` / `RABBITMQ_CFMQ`
|
||
|
||
### Task 3: 优先接管数据库初始化
|
||
|
||
**Status (2026-03-09):** 标准版已完成第一阶段落地,初始化编排已拆为 `DB_RENDER -> DB_APPLY`,并在 task staging 目录生成渲染后 SQL 包;后续仍需补强真实导库命令与结果校验。
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/toolsh/setsql.sh`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/sql_script/CMEP-DML.sql`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/sql_script/sql_script_tmp/CMTP-01-raq.sql`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/sql_script/sql_script_tmp/CMTP-01-tlq.sql`
|
||
|
||
**Step 1: 让后端输出渲染后的 SQL 包**
|
||
输出至少包含:
|
||
- `CMTP-01.sql`
|
||
- `CMEP-DML.sql`
|
||
- 其他导库所需脚本快照
|
||
|
||
**Step 2: 数据库导入凭据继续由预置层提供**
|
||
初始化阶段不再输入和修改数据库账号密码;TMS 只负责:
|
||
- 渲染 SQL
|
||
- 组织导入顺序
|
||
- 记录执行结果
|
||
|
||
**Step 3: DB_INIT 从“纯脚本黑盒”升级为“渲染 + 执行”双阶段**
|
||
拆成:
|
||
- `DB_RENDER`
|
||
- `DB_APPLY`
|
||
|
||
**Step 4: 保留 vendor 导库脚本作为执行器,而不是模板引擎**
|
||
如果短期不能完全替代 `setsql.sh`,则至少做到:
|
||
- 模板由后端渲染
|
||
- vendor 脚本只负责导入,不再负责替换占位符
|
||
|
||
### Task 4: 接管应用配置输出物
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/toolsh/setsptp.sh`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/cmsp/01/application-prd-ci01.properties`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/cmtp/01/application-prd-ci01.properties`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/cmsp/01/filetrans.properties`
|
||
|
||
**Step 1: 后端直接输出以下配置快照**
|
||
- `application-prd*.properties`
|
||
- `filetrans.properties`
|
||
- 标准版 RabbitMQ 通道账号密码回写结果
|
||
|
||
**Step 2: 数据库连接凭据保持预置,不由初始化阶段改写**
|
||
应用配置接管范围仅覆盖客户化字段,不覆盖预置层数据库连接凭据。
|
||
|
||
**Step 3: 将 setsptp.sh 从“渲染 + 拷贝”降级为“拷贝器”**
|
||
短期目标:
|
||
- 配置替换由后端完成
|
||
- `setsptp.sh` 仅做 JAR / 目录拷贝
|
||
|
||
**Step 4: 禁止敏感信息输出到步骤日志**
|
||
渲染日志中不得出现密码明文或密文。
|
||
|
||
### Task 5: 接管 Nginx / Web 客户化
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/software/setngx.sh`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/toolsh/setweb.sh`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/software/nginx.conf`
|
||
|
||
**Step 1: 新增 Nginx/Web 相关步骤**
|
||
至少新增:
|
||
- `NGINX_CONFIG_APPLY`
|
||
- `WEB_CONFIG_APPLY`
|
||
|
||
**Step 2: 后端渲染输出物**
|
||
- `nginx.conf`
|
||
- `organization.json`
|
||
- Web 发布目录快照或发布日志
|
||
|
||
**Step 3: 不再把 setweb.sh 作为首批高收益改造对象本体**
|
||
优先由后端接管组织名称和 nginx upstream 渲染,再决定是否保留 `setweb.sh` 作为拷贝器。
|
||
|
||
### Task 6: 建立显式启动顺序
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/service/InitService.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/sh/sh/stcmep_cent.sh`
|
||
|
||
**Step 1: 将“部署”和“启动”拆开**
|
||
当前 `DEPLOY_RECEIVER` 不能同时承载“拷贝应用”和“启动服务”两种职责。
|
||
|
||
**Step 2: 新增启动步骤**
|
||
建议新增:
|
||
- `START_CMSP_CMTP`
|
||
- `START_NGINX`
|
||
- `POST_CHECK`
|
||
|
||
**Step 3: 定义启动顺序**
|
||
推荐顺序:
|
||
1. 参数校验
|
||
2. 渲染配置和 SQL
|
||
3. 准备 license
|
||
4. 初始化 RabbitMQ / TLQ
|
||
5. 初始化数据库
|
||
6. 下发 CMSP / CMTP 配置
|
||
7. 下发 Nginx / Web 配置
|
||
8. 启动 CMSP / CMTP
|
||
9. 启动 Nginx
|
||
10. 验收检查
|
||
|
||
### Task 7: 建立失败边界和输出物
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/service/InitService.java`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
|
||
**Step 1: 明确失败即停边界**
|
||
- MQ 初始化失败后停止后续步骤
|
||
- 数据库导入失败后不启动应用
|
||
- 应用配置失败后不覆盖旧版本
|
||
- Web 发布失败不影响已启动后台服务
|
||
|
||
**Step 2: 输出四类审计产物**
|
||
每次部署任务至少输出:
|
||
- 渲染后的配置快照
|
||
- 渲染后的 SQL 包
|
||
- 步骤执行日志
|
||
- 最终部署结果摘要
|
||
|
||
### Task 8: 第一批高收益实施顺序
|
||
|
||
**Files:**
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/service/InitService.java`
|
||
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json`
|
||
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java`
|
||
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java`
|
||
|
||
**Step 1: 第一优先级**
|
||
- 标准版 SQL 渲染输出物
|
||
- DB_INIT 拆分为渲染与执行
|
||
- 数据库导入结果可审计化
|
||
|
||
**Step 2: 第二优先级**
|
||
- CMSP / CMTP / filetrans 配置输出物
|
||
- RabbitMQ / TLQ 初始化后的验收
|
||
|
||
**Step 3: 第三优先级**
|
||
- Nginx / Web 渲染与发布
|
||
- 显式启动顺序和启动后检查
|
||
|
||
### Task 9: 验收标准
|
||
|
||
**Files:**
|
||
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java`
|
||
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java`
|
||
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/document/CIPS标准收发器安装部署手册1.0(企业信创版)-V1.3.2.pdf`
|
||
|
||
**Step 1: 参数层验收**
|
||
确认后端输入能完整覆盖初始化阶段真正需要的客户化字段,特别是:
|
||
- 支持方式
|
||
- 组织名称
|
||
- Nginx/Web 所需字段
|
||
- RabbitMQ 通道账号密码
|
||
|
||
**Step 2: 配置层验收**
|
||
确认输出物中不再残留以下占位符:
|
||
- `AAAABBBBXXX`
|
||
- `sptp.01app.ip`
|
||
- `sptp.02app.ip`
|
||
- `sptp.01db.ip`
|
||
- `01tlq.ip`
|
||
- `02tlq.ip`
|
||
- `mybiccode`
|
||
- `mycipsid`
|
||
- `myleicode`
|
||
|
||
**Step 3: 部署层验收**
|
||
确认:
|
||
- MQ / TLQ 正常可连
|
||
- TiDB 库和 schema 正常创建
|
||
- CMSP / CMTP 正常启动
|
||
- Nginx 正常代理
|
||
- Web 首页可访问
|
||
- `organization.json` 为客户实际机构名称
|
||
|
||
### Task 10: 非目标项
|
||
|
||
**Step 1: 明确本轮不做**
|
||
以下内容不作为本轮主线:
|
||
- 大规模直接修改 vendor 原始脚本
|
||
- 修改介质 readme/document 作为交付主成果
|
||
- 将所有 cpconfig 依赖一次性彻底移除
|
||
- 将平台级凭据纳入初始化接口输入
|
||
|
||
**Step 2: 后续演进原则**
|
||
优先让 TMS 接管“产物和编排”,再逐步削弱 vendor shell 的模板职责。
|