Skip to main content
版本要求:此功能需要 On-call 标准版及以上订阅。了解更多
通过 TeamCity 服务器的内置 Webhook,将构建(Build)的状态同步到 Flashduty On-call。每个构建对应一条 Flashduty 变更,随构建经历排队、运行、结束而更新状态。 TeamCity 的 Webhook 在服务器级别配置,推送的是项目下所有构建配置(Build Configuration)的构建。如果只想记录部署类构建配置,把 Webhook 参数设置在包含这些构建配置的项目上,而不是根项目上,参见下文配置步骤。

在 Flashduty On-call


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

在 TeamCity 中配置


1

添加 Webhook 参数

Webhook 由项目参数控制,子项目继承父项目的设置。在 TeamCity 中打开要记录的项目(记录全部构建则打开根项目 Root project),进入 Parameters,添加以下参数:只需要结束状态时,把 events 设为 BUILD_FINISHED;BUILD_INTERRUPTED;BUILD_REMOVED_FROM_QUEUE。Flashduty 通过推送地址中的 integration_key 鉴权,无需配置 teamcity.internal.webhooks.username 和 teamcity.internal.webhooks.password。
2

指定推送字段

TeamCity 默认推送完整的 Build 对象,但文档没有列出默认包含哪些字段。为了让变更带上各状态的时间、构建配置名称和触发人,为每个事件各添加一个 teamcity.internal.webhooks.<事件>.fields 参数,<事件> 依次为 BUILD_TYPE_ADDED_TO_QUEUE、BUILD_STARTED、BUILD_FINISHED、BUILD_INTERRUPTED、BUILD_REMOVED_FROM_QUEUE,值都为:
id 是必需的。缺少日期字段时,Flashduty 以收到推送的时间作为变更时间,状态顺序按到达先后决定,TeamCity 重发同一推送时可能记录为重复事件。
3

运行一次构建

TeamCity 没有测试推送。在配置了 Webhook 的项目下运行一次构建,结束后即可在 Flashduty 变更列表中看到记录。

一条变更是什么


状态映射


TeamCity 取消运行中的构建触发 BUILD_INTERRUPTED,取消仍在排队的构建触发 BUILD_REMOVED_FROM_QUEUE(带 canceledInfo),两者都不触发 BUILD_FINISHED。构建从队列进入运行时也会发送不带 canceledInfo 的 BUILD_REMOVED_FROM_QUEUE,它不会产生变更。 以下推送返回成功但不生成变更:
  • 其他事件类型,例如 AGENT_REGISTERED、AGENT_UNREGISTERED、AGENT_REMOVED、CHANGES_LOADED、BUILD_PROBLEMS_CHANGED

变更内容


标签可用于路由和在变更列表中筛选:

常见问题


不会,前提是推送带有日期字段(见上文“指定推送字段”):Flashduty 以各状态的时间去重,相同的推送只记录一次。
  • payload.id is missing:推送内容里没有构建 ID,请确认 fields 参数包含 id
  • unknown payload.status:BUILD_FINISHED 带来了未收录的状态值,请联系我们补充映射
  • invalid payload.<字段>:日期字段不是 TeamCity 的 yyyyMMdd'T'HHmmssZ 格式
  • 确认 teamcity.internal.webhooks.enable 为 true,参数设置在构建所属的项目或其父项目上
  • 确认 teamcity.internal.webhooks.events 包含需要的事件
  • 在 TeamCity 服务器日志中查看推送是否失败,可用 teamcity.internal.webhooks.retry_count 设置失败重试次数
TeamCity 不按构建配置类型过滤 Webhook。把 Webhook 参数设置在只包含部署构建配置的项目上,或用 Flashduty 集成的路由按 build_type_id 标签分派。