发布与健康
了解如何配置 SDK 以向 Sentry 报告你的发布版本。
发布是你部署到 环境 的代码版本。当你向 Sentry 提供关于发布的信息时,你可以:
- 确定新发布中引入的问题和回归
- 预测哪个提交导致了问题以及谁可能是责任人
- 通过在提交消息中包含问题编号来解决问题
- 在代码部署时接收电子邮件通知
此外,发布用于应用 源映射 到压缩的 JavaScript 代码,以便查看原始的、未转换的源代码。
在初始化 SDK 时包含一个发布 ID(通常称为“版本”)。
发布名称不能:
- 包含换行符、制表符字符、正斜杠(
/
)或反斜杠(\
) - 完全为句号(
.
)、双句号(..
)或空格( ) - 超过 200 个字符
值可以是任意的,但我们建议使用以下命名策略之一:
- 语义化版本控制:
package@version
或package@version+build
(例如,my.project.name@2.3.12+1234
) package
是项目的唯一标识符(iOS 上的CFBundleIdentifier
,Android 上的packageName
)version
是类似 semver 的结构<major>.<minor?>.<patch?>.<revision?>-<prerelease?>
(iOS 上的CFBundleShortVersionString
,Android 上的versionName
)build
是标识应用程序迭代的数字(iOS 上的CFBundleVersion
,Android 上的versionCode
)- 提交 SHA:如果你使用像 Git 这样的版本控制系统,我们建议使用标识哈希(例如,提交 SHA,
da39a3ee5e6b4b0d3255bfef95601890afd80709
)。你可以让 Sentry CLI 自动确定支持的版本控制系统的哈希。更多内容请参阅我们的 Sentry CLI 文档。
发布在整个组织中是全局的;为了便于区分,请使用项目特定的前缀。
某些功能的行为取决于项目是否使用语义化版本控制或基于时间的版本控制。
- 回归检测
release:latest
我们根据以下条件自动检测项目是否使用语义化版本控制或基于时间的版本控制:
- 如果总共有 ≤ 2 个发布:我们查看最近的发布。
- 如果有 3-9 个发布(包括 3 和 9):如果最近 3 个发布中有任何一个为 semver,则项目为 semver。
- 如果有 10 个或更多发布:如果最近 3 个发布中有任何一个为 semver,并且最近 10 个发布中有 3 个为 semver,则项目为 semver。
你还需要传递一个分布版本给 dist
,以便事件能够被正确归因到一个发布版本。通常这个值是构建编号,例如 52
。这个值需要对每个发布版本唯一。
Sentry.init({
release: "my-project-name@2.3.12",
dist: "52",
});
Source Maps
当你在 React Native 应用中设置自定义的 release
和 dist
时,自动上传 source maps 的脚本将不再工作,因为它无法检测到自定义值。你需要手动上传 source maps。
如何将 release 名称(或版本)提供给代码由你决定。例如,你可以在构建过程中或在初始启动时使用环境变量来设置它。
设置 release 名称会为每个事件标记该 release 名称。我们建议在使用该 release 名称发送事件之前,先告知 Sentry 新的 release,因为这将解锁一些额外的功能。更多内容请参阅我们的 Releases 文档。
如果你没有告知 Sentry 新的 release,Sentry 将在第一次看到带有该 release ID 的事件时自动在系统中创建一个 release 实体。
配置 SDK 后,你可以安装仓库集成或手动向 Sentry 提供自己的提交元数据。有关集成、关联提交以及告知 Sentry 部署 release 的更多信息,请阅读我们关于设置 releases的文档。
通过观察用户采用情况、应用程序的使用情况、crashes 百分比以及 session data,可以监控 release 健康。Release 健康将提供关于崩溃和错误对用户体验的影响的见解,并通过 Release Details 图表和过滤器揭示每个新问题的趋势。
崩溃报告和应用卡顿检测在 watchOS 上不可用。
为了监控 release 健康,SDK 会发送会话数据。
会话表示用户与应用程序之间的交互。会话包含时间戳、状态(会话是否正常或崩溃),并且始终与一个 release 相关联。大多数 Sentry SDK 可以自动管理会话。
为了从健康数据中受益,你必须使用至少 1.4.0 版本的 React Native SDK,并在 SDK 的初始化选项中启用发布健康数据的收集。
如果 SDK 捕获到包含异常的事件(这包括手动捕获的错误)或未处理的 promise 拒绝,我们将把会话标记为错误。但对于未处理的错误和原生崩溃(Android 和 iOS),它们将被标记为已崩溃。
默认情况下,SDK 会发送会话。要禁用此功能,请将 enableAutoSessionTracking
标志设置为 false
:
Sentry.init({
enableAutoSessionTracking: false, // default: true
});
一旦应用程序在后台超过 30 秒,会话就会终止。要更改超时时间,可以使用 sessionTrackingIntervalMillis
选项。例如:
import * as Sentry from "@sentry/react-native";
Sentry.init({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
enableAutoSessionTracking: true,
// Sessions close after app is 10 seconds in the background.
sessionTrackingIntervalMillis: 10000,
});
更多详情,请参阅关于发布健康数据的完整文档。