在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Bitbucket,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
repo、build_key)配置规则 - 点击 保存,复制生成的 推送地址
在 Bitbucket 中配置
1
添加 Webhook
进入仓库的 Repository settings → Webhooks,点击 Add webhook。需要仓库管理员权限。
2
填写推送地址
- Title:填写便于识别的名称,例如
Flashduty - URL:粘贴 Flashduty 集成的完整推送地址
- Status:保持 Active
3
选择触发事件
- 在 Triggers 中选择 Choose from a full list
- 展开 Repository,勾选 Build status created 和 Build status updated
- 点击 Save 保存
一条变更是什么
Bitbucket 的构建状态没有单独的 ID,它由“仓库 + 提交 + 状态 key”三个值唯一确定(对应 API 路径
/commit/<hash>/statuses/build/<key>)。Flashduty 的变更标识(change_key)是 <仓库 uuid>/<提交哈希>/<状态 key>,同一构建状态的 created 和 updated 事件更新同一条变更。
- 同一提交上不同 key 的构建状态(例如单测和 lint 两个检查)是两条变更
- 同一 key 在不同提交上是两条变更;Bitbucket Pipelines 每次运行使用各自的 key
- 第三方 CI 若在同一提交上反复使用同一个 key(例如重新运行),Bitbucket 会覆盖原状态,Flashduty 中表现为同一条变更重新回到进行中,再次结束时更新为新的最终状态
状态映射
Flashduty 按推送内容中的
commit_status.state 确定状态:
Done、Failed 和 Canceled 是结束状态,Flashduty 会记录变更结束时间。STOPPED 出现在 Bitbucket REST API 的状态枚举中,Webhook 文档只列出前三个状态。
以下推送返回成功但不生成变更:
repo:push、Pull Request、评论等非构建状态事件,以及类型不是 build 的状态。
变更内容
推送内容不包含分支信息,因此没有分支标签。标签可用于路由和在变更列表中筛选:
常见问题
为什么没有收到构建变更?
为什么没有收到构建变更?
- 确认 Webhook 勾选了 Build status created 和 Build status updated,只勾选 Push 等事件不会产生变更
- 在 Webhook 的 View requests 中查看最近的推送和 Flashduty 的响应
- 确认仓库的流水线或 CI 确实在提交上发布了构建状态
重复推送会重复记录吗?
重复推送会重复记录吗?
不会。同一状态、同一更新时间的事件只记录一次。Bitbucket 在推送失败时最多再重试两次,重试的内容不会新增事件。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
unsupported commit_status.state:收到了 Flashduty 尚未支持的构建状态,请联系我们repository.uuid is missing、commit_status.key is missing、commit_status.links.commit.href is missing the commit hash:推送内容不完整,请确认推送来自 Bitbucket Cloud 的仓库 Webhook