Skip to main content
版本要求:此功能需要 On-call 标准版及以上订阅。了解更多
通过 Rundeck 作业(Job)的 Webhook 通知,将作业的执行同步到 Flashduty On-call。每一次执行对应一条 Flashduty 变更;执行开始和结束时,都会更新同一条变更。 Rundeck 无法区分一个作业是否会改变线上环境,因此只需在执行发布、变更类操作的作业上配置通知,不要在只读的巡检类作业上配置。

在 Flashduty On-call


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

在 Rundeck 中配置


1

打开作业的通知设置

打开要同步的作业,点击 Edit,切换到 Notifications 页签。
2

添加 Webhook 通知

分别为 On Start、On Success、On Failure 和 On Retryable Failure 添加通知,类型选择 Send Webhook:
  1. URL(s):填写 Flashduty 集成的完整推送地址
  2. Payload Format:选择 JSON。Rundeck 的默认格式是 XML,Flashduty 不接受
  3. Method:选择 POST
四个触发点都需要配置:On Start 让变更在执行开始时出现;On Success 和 On Failure 给出结束状态;作业设置了重试(Retry)时,失败的那一次执行只发送 On Retryable Failure,不发送 On Failure,缺少它变更会一直停在 Processing。通知也可以写在作业定义文件(YAML 或 XML)的 notification 段中,由 rd jobs load 或项目导入生效。
3

运行一次作业

保存后运行一次作业,在 Flashduty 的变更列表中即可看到对应的变更。Webhook 通知没有测试按钮。Rundeck 向 Flashduty 推送失败时,只在 Rundeck 服务日志中记录 Notification failed,Flashduty 拒绝的推送不会显示在作业页面。

一条变更是什么


每一次作业执行是一条变更,变更标识(change_key)为 Rundeck 的执行 ID(execution id),例如 4711。
  • 同一次执行的开始、结束通知更新同一条变更
  • 同一作业的两次执行是两条变更
  • 作业失败后自动重试,每次重试是一次新的执行,因此是一条新的变更
  • 执行 ID 在一个 Rundeck 服务内唯一。多个 Rundeck 服务请分别创建集成,否则不同服务上相同的执行 ID 会被合并为一条变更

状态映射


Done、Failed 和 Canceled 是结束状态,Flashduty 会记录变更结束时间。 On Average Duration Exceeded 报告的是仍在运行的执行,不是新的阶段,Flashduty 接收但不记录。

变更内容


标签可用于路由和在变更列表中筛选: 作业选项(Option)的值可能包含敏感信息,不会被记录。

常见问题


  • 确认 Payload Format 选择的是 JSON
  • 确认 On Start、On Success、On Failure、On Retryable Failure 都添加了通知
  • 只有作业(Job)的执行才会触发通知;从 Commands 页面直接运行的临时命令(ad hoc)不发送
  • 在 Rundeck 服务日志中搜索 Notification failed,查看推送失败的原因
结束通知没有送达。常见原因是作业配置了重试却没有添加 On Retryable Failure,或 Rundeck 到 Flashduty 的网络不通。Rundeck 只对每次通知尝试一次,失败后不会重发。
Flashduty 在以下情况拒绝推送:
  • must use format JSON:通知的 Payload Format 选择了 XML
  • execution is missing 或 execution.id is missing:推送内容缺少执行信息,请确认推送来自 Rundeck 的 Webhook 通知
  • unsupported status:收到了 Flashduty 尚未支持的执行状态,例如作业返回了自定义状态(other),请联系我们