cisd/docs/plans/2026-03-02-cisd-init-onhost-validation-and-rollback.md
2026-03-05 11:08:57 +08:00

166 lines
5.8 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.

# CISD 初始化真机联调与回滚手册
- 日期2026-03-02
- 适用版本:`ENTERPRISE` / `INDIRECT` / `DIRECT`
- 适用代码基线:已包含 `APP_MQ_CREDENTIALS_APPLY`、`direct_db_init`、`tlq_init_cfg`
## 1. 目的
1. 在目标设备上完成初始化关键路径联调。
2. 验证三类版本在“预部署完成后,仅做客户化初始化”的边界下可稳定运行。
3. 提供失败后的快速回滚与重试指引。
## 2. 关键实现映射(联调前必须确认)
1. 企业/间参步骤链:
`RENDER_CONFIG -> SET_(RABBITMQ|TLQ) -> MQ_USER_APPLY -> MQ_QUEUE_APPLY -> DB_INIT -> DEPLOY_RECEIVER -> APP_MQ_CREDENTIALS_APPLY -> VERIFY`
2. 轻量化直参TLQ步骤链
`RENDER_CONFIG -> MQ_USER_APPLY -> DB_INIT(direct_db_init) -> TLQ_INIT_CFG(tlq_init_cfg) -> VERIFY`
3. 轻量化直参CFMQ步骤链
`RENDER_CONFIG -> MQ_USER_APPLY -> DB_INIT(direct_db_init) -> CFMQ_APPLY -> VERIFY`
4. 通道账号密码写回应用配置时默认加密:
`DESede(3DES) + secretKey=ABCDEFGHIJKLMN1234567890 + HEX(upper)`
## 3. 联调前置检查
## 3.1 环境变量基线
在 TMS 进程环境确认以下参数:
```bash
echo "$TMS_CISD_PRESET_PRODUCT_TYPE"
echo "$TMS_INIT_EXECUTOR_MODE"
echo "$TMS_INIT_EXECUTOR_STANDARD_CPCONFIG_PATH"
echo "$TMS_INIT_EXECUTOR_DIRECT_DB_SCRIPT_DIR"
echo "$TMS_INIT_EXECUTOR_DIRECT_TLQ_INIT_CFG_DIR"
echo "$TMS_INIT_EXECUTOR_STANDARD_RABBIT_APP_CONFIG_PATTERN_1"
echo "$TMS_INIT_EXECUTOR_STANDARD_RABBIT_APP_CONFIG_PATTERN_2"
echo "$TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_ENCRYPT_ENABLED"
echo "$TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_SECRET_KEY"
```
建议值:
1. `TMS_INIT_EXECUTOR_MODE=LOCAL`
2. `TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_ENCRYPT_ENABLED=true`
3. `TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_SECRET_KEY` 与现场收发器解密密钥一致。
## 3.2 目录与脚本存在性
```bash
ls -l /home/cmep4i/cpconfig.cfg
ls -l /home/cmep4i/cpackage/toolsh/{setfraq.sh,setftq.sh,setsql.sh,setsptp.sh}
ls -l /opt/CAE_Install_Base_Resource/DB/setsql.sh
ls -l /opt/CAE_Install_App_Resource/CAE/init_cfg.sh
```
## 3.3 MQ 与配置文件可写性
```bash
ls -l /home/cmep4i/cmsp/application-prd*.properties
ls -l /home/cmep4i/cmtp/application-prd*.properties
which rabbitmqctl
which rabbitmqadmin
```
## 4. 联调执行清单(统一流程)
## 4.1 接口执行顺序
1. `GET /api/v1/device/status`
2. `POST /api/v1/init/preview`
3. `POST /api/v1/init/task`
4. `POST /api/v1/init/task/{taskId}/execute`
5. `GET /api/v1/init/task/{taskId}/steps`
6. 失败时逐步查看日志:`GET /api/v1/init/task/{taskId}/steps/{stepNo}/log`
## 4.2 用例矩阵(最小集合)
1. 企业版 + RabbitMQ
2. 企业版 + TLQ
3. 间参版 + RabbitMQ
4. 轻量化直参 + RABBITMQ_TLQ必须带 `directTlq` 三字段)
5. 轻量化直参 + RABBITMQ_CFMQ
## 4.3 直参 TLQ 请求体附加字段
```json
{
"directTlq": {
"localNodeSeq": "A",
"upstreamInstitutions": "CIPSCNSHXXX;CIPSCNWXXXX",
"upstreamCocCount": 2
}
}
```
## 5. 关键验收点
1. `RENDER_CONFIG` 后,`cpconfig.cfg` 中机构号、节点、签名参数、`MQ_TYPE` 已替换。
2. `MQ_USER_APPLY`RabbitMQ 中存在通道用户,且具备目标 vhost 权限。
3. `MQ_QUEUE_APPLY` 后,业务队列创建成功(企业/间参)。
4. `APP_MQ_CREDENTIALS_APPLY` 后,`spring.rabbitmq.username/password` 已更新且为密文(非明文)。
5. `DB_INIT` 生成或替换的 SQL 文件可执行,无路径/权限错误。
6. `VERIFY` 成功,任务最终状态 `SUCCESS`
## 6. 失败定位顺序
1. 配置错误:版本预置、环境变量、路径。
2. 权限错误TMS 进程用户对脚本和配置文件不可写。
3. 脚本依赖缺失:`rabbitmqctl/rabbitmqadmin`、Java、数据库客户端。
4. 参数不完整:直参 TLQ 缺 `directTlq` 字段。
5. 密钥不一致:写回密文与收发器解密密钥不匹配导致 MQ 连接失败。
## 7. 回滚策略(按层次)
## 7.1 执行前备份(强制)
```bash
TS=$(date +%Y%m%d%H%M%S)
mkdir -p /tmp/cisd-init-backup-$TS
cp -a /home/cmep4i/cpconfig.cfg /tmp/cisd-init-backup-$TS/
cp -a /home/cmep4i/cmsp/application-prd*.properties /tmp/cisd-init-backup-$TS/ 2>/dev/null || true
cp -a /home/cmep4i/cmtp/application-prd*.properties /tmp/cisd-init-backup-$TS/ 2>/dev/null || true
echo "/tmp/cisd-init-backup-$TS"
```
## 7.2 配置回滚
```bash
cp -a /tmp/cisd-init-backup-<TS>/cpconfig.cfg /home/cmep4i/cpconfig.cfg
cp -a /tmp/cisd-init-backup-<TS>/application-prd*.properties /home/cmep4i/cmsp/ 2>/dev/null || true
cp -a /tmp/cisd-init-backup-<TS>/application-prd*.properties /home/cmep4i/cmtp/ 2>/dev/null || true
```
## 7.3 MQ 回滚(按需)
```bash
# 删除通道用户(示例)
rabbitmqctl delete_user <channelUsername>
# 删除业务队列(示例,按实际创建队列名执行)
rabbitmqadmin --username=admin --password=admin --vhost=/ delete queue name=<queueName>
rabbitmqadmin --username=admin --password=admin --vhost=/RQ delete queue name=<queueName>
```
## 7.4 数据库回滚(按实际 SQL 执行情况)
1. 若仅生成 SQL 未执行:删除临时生成物即可。
2. 若已执行入库:使用预先准备的回滚 SQL 或从数据库备份恢复。
3. 严禁在无备份情况下直接清库重建。
## 8. 重试策略
1. 先回滚配置和 MQ 变更,再重建任务重试,不复用失败任务。
2. 每次仅变更一个变量(如路径、密钥、账号),避免多变量同时变化。
3. 连续两次同一步失败,先停止重试,导出该步骤日志并人工排查根因。
## 9. 交付物归档
每次联调需归档:
1. `taskId`、版本类型、请求参数(脱敏后)。
2. 步骤执行日志目录:`/tmp/tms-init-logs/<taskId>/`。
3. 回滚操作记录(是否执行、执行人、时间)。
4. 最终结论:通过/失败及根因。