done)时推送通知,没有开始事件,因此变更没有 Processing 中间状态,直接记录为结束状态:Done、Failed 或 Canceled。
在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Semaphore,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
project、ref、pipeline)配置规则 - 点击 保存,复制生成的 推送地址
在 Semaphore 中配置
1
创建通知
在 Semaphore 控制台进入 Notifications,创建新的通知(Notification),添加一条规则(Rule):
- Name:填写便于识别的名称,例如
Flashduty - Filters(可选):按项目(Projects)、分支(Branches)、Tag(Tags)、Pipeline 文件(Pipelines)、结果(Results)过滤。留空表示不限制;Results 可选值为
passed、failed、stopped、canceled,建议留空,让四种结果都推送 - Webhook endpoint:粘贴 Flashduty 集成的完整推送地址
- Secret name:填写的是 Semaphore 中已有 Secret 的名称,不是自由文本,留空即可。Flashduty 通过推送地址中的
integration_key鉴权,不校验X-Semaphore-Signature-256
2
调整超时与重试(建议)
Semaphore 默认的响应超时为 500 毫秒,且不重试。Flashduty 响应较慢时,这次推送会被记为失败且不会补发。建议用
sem edit notification flashduty 在 webhook 配置中加上:retries 只在超时时重试,重试沿用同一个推送内容,Flashduty 不会重复记录。3
运行一次 Pipeline
Semaphore 没有测试推送。在配置了通知的项目上运行一次 Pipeline,结束后即可在 Flashduty 变更列表中看到记录。
一条变更是什么
状态映射
以下推送返回成功但不生成变更:
pipeline.state不是done的推送
变更内容
标签可用于路由和在变更列表中筛选:
常见问题
为什么看不到 Pipeline 的运行中状态?
为什么看不到 Pipeline 的运行中状态?
Semaphore 的 Webhook 通知只在 Pipeline 结束时发送,不推送开始事件。变更在 Pipeline 结束时以最终状态出现。
Semaphore 重试推送会重复记录吗?
Semaphore 重试推送会重复记录吗?
不会。重试使用同一个推送内容,Flashduty 以 Pipeline 结束时间去重,只记录一次。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
pipeline.id is missing:推送内容不完整,请确认推送来自 Semaphore 的 Webhook 通知unknown pipeline.result:出现了未收录的 Pipeline 结果值,请联系我们补充映射invalid pipeline.done_at:推送中的时间字段格式不正确
没有看到变更?
没有看到变更?
- 通知只发送给对项目有访问权限的用户创建的规则,请确认创建通知的用户至少是该项目的成员
- 检查规则的过滤条件是否排除了该项目、分支或结果
- 在 Semaphore 中默认的 500 毫秒超时可能不足以等到响应,参见上文调整超时与重试