在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Scalr,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
environment、workspace)配置规则 - 点击 保存,复制生成的 推送地址
在 Scalr 中配置
Webhook 在 Account 范围创建,再分配给 Environment;分配后,该 Environment 下所有 Workspace 的 Run 都会触发它。
1
创建 Webhook
在 Account 范围进入 Integrations → Events Forwarding → Webhook,创建 Webhook(也可以用 Scalr API 或 Terraform Provider 的
scalr_webhook 资源):- URL:粘贴 Flashduty 集成的完整推送地址
- Events:勾选
run:completed、run:errored和run:needs_attention - Secret key:必填,可点击 Generate 生成,也可填写任意字符串。Scalr 用它对请求签名,Flashduty 通过推送地址中的
integration_key鉴权,不校验签名
2
分配给 Environment
新建的 Webhook 默认开启 Allow all current and future environments to have access to this webhook,无需再分配。如需限定范围,在 Webhook 的 Environments access 页签关闭该开关,再选择需要接入的 Environment。
一条变更是什么
Scalr 只在三种时刻推送:Run 需要人工确认、Run 成功结束、Run 出错。取消 Run、或在确认步骤放弃(Discard)Run 不会推送任何内容,这样的 Run 变更会停留在 Planned(或根本不会创建)。因此变更没有 Ready、Processing 状态,最早出现的状态是 Planned(等待确认)或结束状态。自动 Apply 的 Run 只会在结束时产生一条记录。
状态映射
结束事件按 Run 状态映射:
applied 为 Done,errored 为 Failed(结束事件若携带 canceled 或 discarded 状态则为 Canceled,但 Scalr 不会推送)。Done 和 Failed 是结束状态,Flashduty 会记录变更结束时间。
以下推送返回成功但不生成变更:Run 状态为 planned_and_finished 的结束事件(只做了 Plan 或没有资源变更,没有内容被应用),以及不属于 run: 系列的其他事件。
变更内容
标签可用于路由和在变更列表中筛选:
Run 的变量(
variables)和用户邮箱不会记录。
常见问题
为什么没有收到变更?
为什么没有收到变更?
- 确认 Webhook 已启用,并已分配给 Run 所在的 Environment
- 确认勾选了
run:completed、run:errored和run:needs_attention - 在 Webhook 的 Deliveries 页签查看推送记录和 Flashduty 的响应,也可以从这里重新发送
- 只做 Plan 的 Run(Dry run,没有内容被应用)成功时不会生成变更
Dry run(Plan)失败会生成变更吗?
Dry run(Plan)失败会生成变更吗?
会。Scalr 的推送内容不区分 Dry run 与 Apply Run,Plan 阶段出错的 Run 会以
run:errored 推送,Flashduty 记为 Failed 变更。可以用 source 标签辅助区分,例如 VCS 拉取请求触发的 Run。重复推送会重复记录吗?
重复推送会重复记录吗?
不会。同一 Run、同一状态、同一时间的事件只记录一次,从 Deliveries 重新发送不会新增记录。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
unsupported event-name或unsupported run.status:收到了 Flashduty 尚未支持的事件或 Run 状态,请联系我们run.id is missing或event-name is missing:推送内容不完整,请确认推送来自 Scalr 的 Webhook