目标
没有版本标签的错误报告可能来自任何跑过的代码。给每次部署打上 release、让 SDK 自动上报它、并在图表上标记部署时刻,错误流就升级成带版本的证据。收益是速度:部署后几分钟内出现在 newGroups 里的回归有明显的嫌疑人和明显的回滚对象,而不是“周二之谜”。
步骤要点
- CI 里以 git 短 SHA 作为版本名,部署前先调 API 创建 release 并挂上 commit 引用。
- 应用初始化 Sentry.init({ release: env.SENTRY_RELEASE }),此后每条错误自动携带版本与环境。
- 流量切换的同一步骤里调用 releases/…/deploys/ 通知部署事件,错误图表出现垂直部署标记。
- 部署后 15 分钟查看该 release 的 newGroups(新错误签名数),这就是“这版有没有弄坏东西”的裁决。
- 配置规则:部署后一小时内新错误激增即通知该 release 的负责人而非全组。
排错提示
错误没有 release 标签多半是 SDK 初始化早于环境变量就绪,把变量放到进程启动时或显式传参;CI 与应用侧版本名不一致就统一在 CI 生成一次并同时下发,别让应用自己算版本串;图表缺部署标记说明通知被跳过或环境名不同,把调用放进切流量的同一步骤。
适用边界
归因依赖所有服务上报同一个 release 标识,一个不一致就会把信号打散;相关不等于因果,部署标记只是把周二尖峰放进了上下文。
代码示例
# CI: create the release before deploying
SENTRY_RELEASE=$(git rev-parse --short HEAD)
curl -X POST "https://sentry.io/api/0/organizations/acme/releases/" \
-H "Authorization: Bearer $SENTRY_TOKEN" \
-d '{"version": "'$SENTRY_RELEASE'"}'
# Runtime: every error inherits the tag
Sentry.init({ release: process.env.SENTRY_RELEASE });