Admin:部署多个相同顺运宝明细逐件匹配修复到生产 #290

Open
opened 2026-08-22 11:51:18 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#224 / 档口入库码回写 MVP
  • 阶段:生产发布

要解决什么

#289 已修复多个相同顺运宝明细对应多个单件档口入库码时被误判为“原始 SKU 候选重复”的问题,但生产仍运行旧版本 add296c。需要把固定提交 a61d97b 打包部署到生产,使订单 260820SS6E61GG 后续重新匹配时能够使用新的逐件确定性规划。

做什么 / 不做什么

  • 做:从固定提交 a61d97b 构建 Linux amd64 Admin 二进制,核对构建产物哈希。
  • 做:切换前确认生产后台任务为空并创建 MySQL 逻辑备份;在独立回环端口预检后,使用独立 release 目录原子切换并重启服务。
  • 做:验证 systemd、端口、Nginx、本机及公网 HTTPS,并保留上一 release add296c 供快速回退。
  • 不做:不修改数据库 schema、Admin 配置、AI 配置或凭据。
  • 不做:不自动重新匹配、创建顺运宝明细或回写档口入库码,不发起采购及其他业务写入。

怎么做

  • 在���离工作树检出 a61d97b,固定 Go 1.23.0 执行全量测试、build 和 vet,再交叉编译 Linux amd64 静态二进制。
  • 发布前检查当前 release、schema 版本及 SYB 同步、目录导入、AI 匹配、档口入库码后台任务,确认无活动任务。
  • 使用 mysqldump --no-defaults --no-tablespaces 创建权限 0600 的 gzip 逻辑备份并验证压缩包。
  • 上传到 /opt/cmautobuy/releases/a61d97b/,复用稳定的配置与数据链接;先在 127.0.0.1:18081 启动预检,再原子切换稳定二进制链接并重启 systemd 服务。
  • 服务最多等待 15 秒;失败时立即切回 add296c 并重启。

验收标准

  • 发布物确实来自 a61d97b,本地、上传和安装 SHA-256 一致。
  • 切换前活动后台任务为 0,逻辑备份通过 gzip 校验且权限为 0600。
  • 独立端口预检通过,生产 systemd 为 active/enabled,监听和 Nginx 配置正常。
  • 本机和公网 HTTPS 根路径及登录页响应正常,启动日志没有 fatal、panic 或迁移失败。
  • schema 版本和配置保持不变,未执行真实匹配、顺运宝写码、采购或其他业务写入。
  • 上一 release add296c 保留并可快速回退。

怎么验证

从隔离工作树的 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
$env:GOOS="linux"
$env:GOARCH="amd64"
$env:CGO_ENABLED="0"
go build -trimpath -ldflags="-s -w" -o <staging>/cmautobuy-admin .

服务器执行发布物 SHA-256、备份 gzip -t、schema/活动任务只读查询、独立端口 HTTP 检查、systemctl、ss、nginx -t 和日志检查;本机执行公网 HTTPS 检查。

风险和回退

  • 风险:切换时若仍有后台任务,可能中断任务;因此切换前必须检查活动任务,非零就停止发布。
  • 风险:新二进制启动失败会造成短时不可用;独立端口先预检,正式启动设置 15 秒门禁。
  • 回退:原子切回 /opt/cmautobuy/releases/add296c/cmautobuy-admin 并重启服务;本次没有 schema 迁移,应用回退不需要恢复数据库。逻辑备份仅用于意外数据故障。

实施记录(2026-08-22)

  • 状态:已完成,待用户验收。
  • 生产目标代码基线:a61d97b;Linux amd64 二进制 28,164,248 字节,SHA-256 09b3ec2d7c3eb6d77cb437d71f52e38aa68acf0d18e490e0459708f7fdff0807,本地、上传、release 和稳定链接一致。
  • 切换前确认 schema v29,SYB 同步、目录导入、AI 匹配、档口入库码排队/回写均为 0。唯一 claimed 采购任务 cg26 从 2026-08-13 起未更新,对应 Client 最后上线于 2026-08-19,判定为遗留状态,不属于当前执行。
  • 备份:/opt/cmautobuy/backups/autobuy-before-290-20260822T035529Z-notablespaces.sql.gz,83,495,133 字节、权限 0600、32 个建表段,SHA-256 233a67b9a77f397fc708302e736c5142d6f225461eb456bbb34b3dbb5db461ce,gzip 校验通过。
  • 独立端口 127.0.0.1:18081 预检根路径 303、登录页 200;正式切换后进程实际执行 /opt/cmautobuy/releases/a61d97b/cmautobuy-admin,systemd active/enabled、仅有一个 18080 监听、Nginx 配置通过。
  • 本机根路径/登录页为 303/200;公网 HTTPS 根路径、登录页和 app.js 为 303/200/200;启动日志 fatal、panic、迁移失败为 0。
  • schema 保持 v29,发布后四类后台任务仍为 0;未触发真实匹配、顺运宝新增/写码、采购或其他业务写入。上一 release add296c 保留可回退。
## 基本信息 - 类型:部署 - 父级大工单:#14 - 所属 MVP / 版本:#224 / 档口入库码回写 MVP - 阶段:生产发布 ## 要解决什么 #289 已修复多个相同顺运宝明细对应多个单件档口入库码时被误判为“原始 SKU 候选重复”的问题,但生产仍运行旧版本 `add296c`。需要把固定提交 `a61d97b` 打包部署到生产,使订单 `260820SS6E61GG` 后续重新匹配时能够使用新的逐件确定性规划。 ## 做什么 / 不做什么 - 做:从固定提交 `a61d97b` 构建 Linux amd64 Admin 二进制,核对构建产物哈希。 - 做:切换前确认生产后台任务为空并创建 MySQL 逻辑备份;在独立回环端口预检后,使用独立 release 目录原子切换并重启服务。 - 做:验证 systemd、端口、Nginx、本机及公网 HTTPS,并保留上一 release `add296c` 供快速回退。 - 不做:不修改数据库 schema、Admin 配置、AI 配置或凭据。 - 不做:不自动重新匹配、创建顺运宝明细或回写档口入库码,不发起采购及其他业务写入。 ## 怎么做 - 在���离工作树检出 `a61d97b`,固定 Go 1.23.0 执行全量测试、build 和 vet,再交叉编译 Linux amd64 静态二进制。 - 发布前检查当前 release、schema 版本及 SYB 同步、目录导入、AI 匹配、档口入库码后台任务,确认无活动任务。 - 使用 `mysqldump --no-defaults --no-tablespaces` 创建权限 0600 的 gzip 逻辑备份并验证压缩包。 - 上传到 `/opt/cmautobuy/releases/a61d97b/`,复用稳定的配置与数据链接;先在 `127.0.0.1:18081` 启动预检,再原子切换稳定二进制链接并重启 systemd 服务。 - 服务最多等待 15 秒;失败时立即切回 `add296c` 并重启。 ## 验收标准 - [x] 发布物确实来自 `a61d97b`,本地、上传和安装 SHA-256 一致。 - [x] 切换前活动后台任务为 0,逻辑备份通过 gzip 校验且权限为 0600。 - [x] 独立端口预检通过,生产 systemd 为 active/enabled,监听和 Nginx 配置正常。 - [x] 本机和公网 HTTPS 根路径及登录页响应正常,启动日志没有 fatal、panic 或迁移失败。 - [x] schema 版本和配置保持不变,未执行真实匹配、顺运宝写码、采购或其他业务写入。 - [x] 上一 release `add296c` 保留并可快速回退。 ## 怎么验证 从隔离工作树的 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... $env:GOOS="linux" $env:GOARCH="amd64" $env:CGO_ENABLED="0" go build -trimpath -ldflags="-s -w" -o <staging>/cmautobuy-admin . ``` 服务器执行发布物 SHA-256、备份 `gzip -t`、schema/活动任务只读查询、独立端口 HTTP 检查、`systemctl`、`ss`、`nginx -t` 和日志检查;本机执行公网 HTTPS 检查。 ## 风险和回退 - 风险:切换时若仍有后台任务,可能中断任务;因此切换前必须检查活动任务,非零就停止发布。 - 风险:新二进制启动失败会造成短时不可用;独立端口先预检,正式启动设置 15 秒门禁。 - 回退:原子切回 `/opt/cmautobuy/releases/add296c/cmautobuy-admin` 并重启服务;本次没有 schema 迁移,应用回退不需要恢复数据库。逻辑备份仅用于意外数据故障。 ## 实施记录(2026-08-22) - 状态:已完成,待用户验收。 - 生产目标代码基线:`a61d97b`;Linux amd64 二进制 28,164,248 字节,SHA-256 `09b3ec2d7c3eb6d77cb437d71f52e38aa68acf0d18e490e0459708f7fdff0807`,本地、上传、release 和稳定链接一致。 - 切换前确认 schema v29,SYB 同步、目录导入、AI 匹配、档口入库码排队/回写均为 0。唯一 `claimed` 采购任务 `cg26` 从 2026-08-13 起未更新,对应 Client 最后上线于 2026-08-19,判定为遗留状态,不属于当前执行。 - 备份:`/opt/cmautobuy/backups/autobuy-before-290-20260822T035529Z-notablespaces.sql.gz`,83,495,133 字节、权限 0600、32 个建表段,SHA-256 `233a67b9a77f397fc708302e736c5142d6f225461eb456bbb34b3dbb5db461ce`,gzip 校验通过。 - 独立端口 `127.0.0.1:18081` 预检根路径 303、登录页 200;正式切换后进程实际执行 `/opt/cmautobuy/releases/a61d97b/cmautobuy-admin`,systemd active/enabled、仅有一个 18080 监听、Nginx 配置通过。 - 本机根路径/登录页为 303/200;公网 HTTPS 根路径、登录页和 `app.js` 为 303/200/200;启动日志 fatal、panic、迁移失败为 0。 - schema 保持 v29,发布后四类后台任务仍为 0;未触发真实匹配、顺运宝新增/写码、采购或其他业务写入。上一 release `add296c` 保留可回退。
Author
Owner

实施进度(2026-08-22)

  • 状态:进行中。
  • 已锁定生产目标代码基线:a61d97b。
  • 当前在隔离工作树执行固定 Go 1.23.0 全量测试、构建和静态检查;通过后才进入生产预检与切换。
## 实施进度(2026-08-22) - 状态:进行中。 - 已锁定生产目标代码基线:`a61d97b`。 - 当前在隔离工作树执行固定 Go 1.23.0 全量测试、构建和静态检查;通过后才进入生产预检与切换。
Author
Owner

完成归档(2026-08-22)

  • 状态:已完成,待用户验收。
  • 生产目标代码基线:a61d97b。
  • 归档提交:96d1ce0。
  • 归档文档:docs/task/290-admin部署多个相同顺运宝明细逐件匹配修复到生产.md。
  • 未验证:没有用生产样本执行真实重新匹配或档口入库码回写;没有实际执行回退或恢复备份。
## 完成归档(2026-08-22) - 状态:已完成,待用户验收。 - 生产目标代码基线:`a61d97b`。 - 归档提交:`96d1ce0`。 - 归档文档:`docs/task/290-admin部署多个相同顺运宝明细逐件匹配修复到生产.md`。 - 未验证:没有用生产样本执行真实重新匹配或档口入库码回写;没有实际执行回退或恢复备份。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#290