在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Apollo,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
app_id、environment、namespace)配置规则 - 点击 保存,复制生成的 推送地址
在 Apollo 中配置
Apollo 从 1.8.0 版本开始支持配置发布 Webhook。配置项存放在
ApolloPortalDB.ServerConfig 表中,也可以在 Apollo Portal 的 管理员工具 → 系统参数 页面修改,修改后约一分钟生效。
1
指定要推送的环境
新增或修改配置项 环境名以 Portal 中实际的环境名为准,例如快速启动(all-in-one)镜像的环境名是
webhook.supported.envs,值为开启 Webhook 的环境列表,多个环境以英文逗号分隔:LOCAL。2
填写推送地址
新增或修改配置项 请原样粘贴 Flashduty 显示的推送地址。推送地址把集成 key 放在路径里,而不是
config.release.webhook.service.url,值为 Flashduty 的 推送地址:?integration_key= 查询参数,因为 Apollo 会在配置的地址末尾追加 ?env=<环境>,如果地址里已有查询参数,集成 key 会被破坏,推送无法通过鉴权。Flashduty 用 env 参数区分环境,请不要在地址末尾自行添加查询参数。3
验证
Apollo 没有测试推送:在 Portal 中对任一已开启 Webhook 的环境发布一次配置,即可在 Flashduty 变更列表中看到记录。
一条变更是什么
一条变更对应 Apollo 的一次发布操作,变更标识(change_key)为
<环境>/<发布历史 ID>,例如 PRO/1234。
发布历史 ID 是 Apollo 为每次发布操作生成的记录 ID,同一个环境内不重复,不同环境的 ID 可能相同,因此标识中带有环境名。
不使用推送内容中的 releaseId 作为标识:回滚时 Apollo 推送的 releaseId 是回滚后生效的那个旧版本的 ID,与该版本当初发布时推送的 releaseId 相同。以 releaseId 区分会把回滚合并进旧的发布记录。
同一个命名空间的两次发布是两条变更;发布后回滚也是两条变更。
状态映射
Apollo 推送的
operation 决定变更的类型,状态为 Done(废弃的发布除外,见表后说明):
推送中
isReleaseAbandoned 为 true 时(该次发布对应的版本已被废弃),变更状态为 Canceled。
出现以上四种之外的 operation 值时,推送返回 InvalidParameter,不生成变更。
变更内容
标签可用于路由和在变更列表中筛选:
常见问题
为什么看不到配置项的内容?
为什么看不到配置项的内容?
Apollo 的推送内容带有发布后的全部配置,其中可能有密码和令牌。Flashduty 不解析这部分内容,变更中不包含任何配置项的 key 或 value。如需知道改了什么,请在 Apollo Portal 的发布历史中查看。
灰度发布规则的修改会生成变更吗?
灰度发布规则的修改会生成变更吗?
不会。Apollo 只在正常发布、回滚、灰度发布和全量发布完成时推送,修改灰度规则不推送。
Apollo 推送失败会重试吗?
Apollo 推送失败会重试吗?
不会。Apollo 对每个推送地址只发送一次,失败时只在 Portal 日志里记录错误。如果一次推送丢失,对应的发布不会出现在 Flashduty 中。
推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
env is missing:请求中没有env参数。请确认config.release.webhook.service.url的值是 Flashduty 显示的推送地址,没有额外添加查询参数id is missing:推送内容不完整,请确认推送来自 Apollo Portal 的配置发布 Webhookoperation is missing或unknown operation:推送中的operation缺失或不在0、1、2、4之内invalid releaseTime:推送中的发布时间格式不正确
Notify webHook server failed 获取失败信息。多个环境共用一个集成可以吗?
多个环境共用一个集成可以吗?
可以。变更标识中带有环境名,不同环境的发布不会合并。如果想把不同环境分派到不同协作空间,可以在集成的路由中按
environment 标签配置规则。