本页说明 Dockrev 有哪些通知、各通知的 payload 字段格式、以及如何配置 实例 Public Base URL 以便在 Telegram / Email / Web Push / Webhook 中生成可点击的 Dockrev 实例链接。
用途:把站内相对路径(如 queue/{jobId})拼成可访问的绝对 URL(如 https://dockrev.example.com/queue/job_...)。
设置 -> 系统设置 -> 实例 Public Base URLGET /api/settings -> instance.publicBaseUrlPUT /api/settings -> instance.publicBaseUrlnull 或空字符串(清空配置)http:// 或 https:// 的绝对 URLtrim,并确保以 / 结尾(便于安全 join)links.*Url 仍会给出站内路径(以 / 开头)url 仍会是站内路径(浏览器可在当前 origin 下打开)| kind | schema | 触发条件(概述) |
|---|---|---|
job_finished |
dockrev.notification.job.v2 |
更新任务完成(成功/失败/回滚等)且未被过滤跳过 |
new_version_discovered |
dockrev.notification.new_version_discovered.v2 |
定时检查或 GHCR webhook 触发的检查发现新版本(按本次任务聚合) |
ghcr_webhook_anomaly |
dockrev.notification.ghcr_webhook_anomaly.v2 |
GHCR Webhook 定时巡检(audit_all)发现异常仓库(missing/conflict/error) |
notification_test |
dockrev.notification.test.v2 |
调用 POST /api/notifications/test 发送测试通知 |
Webhook 订阅方请始终以
schema分流解析(dockrev.notification.job.v2为 breaking 变更)。
路径:设置 -> 通知
事件级开关(独立控制):
更新完成通知:控制 job_finished发现新版本通知(定时 / Webhook 检查):控制 new_version_discoveredGitHub Webhook 异常通知(巡检):控制 ghcr_webhook_anomaly说明:
dockrev.notification.job.v2)顶层字段:
schema:固定为 dockrev.notification.job.v2kind:固定为 job_finishedsentAt:RFC3339 时间(字符串)channel:telegram / email / webhook / webPushjob:任务基础信息links:Dockrev 实例内的可访问链接(核心)human:面向人的中文标题/摘要/详情(用于渲染)debug:调试信息(版本、来源)job 字段(示例):
links 字段(示例):
Dockrev 会生成两类路径(总能生成):
/queue/{jobId}/services/{stackId}/{serviceId}当配置了 instance.publicBaseUrl 时,会生成对应绝对 URL;否则降级为站内路径。
primaryUrl 选择规则:
primaryUrl = serviceUrlprimaryUrl = jobUrl“可唯一定位到 1 个服务”的判定:
service 且任务记录有 serviceIdlinks.serviceUrls 最多保留 10 条links.truncated.serviceUrlsOmitteddockrev.notification.new_version_discovered.v2)触发条件:由定时检查更新任务或 GHCR webhook 触发的服务检查触发;当某次检查发现新的可更新服务时,按任务聚合发送。UI 手动 check 保持静默,不发送该通知。
发送时机、去重与生命周期:
success 终态;通知只在 dispatch 前等待,不回退任务终态snapshot_worker task_finished 明确事件后再统一重算 display tag;固定等待上限为 10 秒,只作为异常/缺失事件的兜底tags[] 仍无法给出可读版本,通知会额外尝试 OCI org.opencontainers.image.version 作为 display tag 兜底;raw tag 字段保持兼容不变serviceId + candidateDigestpending / sent 状态会阻止重复通知imageRef:imageTag 改变时,旧 active 记录会转成 supersededfailed,后续任务仍可重试关键字段:
check.jobId:对应检查任务 IDcheck.servicesChecked:本次检查覆盖的服务数check.newVersions:本次发现新版本的服务数links.jobUrl:任务详情页(/queue/{jobId})links.serviceUrls[]:服务详情链接(/services/{stackId}/{serviceId})links.serviceUrls[].currentTag / candidateTag:保留 raw tag,兼容既有 webhook 消费方links.serviceUrls[].currentDisplayTag / candidateDisplayTag:优先级为 snapshot 推断 > 已冻结/活体 resolved tag > OCI explicit version > raw tag;若最终仍不可读,raw 字段仍保持不变links.primaryUrl:若仅 1 个服务则指向服务详情,否则指向任务详情human.title:用于 Email subject / Web Push title 的精简标题;单服务为服务名,多服务为聚合计数human.summary:只收敛人类可读文案,不改变 schema version摘要 / 人类可读渲染规则:
blog / api 服务有新版本(1.0.0 -> 1.1.0)。blog / api 服务有新版本(1.0.0 -> latest)。blog / api 服务有新版本。(不会发送 latest -> latest)渠道渲染规则:
某服务有新版本... 和一个 服务详情 动作;不再显示泛标题、标题尾 详情、服务清单 或重复链接列表title 使用 human.title 的精简标题,body 直接等于 human.summary,点击目标仍使用 links.primaryUrl截断规则:
links.serviceUrls 最多 10 条links.truncated.serviceUrlsOmitteddockrev.notification.ghcr_webhook_anomaly.v2)触发条件:仅由 GHCR Webhook 定时巡检(audit_all)触发;当巡检结果出现 missing/conflict/error 时聚合发送。
关键字段:
job.id:对应巡检任务 IDjob.missing/conflict/error:异常统计links.settingsUrl:设置页(用于修复配置)links.jobUrl:任务详情页(查看巡检日志)links.primaryUrl:默认等于 links.jobUrl(Web Push 点击目标)links.repos[]:异常仓库列表(含状态与错误节选)截断规则:
links.repos 最多 10 条links.truncated.reposOmitted示例(摘要):
Dockrev:GitHub Webhook 巡检异常巡检发现 2 个异常仓库:acme/api [missing]、acme/worker [error]。https://dockrev.example.com/queue/job_...Dockrev:GitHub Webhook 巡检异常 任务(可点击)dockrev.notification.test.v2)schema:固定为 dockrev.notification.test.v2kind:固定为 notification_testsentAt / channel:同上url:用于演示“可点击链接”的示例 URL(默认指向设置页 /settings)human:标题/摘要/详情debug:包含 requestedChannel、rawMessage 等当通过 Web Push 渠道发送时,payload 顶层会额外包含:
title:通知标题body:通知正文(纯文本)url:点击后打开的 URL(等同于上面的 url 或 links.primaryUrl)Service Worker(web/public/sw.js)会优先读取 data.url 并打开。
<pre>,可能截断)示例(单服务变更):
[dockrev] 更新完成(成功)直接 POST 对应 schema 的 JSON:
dockrev.notification.job.v2dockrev.notification.new_version_discovered.v2dockrev.notification.ghcr_webhook_anomaly.v2dockrev.notification.test.v2title / body / url 顶层字段齐全url(根据事件可能指向服务详情 / 任务详情 / 设置页)实例 Public Base URL(例如 https://dockrev.example.com/)url/links.primaryUrl 合规