cisd/docs/plans/2026-03-09-auto-deploy-refactor.md
2026-03-11 14:23:11 +08:00

290 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 的模板职责。