用CircleCI自动发布Sentry


像CircleCI这样的持续集成工具可以让开发人员自动构建和测试,这样团队就可以快速和频繁地将变化合并到他们的代码库中。在这篇文章中,我们将看看如何将Sentry的命令行界面和CircleCI结合起来,以自动创建Sentry版本。这将解开我们的一些最好的功能,比如识别可能引入新错误的可疑提交,应用源码地图来查看Sentry内的原始源代码,等等。

在这里了解更多关于 Sentry发布的信息

制作CircleCI配置文件

如果你是CircleCI的新手,请遵循他们的 "入门 "指南 --你需要创建一个CircleCI账户,并链接你的项目库,可以托管在GitHub或Bitbucket。

你的CircleCI构建过程被定义在一个 config.yml 文件中,它需要在一个 .circleci/ 目录中。下面是一个配置文件的例子。

   version: 2
jobs:
  build:
    docker: 
      - image: circleci/node:4.8.2 # the primary container, where your job's commands are run
    steps:
      - checkout # check out the code in the project directory
      - run: echo "Hello world!" # run the `echo` command    

CircleCI配置文件包含一个作业列表,其中包含一系列要运行的步骤。(注意:如果你不使用他们的工作流功能,至少有一个工作需要被命名为 build 。) 每个工作也可以在 种不同的环境中执行 :在Docker镜像中或在Linux、Mac或Windows的虚拟机镜像中。上面的例子使用 circleci/node:4.8.2 ,是CircleCI预定义的Docker镜像之一 。

steps 值包含一个键/值对的列表,其中的键定义了步骤的 类型 。例如, "checkout "步骤 是一个特殊的预定义动作,它从你项目的仓库中签出代码,自动添加所需的auth密钥,通过SSH与GitHub和Bitbucket进行交互。

要运行Bash命令,你可以使用一系列的 run 步骤,也可以在一个步骤中包含多个命令。

   steps:
  - checkout # check out the code in the project directory
  - run: | 
      echo "Hello..."
      echo "...World!"    

注意:CircleCI在一个新的shell中运行每个步骤,所以环境变量不会在不同的步骤**享。

为了只对某些分支运行CircleCI作业,你可以设置 branches 键来选择特定的分支--例如,只在提交被推送到 master 分支时运行作业。

   build:
  branches:
    only:
      - master    

创建Sentry内部集成

我们的 集成平台 允许开发人员将Sentry与第三方工具连接起来--可以是任何人都可以使用的公共集成,也可以是只为一个组织建立的 内部集成 ,将Sentry与他们的内部工具和自定义工作流结合起来。

要创建一个新的内部集成,请在Sentry内部浏览 Settings > Developer Settings > New Internal Integration 。在那里,你将给你的新集成一个标题(例如,"用CircleCI创建Sentry发布"),选择要使用的权限,并获得你的令牌,以便与Sentry的API进行验证。

设置权限

你可以为每个集成应用 不同的权限集 。对于这个,我们需要 Admin "发布 "的权限和 Read "组织 "的权限。

请看我们关于权限的 文档页 ,了解更多关于Sentry的API端点的范围。

接下来,点击页面底部的 "保存",然后抓住你的令牌。

在下一节中,我们将使用这个内部集成令牌,使CircleCI在创建一个新的版本时能够通过Sentry的API进行认证。

用CircleCI创建一个Sentry版本

你首先需要确保为你的Sentry项目设置了Sentry版本。将您的提交元数据连接到Sentry的最简单方法是使用 我们的GitHub集成 或我们的 Bitbucket集成 。(注意,CircleCI目前只支持GitHub和Bitbucket。)

接下来,我们将设置一些环境变量来配置Sentry CLI:

  • SENTRY_AUTH_TOKEN - 你的 内部集成令牌
  • SENTRY_ORG - 你的Sentry组织lug。
  • SENTRY_PROJECT - 您的Sentry项目名称。

为了保存任何像 SENTRY_AUTH_TOKEN 这样的敏感数据,CircleCI在他们的管理后台提供了 一个构建设置 的页面。任何保存在那里的环境变量都会在你的日志中被编辑,显示为 **** ,这样私人数据就不会被意外地泄露。

要在构建环境中保存非敏感数据,请使用 environment 键在你的 config.yml 文件中定义你的环境变量。

   build:
  environment:
    SENTRY_ORG: my-org
    SENTRY_PROJECT: my-project    

最后,为了在CircleCI的虚拟机上安装 Sentry CLI 并创建一个新的Sentry版本,我们将使用以下Bash命令。

   run: |
  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    

下面是我们完整的例子 config.yml 文件,它将在每次提交被推送到主分支时创建一个新的Sentry版本。

   version: 2
jobs:
  build:
    docker: 
      - image: circleci/node:4.8.2
    environment:
      SENTRY_ORG: my-org
      SENTRY_PROJECT: my-project
    branches:
      only:
        - master
    steps:
      - checkout # check out the code in the project directory
      - run: | 
          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    

请务必查看 我们的文档 ,了解更多关于管理Sentry版本的细节。

本地测试CircleCI配置文件

CircleCI提供了一个方便的 命令行界面 来测试你的 config.yml 文件。通过在本地测试你的 config.yml 文件,YAML语法错误更容易被发现,而不是把代码推送到你的存储库,并等待CircleCI的服务器每次运行你的构建。

要在本地验证你的配置文件,请使用 validate 命令。

   circleci config validate -c .circleci/config.yml    

而要在本地运行一个作业,使用 local execute 命令。

   circleci local execute --job "jobname"    

注意:在本地运行构建时,CircleCI不会导入任何通过其用户界面配置的加密变量。他们建议通过CLI以这种格式设置这些环境变量。 circleci local execute --job "jobname" --env MY_VAR=MY_VALUE

你也可以在每次提交时使用git钩子来验证你的CircleCI配置文件;参见 CircleCI的博文 ,了解一下。

一定要参考 CircleCI的完整配置语法指南 来解决任何棘手的YAML问题。

验证您的Sentry发布是否正常

向您的 config.yml 文件中指定的分支推送一个新的提交,以触发CircleCI运行您的构建。你可以在 CircleCI的用户界面 中查看关于构建的细节,如果失败了,可以看到其中列出的任何错误。

如果CircleCI构建成功,请到你的Sentry组织,点击左侧菜单的 "发布"。你应该看到你的项目列出了一个全新的版本,列出了你最新提交的SHA。

为了确认你的项目的新事件会正确地与你的版本相关联,你可以使用Sentry CLI来为你的项目发送一个事件。如果你在你的项目的git仓库中运行这个命令,当前的版本将被自动链接到该事件。

   export SENTRY_DSN=https://mydsnhere@sentry.io/1234
sentry-cli send-event -m "Test event, should be linked to the latest release"    

关于 s 用Sentry的命令行界面结束事件,请看我们的文档

发送事件后,在Sentry中再次查看你的项目的 "发布 "页面。在最新版本的页面上,你会看到一个与该版本相关的未解决的新问题。