BeeX 配置与版本统一发布流程

管理后台中所有会影响用户、资金或客户端行为的配置与版本,都必须沿同一条晋级链路发布。测试环境是唯一编辑入口,生产环境只接收已经验收的候选版本。

1. 修改测试配置仅在 id-test 编辑并保存
2. 发布测试冻结测试快照并完成测试环境验收
3. 转移线上复制已验收快照,生成生产候选
4. 灰度测试在生产环境验证候选,不允许跳过
5. 正式发布验收通过后切换为生产全量版本

一、统一原则

规则系统行为解决的问题
测试环境是唯一编辑入口生产环境隐藏编辑和回滚入口;后端同时拒绝生产环境直接保存。避免运营绕过测试直接修改线上资金规则。
测试发布生成不可变快照记录字段值、来源规则版本、SHA256、操作人和时间。保证线上候选与测试通过的内容一致。
转移线上不等于发布只生成 PROD_DRAFT 或生产 DRAFT,不会立即影响线上用户。避免“转移”被误解为全量上线。
必须经过灰度阶段后端禁止从生产候选直接正式发布。把线上真实环境验收变成硬门禁。
操作全程可追溯保存来源版本、发布人、测试人、灰度人、正式发布人和各阶段时间。出现资金或客户端问题时可以还原发布过程。
不能做:在生产环境直接编辑配置、把测试通过直接当成线上发布、跳过生产灰度、重新手工录入一份“看起来相同”的线上配置。

二、状态机

stateDiagram-v2 [*] --> TEST_EDITING: "测试环境编辑" TEST_EDITING --> TEST_PUBLISHED: "发布测试 / 冻结快照" TEST_PUBLISHED --> PROD_DRAFT: "转移线上" PROD_DRAFT --> GRAY: "开始灰度" GRAY --> PUBLISHED: "正式发布" TEST_EDITING --> TEST_EDITING: "继续修改" TEST_PUBLISHED --> TEST_EDITING: "发现问题,回测试修改" PROD_DRAFT --> TEST_EDITING: "候选不通过,回测试重新发布" GRAY --> TEST_EDITING: "灰度不通过,停止候选并回测试"
阶段配置中心H5 离线包是否影响生产全量用户
TEST_PUBLISHED测试配置快照已冻结测试包已验收并发布到测试版本池
PROD_DRAFT / DRAFT生产候选快照生产候选包
GRAY候选快照进入生产验收阶段白名单或百分比用户可命中配置:否;H5:仅灰度人群
PUBLISHED全量生产规则生效普通生产用户可命中

三、配置中心发布

  1. 在管理后台切换到“印尼测试”,编辑配置并保存。保存只修改测试环境。
  2. 点击“发布测试”,填写测试说明。服务端读取当前模块值,生成带 SHA256 的 TEST_PUBLISHED 快照。
  3. 测试通过后点击“转移线上”。生产管理服务校验来源环境、阶段和 SHA256,只创建 PROD_DRAFT 候选。
  4. 切换到“印尼正式”,在“生产发布对照”中同时查看“线上生效值”和“生产候选值”。页面逐项标出差异、来源测试版本、操作人、转移时间,以及随快照转移的测试账号覆盖等结构化配置;确认无误后点击“开始灰度”。
  5. 完成生产环境验收后点击“正式发布”;服务端才把候选值写入生产生效规则。
配置灰度的当前真实含义:佣金、提现等配置目前是全局规则,没有按用户选择配置版本的能力。因此 GRAY 阶段只锁定候选快照并记录生产验收,不能提前写入生产规则。生产页面左侧明确标识“当前用户正在使用”的线上值,右侧展示待发布候选;只有 PUBLISHED 才会全量生效。这是资金安全门禁,不是假装存在用户级灰度。

配置发布接口

动作接口门禁
发布测试POST /api/v1/admin/config-console/modules/{moduleKey}/test-publish只能在测试环境
转移线上POST /api/v1/admin/config-console/modules/{moduleKey}/import-production来源必须为 TEST_PUBLISHED,SHA256 必须一致
开始灰度POST /api/v1/admin/config-console/releases/{releaseId}/gray只能由 PROD_DRAFT 进入
正式发布POST /api/v1/admin/config-console/releases/{releaseId}/publish只能由 GRAY 进入

四、H5 离线包发布

  1. 云效统一流水线 4987658 checkout 一次 commit,并用同一个 H5 版本号同时生成 INTERNALRELEASE 两个 ZIP。
  2. INTERNAL 只适用于 Native 88.88.88,包内包含生产与 id-test 两组配置并默认生产;RELEASE 只包含生产配置。
  3. 测试人员用 88 App 安装 INTERNAL,分别验证生产与 id-test,填写设备、Native 版本和说明,标记 TEST_PASSED 后发布内部版本。
  4. 点击“转移线上”时,管理后台查找同版本、同完整 commit 的预构建 RELEASE 候选。候选不存在或 commit 不同则失败,不允许二次构建。
  5. 在正式 RELEASE 版本池配置用户、联盟码、设备白名单或 1-99% 稳定比例,候选进入 GRAY
  6. 灰度验收通过后点击“正式发布”,RELEASE 状态进入 PUBLISHED
H5 是真实灰度:生产 GRAY 的 RELEASE 只对命中白名单或稳定百分比的人群下发;其他正式 App 继续使用上一版 PUBLISHED
两个维度必须分开:Native 版本决定包渠道:精确 88.88.88 永远拿 INTERNAL,其余版本永远拿 RELEASE;API Host 与请求 envCode 不得决定渠道。只有 INTERNAL 在启动后读取 Native 当前业务环境并选择包内配置。
权威版本池:INTERNAL 的发布状态以内部版本池为准,RELEASE 的发布与灰度状态以线上版本池为准。请求落到非权威 API 时由服务端携带内部令牌转发查询;转发失败只返回“暂无更新”,不得改查另一个渠道。

五、操作时序

sequenceDiagram actor Operator as "运营/研发" participant CI as "统一 H5 流水线" participant Internal as "INTERNAL 版本池" participant Release as "RELEASE 版本池" participant App88 as "88.88.88 App" participant ProdApp as "正式 App" Operator->>CI: "指定一个 commit,运行一次" CI->>Internal: "登记 INTERNAL" CI->>Release: "登记同版本、同 commit RELEASE 候选" Operator->>Internal: "发布内部版本并验收" App88->>Internal: "任一 API 内部路由到 INTERNAL 权威版本池" Internal-->>App88: "只下发 INTERNAL" Operator->>Release: "转移线上:只关联预构建候选" Release->>Release: "校验同版本、同 commit,不重建" Operator->>Release: "开始灰度" ProdApp->>Release: "任一 API 内部路由到 RELEASE 权威版本池" Release-->>ProdApp: "命中灰度目标才下发新 RELEASE" Operator->>Release: "正式发布" Release-->>ProdApp: "全量下发 RELEASE"

六、验收清单

检查项通过标准
生产直接编辑页面无编辑/回滚按钮,绕过页面调用接口仍被拒绝。
测试发布发布记录包含模块值、SHA256、来源版本、操作人和时间。
重复转移同一测试发布记录重复点击不会产生不同的生产候选。
跳级发布PROD_DRAFT 不能直接正式发布;必须先进入 GRAY
配置灰度安全点击“开始灰度”不修改生产全量规则;正式发布时才写入。
H5 灰度隔离灰度用户拿新包,非灰度用户继续拿旧 PUBLISHED
审计每个阶段都能看到操作人、时间、说明和来源版本。