交付出件箱

← 返回出件箱

致 root:发生产批1 卡在 Codeup 500 · 需你查一件事 + 两处通报

dev2 · 2026-08-20 · 【实测】= 本机命令跑出来的


🔴 需要你做的一件事:查这个 MR 建成没有

发生产批1 时,cherry-pick 全过、release 分支已推上 Codeup,但建 MR 返 HTTP 500。

分支: release/mr-381-382-...-419-477-20260820021400
SHA : 5218d0518060ef0a4d2f2dd67f4506816ff37d86
报错: ❌ Codeup MR 创建失败:HTTP Error 500: Internal Server Error

【实测】分支确实在 Codeup 上(mirror 回流已见到该 ref)。

我查不了 MR 是否已创建 —— 手上 release-pipeline-status 用的是纯只读 flow 令牌、
不含 MR 权限;Codeup 令牌在你那儿。

不敢盲目重试:台账记着「Codeup 500 会吞 webhook,合并 API 500 先查 MR 状态」。
500 不等于没建成,猜错就是两个内容相同的生产 MR挂着,谁合谁不知道。

麻烦你回我哪种情况

这个分支我已经验过,内容是对的

【实测】

改动面:  121 提交 / 101 文件(结算 93 + 核心 8)
核心 alembic heads: 1 个 (phase70_002_merge_heads)   ← 并头生效,流水线不会再红
结算 alembic heads: 1 个 (phase68_003_store_closed)  ← 批1 到此为止,正常
env.py 排除清单:    service_prices / service_price_changes / payment_orders 三张都已登记
夹带第2批内容:      0

【实测】生产未受影响:origin/main 仍 ec0e6a49,main 流水线无新 run。


通报一:MR 清单从 69 改成 72(你批准的那份漏了 3 个)

我原来的筛法是「动了 settlement/ 目录才算结算 MR」——
这个筛法漏掉了功能上属于结算、但只改核心文件的 MR:

补进来 标题 不发的后果
#390 fix(batchA): 价格表登记进核心 autogenerate 排除清单 🔴 价格表没进排除名单,可能被 autogenerate 误删(即台账记的「autogenerate 会 DROP 45 张表」高危)
#458 fix: 补齐核心后台「客服设置」菜单入口 结算客服设置页上线了,但核心后台看不到入口
#459 fix: HREF_TO_MENU_KEY 补客服设置映射 #458 的补丁,必须同发

【实测】判据:

改过 migrations/env.py 的 MR:  #392(在清单) #390(不在清单!) + 1 个无号
核心后台客服设置页由 MR#458 带(动结算文件 0 个 → 被我的筛法排除)
结算侧客服设置页在 MR#456/#457(在清单)

⚠️ #390 的缺失还是 cherry-pick 冲突的直接原因 ——
少了批A 那步,批B 对 env.py 的改动落不到预期上下文,冲突在 migrations/env.py。
补上 #390 后按号顺序 pick,冲突消失(【实测】第二次跑 cherry-pick 全过)。

修正后的分批

批1(40 个 · 已推分支,卡在建 MR): 381~419 全部 + 477(并头)
批2(33 个 · 未开始):             420~430 · 432 433 436 438 440 441
                                 456 457 458 459 462 464~469 471~475
合计 73 = 原 69 + #390 + #458 + #459 + 并头 #477

通报二:发版工具有个真缺陷 —— MR 数量上限约 56 个

第一次尝试 70 个 MR 一起发,炸在建分支这步:

fatal: cannot lock ref 'refs/heads/release/mr-381-...-477-20260820020628':
       Unable to create '....lock': File name too long

【实测】分支名 305 字符,文件系统单组件上限 255 字节。对照组:短名字可建。

工具用所有 MR 号拼分支名,所以一次最多约 56 个 MR(255 − 前缀 11 − 时间戳 15 − .lock 5,
每个三位号占 4 字符)。超了就静默炸在建分支,报错信息不提这是数量问题。

建议:分支名超长时改用哈希或首尾号+计数(如 release/mr-381to477-40n-<时间戳>),
把完整 MR 列表写进 MR 描述。


后续顺序(确认一致)

  1. 批1 MR 合并 → main 流水线自动跑(部署核心 + 核心 alembic,此时应转绿)
  2. 批2 建 MR → 合并 → main 流水线再跑一次
  3. 你跑 settle-prod(结算只需跑这一次,批1/批2 合并只部署核心)
  4. 你手动 nginx -t && nginx -s reload(本批含 settlement/deploy/nginx-settlement.conf)

云机环境 · 非验收证据。