cisd/docs/plans/2026-03-10-standard-post-deploy-completion-plan.md
2026-03-11 14:23:11 +08:00

250 lines
11 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.

# Standard Post Deploy Completion Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** 补齐标准版初始化在部署文档后半段缺失的动作包括真实导库、CMSP/CMTP 启动与检查、nginx 配置与启动、WEB 发布。
**Architecture:** 保持“预置层负责基础安装与平台凭据初始化层负责客户化和运行配置”边界不变。TMS 继续负责生成配置和 SQL 输出物并在标准版流程中新增后半段步骤真实导库、应用启动、nginx 配置与启动、WEB 发布、启动后检查。vendor 原始脚本继续只读,优先通过 staging 配置和显式命令编排补齐流程,而不扩散成新的黑盒主导链路。
**Tech Stack:** Java 17, Spring Boot 3.5, Jackson, JUnit 5, Maven, Shell command orchestration
---
### Task 1: 固化标准版后半段步骤编排
**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/resources/initplan/step-command-profiles.json`
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java`
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/document/CIPS标准收发器安装部署手册1.0(企业信创版)-V1.3.2.doc`
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(间参版)-V1.3.2/document/CIPS标准收发器安装部署手册1.0(金融机构信创版)-V1.3.2.doc`
**Step 1: Write the failing test**
`InitServiceTest` 新增标准版步骤断言:
- `ENTERPRISE + RABBITMQ` 包含:`DB_RENDER`、`DB_APPLY`、`DEPLOY_RECEIVER`、`NGINX_CONFIG_APPLY`、`WEB_CONFIG_APPLY`、`START_CMSP_CMTP`、`START_NGINX`、`POST_CHECK`
- `ENTERPRISE + TLQ` 同样包含上述后半段步骤
- `INDIRECT + RABBITMQ`、`INDIRECT + RABBITMQ_TLQ` 同样断言
- 直参版仍不包含这些标准版步骤
**Step 2: Run test to verify it fails**
Run: `mvn -q -Dtest=InitServiceTest test`
Expected: FAIL提示步骤未生成
**Step 3: Write minimal implementation**
修改 `InitService.defaultSteps()``step-command-profiles.json`
- 在标准版 `DEPLOY_RECEIVER` 后追加:
- `NGINX_CONFIG_APPLY`
- `WEB_CONFIG_APPLY`
- `START_CMSP_CMTP`
- `START_NGINX`
- `POST_CHECK`
- 命令模板统一先挂到 internal step
- `internal::nginx_config_apply`
- `internal::web_config_apply`
- `internal::start_cmsp_cmtp`
- `internal::start_nginx`
- `internal::post_check`
**Step 4: Run test to verify it passes**
Run: `mvn -q -Dtest=InitServiceTest test`
Expected: PASS
### Task 2: 增加配置面与失败测试
**Files:**
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/config/InitExecutorProperties.java`
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/application.yml`
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/config/application.yml.example`
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java`
**Step 1: Write the failing tests**
新增执行器测试:
- `shouldApplyStandardNginxConfigFromTemplate`
- `shouldPublishStandardWebAssetsAndOrganizationJson`
- `shouldStartStandardCmspCmtpWithConfiguredCommand`
- `shouldStartStandardNginxWithConfiguredCommand`
- `shouldRunStandardPostCheck`
测试目标:
- `NGINX_CONFIG_APPLY` 会输出替换后的 `nginx.conf`
- `WEB_CONFIG_APPLY` 会生成 `organization.json` 并发布 `front.zip` 内容
- `START_CMSP_CMTP` 会调用预置启动命令或脚本
- `START_NGINX` 会调用 nginx 启动命令
- `POST_CHECK` 会执行配置的检查命令并记录日志
**Step 2: Run test to verify it fails**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest test`
Expected: FAIL提示 internal step 未实现或配置缺失
**Step 3: Define minimal config surface**
为标准版后半段补齐配置项:
- `standard-nginx-template-path`
- `standard-nginx-target-path`
- `standard-web-front-zip-path`
- `standard-web-work-dir`
- `standard-web-target-dir`
- `standard-web-organization-json-path`
- `standard-app-start-command`
- `standard-nginx-start-command`
- `standard-post-check-command`
说明:
- 真实命令由环境配置注入TMS 只编排,不硬编码具体 systemd/脚本形态
- 默认值可沿用文档建议路径
**Step 4: Re-run focused test**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest test`
Expected: 仍失败,但仅剩实现缺失
### Task 3: 实现标准版 Nginx 配置落地
**Files:**
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.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/cpackage/software/setngx.sh`
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/software/nginx.conf`
**Step 1: Add internal step dispatch**
`executeInternal()` 新增:
- `case "nginx_config_apply" -> executeStandardNginxConfigApply(task, step)`
**Step 2: Implement minimal behavior**
实现逻辑:
- 仅对标准版生效
- 读取 `standard-nginx-template-path`
- 复用 `buildStandardReplacements()` 替换 `sptp.01app.ip`、`sptp.02app.ip`
- 将渲染结果先输出到 `staging/<taskId>/nginx/nginx.conf`
- LOCAL 模式复制到 `standard-nginx-target-path`
- SIMULATE 模式仅产出 staging 文件
**Step 3: Run focused test**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldApplyStandardNginxConfigFromTemplate test`
Expected: PASS
### Task 4: 实现标准版 WEB 发布
**Files:**
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.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/cpackage/toolsh/setweb.sh`
**Step 1: Add internal step dispatch**
`executeInternal()` 新增:
- `case "web_config_apply" -> executeStandardWebConfigApply(task, step)`
**Step 2: Implement minimal behavior**
实现逻辑:
- 仅对标准版生效
-`standard-web-front-zip-path` 读取 `front.zip`
- 解压到 `staging/<taskId>/web/`
- 生成 `organization.json`,内容来自 `request.orgNameCn`
- LOCAL 模式将解压产物发布到 `standard-web-target-dir`
- 同步 `organization.json``standard-web-organization-json-path`
- SIMULATE 模式仅生成 staging 产物
**Step 3: Run focused test**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldPublishStandardWebAssetsAndOrganizationJson test`
Expected: PASS
### Task 5: 实现标准版启动与检查
**Files:**
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.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/cpackage/sh/sh/stcmep_cent.sh`
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/cmsp/01/start_cmsp.sh`
- Reference: `/Users/waner/Work/CISD/文档/CIPS部署文档/标准收发器安装介质及部署手册(企业信创版)-V1.3.2/cpackage/cmtp/01/start_cmtp.sh`
**Step 1: Add internal step dispatch**
`executeInternal()` 新增:
- `case "start_cmsp_cmtp" -> executeStandardStartApp(task, step)`
- `case "start_nginx" -> executeStandardStartNginx(task, step)`
- `case "post_check" -> executeStandardPostCheck(task, step)`
**Step 2: Implement minimal behavior**
实现逻辑:
- `START_CMSP_CMTP`
- 仅对标准版生效
- 执行 `standard-app-start-command`
- `START_NGINX`
- 执行 `standard-nginx-start-command`
- `POST_CHECK`
- 执行 `standard-post-check-command`
- 三者都要求:
- SIMULATE 模式返回模拟成功
- LOCAL 模式走统一 `runCommand` 逻辑
- 日志记录命令、cwd、exit code
**Step 3: Run focused tests**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldStartStandardCmspCmtpWithConfiguredCommand,ConfigurableInitStepExecutorTest#shouldStartStandardNginxWithConfiguredCommand,ConfigurableInitStepExecutorTest#shouldRunStandardPostCheck test`
Expected: PASS
### Task 6: 将 DB_APPLY 收敛为“真实导库”入口
**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/application.yml`
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/config/application.yml.example`
- Test: `/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java`
**Step 1: Tighten DB_APPLY contract**
修改 `DB_APPLY` 行为:
- 标准版 LOCAL 模式下,如果 `standard-db-apply-command` 为空,直接失败而不是跳过
- 错误信息明确提示“导库命令未配置”
**Step 2: Add test**
新增测试:
- `shouldFailDbApplyWhenStandardDbApplyCommandMissingInLocalMode`
- `shouldExecuteStandardDbApplyCommandWhenConfigured`
**Step 3: Run focused test**
Run: `mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldFailDbApplyWhenStandardDbApplyCommandMissingInLocalMode,ConfigurableInitStepExecutorTest#shouldExecuteStandardDbApplyCommandWhenConfigured test`
Expected: PASS
### Task 7: 文档同步与回归验证
**Files:**
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/docs/plans/2026-03-09-auto-deploy-refactor.md`
- Modify: `/Users/waner/Work/CISD/文档/tms-framework/docs/openapi/cisd-init.openapi.yaml`
- 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: Sync plan wording**
将标准版初始化主链路更新为:
- `... -> DB_APPLY -> DEPLOY_RECEIVER -> NGINX_CONFIG_APPLY -> WEB_CONFIG_APPLY -> START_CMSP_CMTP -> START_NGINX -> POST_CHECK -> VERIFY`
**Step 2: Refresh API/Doc examples if needed**
如果接口示例中已有步骤说明,补充新增标准版后半段步骤说明。
**Step 3: Run targeted tests**
Run: `mvn -q -Dtest=InitServiceTest,ConfigurableInitStepExecutorTest test`
Expected: PASS
**Step 4: Run compile verification**
Run: `mvn -q -DskipTests compile`
Expected: PASS