250 lines
11 KiB
Markdown
250 lines
11 KiB
Markdown
# 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
|