发布 & 健康

了解如何配置您的 SDK 以告知 Sentry 您的发布情况。

发布是指部署到 环境 的代码版本。当您向 Sentry 提供有关发布的信息时,您可以:

  • 确定新发布中引入的问题和回归
  • 预测哪个提交导致了问题以及谁可能是责任人
  • 通过在提交消息中包含问题编号来解决这些问题
  • 在代码部署时接收电子邮件通知

此外,发布用于应用 源映射 到压缩后的 JavaScript 以查看原始、未转换的源代码。

在初始化 SDK 时包含一个发布 ID(通常称为“版本”)。

发布名称不能:

  • 包含换行符、制表符字符、正斜杠 (/) 或反斜杠 (\)
  • 完全为句号 (.)、双句号 (..) 或空格 ( )
  • 超过 200 个字符

值可以是任意的,但我们建议使用以下命名策略之一:

  • 语义化版本控制package@versionpackage@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。

Copied
Sentry.init({
  release: "my-project-name@2.3.12",
});

A common way to do this with JavaScript in a Node/npm environment would be to use the process.env.npm_package_version like so:

Copied
Sentry.init({
  release: "my-project-name@" + process.env.npm_package_version,
});

如何使发布名称(或版本)在代码中可用由您决定。例如,您可以在构建过程中或初始启动时设置一个环境变量。

设置发布名称会将每个事件标记为此发布名称。我们建议在发送带有该发布名称的事件之前告诉 Sentry 新的发布,这将解锁一些额外的功能。更多信息请参阅我们的 发布 文档。

如果您不告诉 Sentry 新的发布,Sentry 将在第一次看到带有该发布 ID 的事件时自动在系统中创建一个发布实体。

配置好 SDK 后,您可以安装仓库集成或手动提供自己的提交元数据。阅读我们的文档了解更多关于 设置发布 的信息,包括集成、关联提交以及告诉 Sentry 部署发布的时间。

通过观察用户采用情况、应用程序使用情况、崩溃 百分比和 会话数据,监控 发布健康。发布健康将提供关于崩溃和错误对用户体验的影响的见解,并通过 发布详情 图表和过滤器揭示每次新问题的趋势。

崩溃报告和应用程序挂起检测在 watchOS 上不可用。

为了监控发布健康,SDK 会发送会话数据。

会话表示用户与应用程序之间的交互。会话包含时间戳、状态(会话是否正常或是否崩溃),并且总是与一个发布相关联。大多数 Sentry SDK 可以自动管理会话。

我们为每次页面加载创建一个会话。对于单页应用程序,我们会在每次导航变化(History API)时创建一个新的会话。

我们将会话标记为:

  • 如果有未处理的错误或未处理的 Promise 拒绝事件冒泡到全局处理器,则标记为崩溃。
  • 如果 SDK 捕获到包含异常的事件(包括手动捕获的错误),则标记为出错。

为了接收用户采用数据,例如用户无崩溃率百分比和采用特定发布的用户数量,在初始化 SDK 时设置 initialScope 中的用户信息。

默认情况下,JavaScript SDK 会发送会话。要禁用发送会话,请将 autoSessionTracking 标志设置为 false

Copied
Sentry.init({
  autoSessionTracking: false, // default: true
});