api:release,将应用的发布(Release)同步到 Flashduty On-call。每个 Release 对应一条 Flashduty 变更,随 Release 从进行中到成功或失败更新状态。代码部署、配置变量修改、Add-on 变更和回滚都会在 Heroku 中产生新的 Release,因此都会被记录。
在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Heroku,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
app)配置规则 - 点击 保存,复制生成的 推送地址
在 Heroku 中配置
1
创建应用 Webhook
使用 Heroku CLI 为目标应用创建订阅,
<推送地址> 替换为 Flashduty 集成的完整推送地址:-i api:release:只订阅 Release 事件。其他事件(构建、Dyno、域名等)不会生成变更,无需订阅-l sync:推送失败时 Heroku 自动重试,最长 72 小时;notify级别不重试- 不需要
-s(签名密钥)和-t(Authorization 请求头)
api:release。Heroku 的 Webhook 按应用配置,Pipeline 内的多个应用需要分别创建。Flashduty 通过推送地址中的 integration_key 鉴权。Heroku 在请求中附带的 Heroku-Webhook-Hmac-SHA256 签名头不会被校验。2
触发一次发布
Heroku 没有测试推送。执行一次
git push heroku main,或修改一个配置变量(heroku config:set KEY=value),即可在 Flashduty 变更列表中看到该应用的 Release。一条变更是什么
Release 的版本号(
v12)只在应用内唯一,不作为标识,仅出现在标题和 version 标签中。
状态映射
以下推送返回成功但不生成变更:
resource不是release的推送:构建(api:build)、应用、Dyno、Formation、域名、协作者、Add-on、SNI endpoint- Release 的
create、update之外的动作
data.status 为上表之外的值时,推送返回 InvalidParameter(见常见问题)。
变更内容
标题和描述取自这条变更的第一次推送,之后不再更新。
标签可用于路由和在变更列表中筛选:
Heroku 推送只用邮箱标识触发 Release 的用户,邮箱不会写入标签,因此没有
actor 标签。
常见问题
Heroku 重试推送会重复记录吗?
Heroku 重试推送会重复记录吗?
不会。重试的内容相同,Flashduty 以推送中的时间和状态去重;较早的状态晚到,也不会覆盖已经结束的变更。
为什么 git push 后没有看到构建的变更?
为什么 git push 后没有看到构建的变更?
构建不生成变更,见上文。构建成功后产生的 Release 会生成变更;构建失败时没有 Release,也就没有变更,请在 Heroku 的构建日志中排查。
为什么配置变量修改也出现了变更?
为什么配置变量修改也出现了变更?
在 Heroku 中修改配置变量会创建新的 Release,应用会用新配置重启,这是一次真实的变更。变更描述只包含变量名,Flashduty 不会收到变量值。
Heroku 提示推送失败或停止推送?
Heroku 提示推送失败或停止推送?
Heroku 连续一周推送失败会发邮件通知并可能停用该 Webhook。请确认推送地址完整,且集成未被删除。可在
heroku webhooks:deliveries -a <应用名> 查看投递状态。推送返回 InvalidParameter 错误?
推送返回 InvalidParameter 错误?
data.id is missing:推送内容不完整,请确认推送来自 Heroku 原生 Webhook,且订阅的是api:releasedata.status is missing/unknown release status:出现了未收录的 Release 状态,请联系我们补充映射invalid timestamp:推送中的时间字段格式不正确