在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 TeamCity,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
project、build_type_id、ref)配置规则 - 点击 保存,复制生成的 推送地址
在 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
变更内容
标签可用于路由和在变更列表中筛选:
常见问题
TeamCity 重发推送会重复记录吗?
TeamCity 重发推送会重复记录吗?
不会,前提是推送带有日期字段(见上文“指定推送字段”):Flashduty 以各状态的时间去重,相同的推送只记录一次。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
payload.id is missing:推送内容里没有构建 ID,请确认fields参数包含idunknown 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 标签分派。