Skip to main content
版本要求:此功能需要 On-call 标准版及以上订阅。了解更多
通过 Pulumi Cloud 的 Webhook,将 Stack 更新和 Pulumi Deployments 部署同步到 Flashduty On-call。每一次 Stack 更新(pulumi up、pulumi destroy)和每一次 Deployments 部署,各对应一条 Flashduty 变更。 Webhook 可以建在组织上(接收组织内所有 Stack 的事件),也可以建在单个 Stack 上。Flashduty 记录以下事件,其余事件返回成功但不生成变更:

在 Flashduty On-call


  1. 进入 Flashduty 控制台,选择 集成中心 → 变更事件
  2. 选择 Pulumi,填写集成名称
  3. 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如 project、stack)配置规则
  4. 点击 保存,复制生成的 推送地址

在 Pulumi Cloud 中配置


1

创建 Webhook

  • 组织 Webhook:进入 Settings → Organization webhooks
  • Stack Webhook:进入对应 Stack 的 Settings → Webhooks
点击 Create webhook。
2

填写推送地址

  1. Destination:选择 Webhook(通用 JSON 格式,不要选 Slack 或 Microsoft Teams)
  2. Display name:自定义名称
  3. Payload URL:粘贴 Flashduty 集成的完整推送地址
  4. Secret:留空即可,Flashduty 通过推送地址中的 integration_key 鉴权,不校验 Pulumi-Webhook-Signature
3

选择事件

在 Events 中按下面任一方式选择,不要两种都选(见下方“一条变更是什么”):
  • 只关心更新结果:update_succeeded、update_failed、destroy_succeeded、destroy_failed
  • 使用 Pulumi Deployments 并要看到排队、运行、结束的全过程:deployment_queued、deployment_started、deployment_succeeded、deployment_failed
点击 Create。

一条变更是什么


通过 Pulumi Deployments 执行的更新,Pulumi 会同时发出 deployment 和 stack_update 两类事件,它们是两个不同的对象,会生成两条变更。因此请只选择其中一类事件。 同一个 Stack 的两次更新是两条变更。更新编号和部署版本是 Pulumi 按 Stack 递增的编号,在同一个 Stack 内不会重复。

状态映射


Stack 更新(result): Deployments 部署(status): Pulumi 会把被取消的更新或部署报告为 failed,因此记录为 Failed。Done、Failed 和 Canceled 是结束状态,Flashduty 会记录变更结束时间。Pulumi 的 result 和 status 还可能出现 not started、requested、running 等值,Flashduty 分别记为 Ready 和 Processing;遇到其他值时推送返回错误。

变更内容


标签可用于路由和在变更列表中筛选: actor 和 operation 在同一条变更的不同通知里可能不一致,不要用它们做路由;路由请使用 organization、project、stack。

常见问题


Pulumi 的推送内容不包含时间,Flashduty 以收到通知的时间作为事件时间。因此在 Pulumi Cloud 里重新投递(Redeliver)同一条通知,会在变更下多记录一个事件,状态不变。Pulumi 不保证通知的先后顺序。如果某个 Deployments 部署的 running 通知晚于 succeeded 到达,变更会回到 Processing;这类情况很少出现,可以在 Pulumi Cloud 的投递记录中确认顺序。Stack 更新只推送一次结束结果,不受影响。
预览不改变基础设施,刷新只把云上现状同步回 Pulumi 状态,两者都不记录。pulumi preview 触发的 stack_preview 事件、Deployments 中的预览、刷新和漂移检测同理。
Pulumi 的 ping 事件会返回成功,不生成变更。
  • Pulumi-Webhook-Kind header is missing:请求不是来自 Pulumi Cloud Webhook,或中间的代理去掉了该请求头
  • updateUrl is missing / deploymentUrl is missing:推送内容不完整,请确认 Webhook 的 Destination 选择的是 Webhook,不是 Slack 或 Microsoft Teams
  • unsupported result "..." / unsupported status "...":收到了 Flashduty 尚未支持的状态,请联系我们