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

12 KiB
Raw Blame History

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