在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 GrowthBook,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
feature_id)配置规则 - 点击 保存,复制生成的 推送地址
在 GrowthBook 中配置
1
新建 Event Webhook
- 以管理员身份登录 GrowthBook,进入 Settings → Webhooks
- 点击 New Event Webhook,填写 Webhook Name(必填)
2
填写推送地址
- Payload Type:选择 JSON。Raw (Legacy) 是旧格式,不会推送修订事件
- Method:保持
POST - Endpoint URL:粘贴 Flashduty 集成的完整推送地址
- Headers:无需填写,Flashduty 通过推送地址中的
integration_key鉴权。GrowthBook 会在请求头X-GrowthBook-Signature中附带签名,Flashduty 不校验该签名
3
选择事件和范围
- Events:勾选以下事件,其余事件会被忽略
feature.revision.reviewRequested、feature.revision.changesRequested、feature.revision.approvedfeature.revision.published、feature.revision.revertedfeature.revision.discarded、feature.revision.publishFailed
- Environments、Projects、Tags:不选表示全部,也可以只选生产环境等需要关注的范围
- 点击 Create
feature.revision.* 通配符:GrowthBook 以后新增的修订事件会被 Flashduty 拒绝(见下文常见问题)。feature.updated 等 Feature 自身的事件订阅了也会被忽略。feature.revision.* 事件。保存前可在创建窗口中点击 Test Connection:它发送不含 event 字段的请求体,Flashduty 返回 200 且不生成变更。当前版本中,已保存的 Webhook 没有 Test 按钮。之后在任一 Feature 上发布一次修订,即可在 Flashduty 变更列表中看到记录。
一条变更是什么
Feature ID 创建后不可修改,修订版本号在同一个 Feature 内递增。如果删除某个 Feature 后又用相同的 ID 重新创建,版本号会从头开始,新的修订会与旧 Feature 中版本号相同的变更合并。
状态映射
未开启审核流程时,发布只推送
published,变更从出现起就是 Done。
以下推送返回成功但不生成变更:
- 不改变修订进展的修订事件:
created、updated、rebased、commented、reopened、recalled、reviewRetracted、publishScheduleChanged feature.created、feature.updated、feature.deleted等 Feature 自身的事件、安全发布(Safe Rollout)、渐进发布(Ramp Schedule)、实验(Experiment)、分群等其他资源的事件- Test Connection 发出的测试请求,以及缺少
event的推送
feature.revision.* 事件,在加入上表之前会返回 InvalidParameter,不会生成变更。
变更内容
标签可用于路由和在变更列表中筛选:
state、actor、event_type 会随每个事件更新,不要用它们做路由;请使用每个事件都有的 feature_id。项目、环境等范围因事件而异,Flashduty 不记录。
常见问题
GrowthBook 重试推送会重复记录吗?
GrowthBook 重试推送会重复记录吗?
不会。GrowthBook 在返回非 200 时最多推送 3 次。Flashduty 使用事件自身的时间(
created)作为变更时间,同一事件重复推送只记录一次,迟到的旧状态也不会覆盖已经结束的变更。为什么发布了修订,变更列表里没有对应的审核记录?
为什么发布了修订,变更列表里没有对应的审核记录?
只有开启了审核流程的 Feature 才会产生
reviewRequested 和 approved。直接发布的修订只有一个 published 事件。推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
data.object.featureId is missing、data.object.version is missing:推送内容不完整。请确认 Payload Type 选择了 JSONcreated is missing or invalid:推送缺少事件时间unknown revision event:GrowthBook 推送了尚未支持的修订事件,请只勾选上文列出的事件- 请求体不是 JSON:请确认 Payload Type 选择了 JSON