在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Railway,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
project、service、environment)配置规则 - 点击 保存,复制生成的 推送地址
在 Railway 中配置
1
打开项目的 Webhooks 设置
- 在 Railway 中打开目标项目,点击项目顶部导航中的 Settings
- 在左侧选择 Webhooks,点击 Create Webhook
2
填写推送地址与事件
- 在 URL 输入框中粘贴 Flashduty 集成的完整推送地址
- 打开 Event Types 列表,选择 Deployment 相关状态:Queued、Waiting、Needs Approval、Building、Deploying、Deployed、Redeployed、Failed、Crashed(Removed、Restarted、Oom Killed、Slept、Resumed 可以选择,但不会生成变更)
- 点击 Create Webhook
integration_key 鉴权,无需配置自定义请求头。3
发送测试
创建前可点击 Test Webhook,Railway 会发送一条存储卷用量告警的示例推送(
VolumeAlert.triggered),Flashduty 返回成功且不生成变更。之后在项目中触发一次部署,即可在 Flashduty 变更列表中看到记录。一条变更是什么
状态映射
Flashduty 以推送中的
type(Deployment.<状态>)为准判断状态,不读取 details.status。Railway 官方 Webhook 文档本身存在不一致:Deployment.failed 的示例里 details.status 却是 SUCCESS。Railway 实际发出的推送中,Deployment.failed 对应的是 FAILED,但既然文档示例显示两个字段可能互相矛盾,仍只以 type 为准。
以下推送返回成功但不生成变更:
Deployment.removed、Deployment.removing:旧部署被新部署替代或被手动移除,不是这次部署的进展。新部署生效后,Railway 会紧接着以旧部署的 ID 发送该推送Deployment.restarted、Deployment.oomKilled、Deployment.slept、Deployment.resumed:运行期事件- 存储卷用量、CPU/内存监控等告警类事件(
type不以Deployment.开头)
Deployment. 开头但不在上表和上述列表中的 type,推送返回 InvalidParameter(见常见问题)。
变更内容
标题和描述取自这条变更的第一次推送,之后不再更新。
标签可用于路由和在变更列表中筛选:
ref、sha、actor 并非每次推送都有,按它们路由可能把同一次部署的后续状态分到其他协作空间。路由请使用 workspace、project、service、environment。
常见问题
Railway 重试推送会重复记录吗?
Railway 重试推送会重复记录吗?
不会。Railway 在非 2xx、3xx 响应或超时后最多重试 3 次,内容相同,Flashduty 以推送中的
timestamp 去重。Railway 不保证推送顺序,Flashduty 按 timestamp 排序,较早的状态晚到不会覆盖已结束的变更。为什么被取消的部署一直是 Processing?
为什么被取消的部署一直是 Processing?
在 Railway 中中止(Abort)构建中的部署会把它标记为 Removed,Flashduty 不记录 Removed 推送,因此这类变更停留在最后收到的状态。
为什么部署成功后又变成 Failed?
为什么部署成功后又变成 Failed?
部署成功后服务运行中崩溃,Railway 会发出
Deployment.crashed,Flashduty 把同一条变更更新为 Failed。Railway 提示推送失败或停止推送?
Railway 提示推送失败或停止推送?
Railway 在 6 小时内连续失败 100 次后会暂停该地址 24 小时。请确认推送地址完整,且集成未被删除。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
resource.deployment.id is missing:推送内容不完整,请确认推送来自 Railway 原生 Webhookunknown type:出现了未收录的部署状态,请联系我们补充映射invalid timestamp:推送中的时间字段格式不正确