sentry 工作流和集成之发布(翻译)

1,488 阅读8分钟

发行

发行版是部署到环境中的代码版本。当您向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角色的内容。

进入“组织设置>集成”并安装集成后,单击实例旁边的“配置”按钮。

在“存储库”面板中,单击“添加存储库”,然后添加要跟踪提交的任何存储库。然后,集成将把每个提交的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参考。

故障排除 如果您收到“无法获取提交”电子邮件,请查看我们的帮助中心文章。

关联提交后

在这一步之后,可疑提交和建议的被指派者将开始出现在问题页面上。我们通过将发行版中的提交、这些提交所触及的文件、堆栈跟踪中观察到的文件、这些文件的作者和所有权规则结合在一起来确定这些。

此外,您还可以通过在提交消息中包含问题ID来解决问题。您可以在“问题详细信息”页面顶部的“代理人”下拉列表旁边找到问题id。例如,提交消息可能如下所示:

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用户谁已承诺的版本,正在部署。

要使用此功能,必须在SDK中设置环境上下文。要让发布知道您已经部署,只需在创建发布后发送一个附加请求:

sentry-cli releases deploys VERSION new -e ENVIRONMENT

您还可以使用我们的API创建部署。 发布工件 JavaScript和iOS项目可以利用发布构件来统一或象征错误堆栈跟踪。要了解更多信息,请查看我们的iOS和JavaScript文档。