ERROR)时触发,之后同一分支的门禁再次通过(OK)时自动恢复。适用于 SonarQube Server(Community Build、Developer、Enterprise、Data Center)和 SonarQube Cloud,两者的 Webhook 内容一致。
在 Flashduty On-call
您可通过以下两种方式获取集成推送地址,任选其一即可。
使用专属集成
- 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
- 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
- 选择 SonarQube,点击 保存
- 打开生成的集成卡片,复制 推送地址
使用共享集成
- 进入 Flashduty 控制台,选择 集成中心 → 告警事件
- 选择 SonarQube,填写集成名称
- 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
- 点击 保存,复制生成的 推送地址
在 SonarQube 中配置
1
创建 Webhook
SonarQube Server:
- 以管理员身份登录,进入 Administration → Configuration → Webhooks 创建全局 Webhook,对所有项目生效;也可以进入某个项目的 Project Settings → Webhooks 只对该项目生效(每个项目最多 10 个)
- 点击 Create,填写名称
- 将 Flashduty 集成的完整推送地址粘贴到 URL,地址中需包含
integration_key - Secret 可以留空。填写后 SonarQube 会在每次请求中带上
X-Sonar-Webhook-HMAC-SHA256请求头,Flashduty 不校验该请求头,认证依靠地址中的integration_key
- 进入组织的 Administration → Webhooks(需要组织管理员权限)
- 点击 Create,填写名称,将推送地址粘贴到 URL
2
运行一次分析并验证
- 让 CI 对项目运行一次分析(例如
sonar-scanner),分析结束后 SonarQube 会推送一次 Webhook - 让质量门禁失败(例如临时调高覆盖率阈值),确认 Flashduty 出现一条告警
- 修复后再运行一次分析,门禁通过后确认该告警自动恢复
Alert Key
Alert Key 由项目 Key(
project.key)、分支类型(branch.type,如 BRANCH 或 PULL_REQUEST)和分支名(branch.name)共同计算,因此:
- 同一项目同一分支的失败和通过共用一个 Alert Key,门禁通过后原告警自动恢复
- 不同分支、不同 Pull Request、不同项目的告警互不影响
- 项目名称、质量门禁名称、分析 ID、提交等字段变化不会改变 Alert Key
- 不带分支信息的分析(不支持分支分析的版本)只按项目 Key 区分
project.key 的请求会被拒绝。
状态和告警等级
SonarQube 的 Webhook 不携带等级,质量门禁失败是代码质量信号而不是服务中断,因此统一使用 Warning。可以在 Flashduty 中通过路由或告警管理调整等级。
以下推送会被忽略,Flashduty 直接返回成功:分析失败或被取消的推送(
status 为 FAILED 或 CANCELLED,不含质量门禁)、不含 qualityGate 的推送,以及 qualityGate.status 为其他值的推送。
每次门禁通过的分析都会推送一次 OK,该事件只用于恢复同一项目和分支的活动告警。
标签
告警描述中列出每个未通过的条件:指标、当前值和阈值。
排查问题
- Flashduty 返回参数错误:确认 URL 完整且包含
integration_key - 没有收到告警:确认分析确实包含质量门禁结果;Server 版在 Webhooks 页面查看 Last delivery 的状态码,SonarQube Cloud 需要付费方案
- 告警没有恢复:恢复依赖同一项目和分支的下一次分析。合并请求(Pull Request)被关闭后不会再有分析,对应告警需要手动关闭
- SonarQube Server 无法访问 Flashduty:Webhook 由 SonarQube 服务端发出,确认服务端能访问外网,或已配置代理