发行
发行版是部署到环境中的代码版本。当您向sentry提供有关发行版的信息时,您将解锁许多新功能:
- 确定新版本中引入的问题和回归
- 预测是哪一种行为引起了问题,以及谁可能对此负责
- 通过在提交消息中包含问题编号来解决问题
- 部署代码时接收电子邮件通知
此外,版本还用于将源映射应用于缩小的JavaScript,以查看原始的、未转换的源代码。
设置发布
完全设置发布是一个4步过程:
- 配置您的SDK
- 安装存储库集成
- 创建发布并关联提交
- 部署发布时通知sentry
配置您的SDK
在配置客户机SDK的地方包含一个版本ID(也称为版本)。这通常是git SHA或自定义版本号。 有一些限制-发行版名称不能包含换行符、空格或“\”、“…”或超过200个字符。
注意 每个组织的发布都是全局的,所以一定要在发布前加上项目特定的前缀。
在Node/npm环境中使用JavaScript的一种常见方法是使用process.env.npm_包版本就像这样:
Sentry.init({
release: 'my-project-name@' + process.env.npm_package_version
});
如何使版本对代码可用取决于您自己。例如,可以使用在生成过程中设置的环境变量。 这将用release值标记每个事件。我们建议您在部署新版本之前告诉Sentry,因为这将解锁更多的功能(在步骤2中解释)。但如果您不这样做,Sentry将自动创建一个发布实体在系统中,第一次看到一个事件与该释放ID。 在这之后,您应该会看到关于发布的信息,比如发布中引入的新问题和回归。
安装存储库集成
此步骤是可选的-如果愿意,可以手动为Sentry提供自己的提交元数据。请跳到本节学习如何执行此操作。
使用Sentry的一个存储库集成(例如GitHub、GitLab、Bitbucket等)是将提交元数据连接到Sentry的最简单方法。有关可用集成的列表,请转到“组织设置>集成(Settings > Integrations)”。
注意 您需要是sentry组织的所有者或管理者才能设置或配置集成。阅读更多关于是sentry角色的内容。
如果链接的是GitHub存储库,请确保您对该存储库具有管理员或所有者权限,并且Sentry是GitHub帐户设置中授权的GitHub应用程序。
如果添加时仍然遇到问题,可以尝试断开连接,然后重新连接GitHub标识。
创建发布并关联提交
在这一步中,您将告诉Sentry一个新版本以及与之关联的提交。这允许Sentry查明哪些提交可能导致问题,并允许您的团队通过引用提交消息中的问题编号来解决问题。
将提交与发布关联
在发布过程中,添加一个步骤以在Sentry中创建发布对象,并将其与链接存储库中的提交相关联。 有两种方法:
- 使用Sentry的命令行界面(推荐)
- 使用API
注意 您需要确保使用的是Auth令牌,而不是API密钥,它们已被弃用。
在上面的示例中,首先,我们使用环境变量来配置CLI(请参阅使用项目以了解其他可能的方法),然后使用supose version子命令来自动确定版本ID。接下来,我们将为组织my org为projectproject1和project2创建一个带发布标签的版本。最后,我们使用--auto标志自动确定存储库名称,并将前一个版本的提交和当前头部提交与该版本关联起来。如果以前的版本没有任何与之相关联的提交,我们将使用最新的20个提交。
如果要对要关联的提交进行更多控制,或者无法在存储库中执行命令,可以手动指定存储库和范围:
sentry-cli releases set-commits --commit "my-repo@from..to" $VERSION
在这里,我们将from和to之间的提交(或refs)与当前版本关联起来,而不是前一个版本的提交。存储库名称my repo应与您在上一步链接repo时输入的名称相匹配,并且其格式为owner name/repo name。from commit是可选的,如果排除了它,我们将使用以前版本的commit作为基线。
有关更多信息,请参见CLI文档。
最终确定发布
默认情况下,发布被创建为“未发布”。完成发布意味着我们在发布记录上填写第二个时间戳,该时间戳的优先级高于在UI中对发布进行排序时创建的日期。这也会影响用于解决问题的“下一个版本”的内容,如果使用--auto并在活动流中创建条目,则使用哪个版本作为关联提交的基础。
这可以通过将--finalize传递给新命令来更改,该命令将立即完成版本,或者您可以稍后单独调用sentry cli releases finalize VERSION。如果您将发布作为构建过程的一部分进行管理,则后者非常有用。
#!/bin/sh
sentry-cli releases new "$VERSION"
# do your build steps here
# once you are done, finalize
sentry-cli releases finalize "$VERSION"
您还可以选择在发布生效后(部署到计算机上、在应用程序商店中启用等)完成发布。
# Create a new release
curl https://sentry.io/api/0/organizations/:organization_slug/releases/ \
-X POST \
-H 'Authorization: Bearer {TOKEN}' \
-H 'Content-Type: application/json' \
-d '
{
"version": "2da95dfb052f477380608d59d32b4ab9",
"refs": [{
"repository":"owner-name/repo-name",
"commit":"2da95dfb052f477380608d59d32b4ab9",
"previousCommit":"1e6223108647a7bfc040ef0ca5c92f68ff0dd993"
}],
"projects":["my-project","my-other-project"]
}
'
如果您希望对提交的显示顺序有更多的控制,可以向我们发送所有提交的列表。可能是这样的:
import subprocess
import requests
SENTRY_API_TOKEN = <my_api_token>
sha_of_previous_release = <previous_sha>
log = subprocess.Popen([
'git',
'--no-pager',
'log',
'--no-merges',
'--no-color',
'--pretty=%H',
'%s..HEAD' % (sha_of_previous_release,),
], stdout=subprocess.PIPE)
commits = log.stdout.read().strip().split('\n')
data = {
'commits': [{'id': c, 'repository': 'my-repo-name'} for c in commits],
'version': commits[0],
'projects': ['my-project', 'my-other-project'],
}
res = requests.post(
'https://sentry.io/api/0/organizations/my-org/releases/',
json=data,
headers={'Authorization': 'Bearer {}'.format(SENTRY_API_TOKEN)},
)
有关详细信息,请参阅API参考。
故障排除 如果您收到“无法获取提交”电子邮件,请查看我们的帮助中心文章。
关联提交后
在这一步之后,可疑提交和建议的被指派者将开始出现在问题页面上。我们通过将发行版中的提交、这些提交所触及的文件、堆栈跟踪中观察到的文件、这些文件的作者和所有权规则结合在一起来确定这些。
Prevent empty queries on users
Fixes SENTRY-317
当Sentry看到这个提交时,我们将在问题中引用该提交,当您在Sentry中创建发布时,我们将在该释放中标记该问题已解决。
GitHub和识别提交作者 如果您使用的是GitHub,则可能启用了隐私设置,以防止Sentry识别用户的真实电子邮件地址。如果您希望使用建议的所有者功能,则需要确保在GitHub的帐户设置中未选中“保留我的电子邮件地址为私有”。
或者:不集成存储库
如果您不希望Sentry连接到您的存储库,或者您使用的是不受支持的存储库提供程序或VCS(例如Perforce),您也可以使用创建发布端点通过API告诉Sentry您的原始提交元数据。
格式化提交元数据
为了让sentry使用您的提交,您必须将提交的格式与此表单匹配:
{
"commits": [
{
"patch_set": [
{"path": "path/to/added-file.html", "type": "A"},
{"path": "path/to/modified-file.html", "type": "M"},
{"path": "path/to/deleted-file.html", "type": "D"}
],
"repository": "owner-name/repo-name",
"author_name": "Author Name",
"author_email": "author_email@example.com",
"timestamp": "2018-09-20T11:50:22+03:00",
"message": "This is the commit message.",
"id": "8371445ab8a9facd271df17038ff295a48accae7"
}
]
}
- 补丁集
已在提交中更改的文件的列表。指定修补程序集是为可疑提交和建议的分配者提供电源所必需的。它由两部分组成:
* 路径: 文件的路径。支持正斜杠和反斜杠('/''\')。
* 类型:提交中发生的更改类型。选项包括:
* 增加(A)
* 修改(M)
* 删除(D)
- 存储库
提交所属的存储库的全名。如果未指定此字段,Sentry将生成以下格式的名称:u'organization-'(即,如果组织id为123,则生成的存储库名称将为u'organization-123)。
- 作者电子邮件
提交作者的电子邮件是启用建议的代理人功能所必需的。
- 作者姓名
提交作者的姓名也可能包括在内。
- 时间戳
提交时间戳用于对给定的提交进行排序。如果不包括时间戳,则提交将按给定的顺序进行排序。
- 消息
提交消息。
- id
提交id。
使用修补程序数据创建版本
下面是对包含提交元数据的创建发布终结点的完整请求的示例:
curl https://sentry.io/api/0/organizations/your-organization-name/releases/ \
-X POST \
-H 'Authorization: Bearer <Token>' \
-H 'Content-Type: application/json' \
-d '
{
"version": "2.0rc2",
"projects":["project-1","project-2"],
"commits":[
{
"patch_set": [
{"path": "path/to/added-file.html", "type": "A"},
{"path": "path/to/modified-file.html", "type": "M"},
{"path": "path/to/deleted-file.html", "type": "D"}
],
"repository": "owner-name/repo-name",
"author_name": "Author Name",
"author_email": "author_email@example.com",
"timestamp": "2018-09-20T11:50:22+03:00",
"message": "This is the commit message.",
"id": "8371445ab8a9facd271df17038ff295a48accae7"
}
]
}
'
有关详细信息,请参阅API参考。
部署释放时通知哨兵
告诉sentry当你部署一个版本,我们会自动发送一封电子邮件给sentry用户谁已承诺的版本,正在部署。
sentry-cli releases deploys VERSION new -e ENVIRONMENT
您还可以使用我们的API创建部署。 发布工件 JavaScript和iOS项目可以利用发布构件来统一或象征错误堆栈跟踪。要了解更多信息,请查看我们的iOS和JavaScript文档。