在哨兵项目中,我们使用了Travis CI,这是一个针对GitHub的持续集成工具,它允许我们自动化测试并在拉取请求中查看结果。在这篇博文中,我们将通过一个简单的例子来演示当一个提交被推送到您的项目的主分支时,如何用Travis CI自动创建Sentry Releases。
注意:由于我们支持如此多的平台,我们使用Travis CI在多个环境中并行测试代码。如果你好奇的话,可以在这里看到getsentry/sentry repo的Travis配置文件!
如果你是特拉维斯CI的新手,看看他们的getting-started guide来建立你的账户。您还需要一个GitHub存储库来运行特拉维斯配置项;它目前不支持其他平台。
Travis配置是在.travis.yml
项目存储库中的文件。至少,你需要设置一个特拉维斯CIsupported programming languages和它的版本号。例如,这里有一个超级最小的配置文件。
xxxxxxxxxx
language node_js
node_js
8
基于编程语言,Travis CI使用智能默认值分两个阶段构建和测试您的项目安装相位和建设阶段。在上例中,特拉维斯将自动运行npm install
为了安装相位和npm test
为了建设阶段。
为了定制构建过程,特拉维斯竞争情报提供钩住中的不同阶段运行自己的命令job lifecycle。若要运行自定义生成脚本,可以使用script
钩子:
xxxxxxxxxx
language node_js
node_js
8
script echo "Building all the things"
了解更多关于特拉维斯竞争情报的工作生命周期挂钩their docs。
Travis配置项允许您通过两个事件触发新的构建:当分支被推时和当拉请求被创建时。默认情况下,两者事件将触发构建。您可以在项目的设置页面中更改此行为:
假设我们想对这两个事件(拉请求和提交/合并)运行测试,但是我们只想为提交/合并创建一个新的哨兵发布——并且只为主分支。
要设置它,我们将使用jobs
键来运行多个脚本if
键为其中一个脚本指定条件。在这种情况下,如果触发事件是push
这个分支是master
:
xxxxxxxxxx
jobs
include
name Run tests
script npm test
name Create Sentry Release on push to master
if (type = push AND branch = master)
script# We'll cover this in the next sections
中了解有关条件生成的更多信息Travis CI docs。
当Travis运行构建时,您可以看到每个单独作业的状态,以验证每个已触发的构建正在运行哪些脚本:
我们的集成平台允许开发人员将Sentry与第三方工具连接起来—作为任何人都可以使用的公共集成,或者作为Internal Integrations专为一个组织构建,将哨兵与其内部工具和定制工作流相结合。
要创建新的内部集成,请导航到设置>开发人员设置>新的内部集成哨兵内部。在这里,您将为您的新集成赋予一个标题(例如,“使用特拉维斯配置项创建哨兵发布”),选择要使用的权限,并获取您的令牌以使用哨兵的应用编程接口进行身份验证。
你可以申请different sets of permissions每次整合。对于这个,我们需要Admin
“发布”和Read
“组织”的访问权限:
接下来,单击页面底部的“保存”,然后获取您的令牌:
在下一节中,我们将使用这个内部集成令牌来使特拉维斯配置项能够在创建新版本时使用哨兵的应用编程接口进行身份验证。
首先:您需要通过将提交元数据链接到哨兵项目来启用哨兵发布。最简单的设置方法是使用our GitHub integration链接你的仓库到哨兵。(再次提醒特拉维斯CI只支持GitHub。(
为了创建我们的版本,我们将使用Sentry command line interface (CLI),它使用一些环境变量来连接到您的哨兵项目:
SENTRY_AUTH_TOKEN
-您的内部集成令牌。SENTRY_ORG
-你的哨兵组织鼻涕虫。SENTRY_PROJECT
-你的哨兵项目弹头。特拉维斯配置项支持公共和私有环境变量。对于我们的非敏感环境变量,您可以将它们添加到.travis.yml
。对于私有环境变量,您可以通过您的项目的“存储库设置”页面上的特拉维斯管理后端添加它们。(参见their docs详情。)保存在那里的任何变量都将被编辑到日志中,显示为[secure]
这样你的私人数据就不会被意外泄露。这是你应该保存你的SENTRY_AUTH_TOKEN
变量:
注意:如果您在设置页面和配置文件中定义了同名的变量,则配置文件中的值将优先。
接下来,使用env
键入您的.travis.yml
配置文件。默认情况下,Travis为列表中的每个环境变量运行单独的构建;要为单个构建设置多个环境变量,可以在一行中定义它们:
xxxxxxxxxx
env
SENTRY_ORG=myorg SENTRY_PROJECT=myproject
最后,为了在构建阶段成功完成后安装哨兵命令行界面并创建一个新的哨兵版本,我们将在特拉维斯的配置项中使用以下Bash命令script
钩子:
xxxxxxxxxx
script
curl -sL https://sentry.io/get-cli/ | bash
export SENTRY_RELEASE=$(sentry-cli releases propose-version)
sentry-cli releases new -p $SENTRY_PROJECT $SENTRY_RELEASE
sentry-cli releases set-commits --auto $SENTRY_RELEASE
sentry-cli releases finalize $SENTRY_RELEASE
上面的哨兵命令行界面命令使用您项目的最新Git SHA在哨兵中创建新版本,然后将其与您本地存储库中的提交相关联。有关每个命令的更多详细信息,请查看release management with the Sentry CLI。
这是我们的全部.travis.yml
每当提交被推送到项目的主分支时,创建新的哨兵发布的文件:
xxxxxxxxxx
language node_js
node_js
8
jobs
include
name Run tests
script npm test
name Create Sentry Release on push to master
if (type = push AND branch = master)
env SENTRY_ORG=myorg SENTRY_PROJECT=myproject
script
curl -sL https://sentry.io/get-cli/ | bash
export SENTRY_RELEASE=$(sentry-cli releases propose-version)
sentry-cli releases new -p $SENTRY_PROJECT $SENTRY_RELEASE
sentry-cli releases set-commits --auto $SENTRY_RELEASE
sentry-cli releases finalize $SENTRY_RELEASE
必定check out our documentation有关管理哨兵版本的更多详细信息。
要触发Travis CI运行一个新的构建,您需要向您的GitHub存储库推送一个新的提交。(确保将提交推送到您在配置文件中指定的任何分支。)然后,您可以在特拉维斯配置项管理后端读取完整的构建日志。
如果你的新版本成功了,登录你的哨兵账户,看看你的项目的“发布”页面。您应该会看到为您的项目列出了一个全新的版本,列出了您最近提交的SHA:
接下来,您可以使用哨兵命令行界面为您的项目发送一个事件,以确认新事件将正确地与最新版本相关联。如果您从项目的Git存储库中运行它,当前版本将自动链接到事件:
xxxxxxxxxx
export SENTRY_DSN=https://mydsnhere@sentry.io/1234
sentry-cli send-event -m "Test event, should be linked to the latest release"
在发送测试事件之后,您将看到一个与您的哨兵项目最新版本相关的新的未解决问题:
我们非常喜欢各种形式的整合。我们使用Travis CI进行我们自己的持续集成,我们有一个Integration Platform让所有开发人员将哨兵与他们最喜欢的工具和自定义工作流集成在一起。