title: Sentry和Jenkins的使用
date: 2019-11-20 22:18:00
password: 123321
abstract: 抱歉,文章暂不开放
message: 请输入密码:
categories:

  • 工具
    tags:
  • Sentry
  • Jenkins
  • 内部分享

Sentry和Jenkins的使用

Sentry

需要异常捕获、追踪,跟踪整个处理过程,统计分析并可视化展示异常相关数据。

堆栈跟踪、堆栈本地信息、前面的事件、可能导致问题的提交以及在错误发生时捕获的定制数据

Sentry分为服务平台客户端两个部分,这是针对于sentry整个处理流程来说。客户端产生异常并上报异常,服务平台负责处理存储、分类、处理、分析、跟踪、展示。

Sentry和Jenkins的使用 - 图1

Sentry的服务端分为webcronworker这几个部分,应用(客户端)发生错误后将错误信息上报给webweb处理后放入消息队列Redis内存队列worker从队列中取出数据进行处理

客户端

  1. {
  2. "@sentry/browser": "^5.7.1",
  3. "@sentry/integrations": "^5.7.1",
  4. }

Sentry和Jenkins的使用 - 图2

服务平台可以使用官方,也可以使用私有化部署,客户端也就是SDK,对于前端项目就是安装npm插件包

使用

接入

Sentry和Jenkins的使用 - 图3

新建一个项目,根据根据项目类型选择

Sentry和Jenkins的使用 - 图4

在代码里面安装:

如果是Vue,可以在main.js里面添加,

  1. import Vue from 'vue'
  2. import * as Sentry from '@sentry/browser';
  3. import * as Integrations from '@sentry/integrations';
  4. Sentry.init({
  5. dsn: 'http://59aec82d2ad74418846d17e3a85bf081:4f1faacb1ca54ba98b11c8225ac9865b@101.37.148.124:9000/13',
  6. integrations: [new Integrations.Vue({Vue, attachProps: true})],
  7. });

或者用CDN的方式引入:

  1. <!-- Note that we now also provide a es6 build only -->
  2. <!-- <script src="https://browser.sentry-cdn.com/5.5.0/bundle.es6.min.js" crossorigin="anonymous"></script> -->
  3. <script src="https://browser.sentry-cdn.com/5.5.0/bundle.min.js" crossorigin="anonymous"></script>
  4. <!-- If you include the integration it will be available under Sentry.Integrations.Vue -->
  5. <script src="https://browser.sentry-cdn.com/5.5.0/vue.min.js" crossorigin="anonymous"></script>
  6. <script>
  7. Sentry.init({
  8. dsn: 'http://59aec82d2ad74418846d17e3a85bf081:4f1faacb1ca54ba98b11c8225ac9865b@101.37.148.124:9000/13',
  9. integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
  10. });
  11. </script>

其中,DSN的获取:

Sentry和Jenkins的使用 - 图5

进入项目的设置页面,找到图中所示的DSN,替换掉上面代码块里的就可以了。

界面介绍:

基本SDK配置

SourceMap添加

安装Sentry对应的命令行管理工具sentry-cli

cnpm i -g @sentry/cli

生成token

选择账户下的API Keys,选择生成一个新的Token

Sentry和Jenkins的使用 - 图6

勾选上响应的权限

Sentry和Jenkins的使用 - 图7

命令行登录:

sentry-cli --url http://101.37.148.124:9000/ login

Sentry和Jenkins的使用 - 图8

输入Token即可

输入sentry-cli releases -o 组织名 -p 项目名 new staging@1.0.1,为项目打上Release

Sentry和Jenkins的使用 - 图9

这里的 staging@1.0.1 就是我们指定的版本号. -o -p可以通过页面左上角可以看到。现在我们可以通过创建多个版本号来进行异常分类。同时,也可以通过页面中Releases查看是否创建成功。

Sentry和Jenkins的使用 - 图10

Issue关联GitLab

相关01

相关02


Jenkins

Jenkins通过和其他CI(Continuous Integration)持续集成工具一样的Pipeline管道的概念,通过将一个任务线看做一个管道,管道分为了很多个步骤,每个步骤是单独的一个小任务,可以通过Jenkins自带的或者安装的插件来执行每一步,每个小步骤,相互配合,相互嵌套,由Jenkins统一管理调配,共同完成完整的一条流水线。

比如我们通常的项目开发完成后,上线部署可以看做是一条流水线,一个Pipeline,连接服务器,进入目录,备份旧版本,上传新版本,这些都可以看做一个小任务,在Jenkins里可以当做一个一个的Step执行。

在公司直接使用已配置的Jenkins

配置好之后的界面

  1. 项目列表选择一个要构建的项目

Sentry和Jenkins的使用 - 图11

  1. 选择参数构建

Sentry和Jenkins的使用 - 图12

  1. 选择对应参数

Sentry和Jenkins的使用 - 图13

  1. 构建

  2. 查看构建过程,如果配置,构建完成会有钉钉通知

项目未配置Jenkins

如果是新项目,需要告诉运维:

  1. 没有Jenkins账号,先向运维申请账号。
  2. 项目属于哪个开发组(便于分配权限)
  3. 需要部署到的服务器是哪个(需要做免密登录,传输代码)
  4. 需要部署到哪个目录
  5. 代码仓库地址.git、需要做Jenkins的仓库分支
  6. 项目build需要执行的命令((c)npm installnpm run build
  7. 项目build需要安装的环境(Node.js是否有版本要求、npm版本要求等,特殊情况)
  8. 执行结果推送方式(钉钉机器人、email)

自动化构建流程

整个构建过程,如何执行的?

公司项目编译构建过程是通过Jenkins手动触发构建,每次项目上线,想要进行构建,需要:

  1. 登录Jenkins,进入到相关项目下面,配置构建参数,手动触发构建
  2. 此时,根据配置的分支参数,直接使用git去拉取远程仓库中对应分支的最新代码
  3. 拉取到本地中之后,进入项目文件目录,执行安装依赖,build源码文件
  4. 进入旧版本目录,复制一份,压缩一下,做个备份,将备份放到指定目录,删除旧版本。
  5. 将上面build好的文件移动到相关目录中(Nginx映射的Web目录或者其他),使用新版本替换旧版本。
  6. 整个流程执行完成,通过WebHook推送到钉钉,钉钉推送执行结果。

Sentry和Jenkins的使用 - 图14


自己配置一个Jenkins构建

Jenkins的安装没有什么难度,官网或者网上都有教程,一步一步来,出错排错就可以。

以Hexo配合Jenkins部署为例

需求:Hexo写的,需要达到的效果:每次写好的md文件,推送到git仓库(码云),Jenkins自动拉取代码,自动编译成html,替换旧版本,获取钉钉通知。

属于git push自动触发,协作项目中,如果区分了正式分支开发分支,可以设置当开发分支合并到正式分支的时候触发。

gitee配置

安装插件

Jenkins中选择Manage Jenkins -> Manage Plugins -> Available,搜索框直接搜索Gitee

Sentry和Jenkins的使用 - 图15

添加码云链接配置

  1. 前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
  2. Connection name 中输入 Gitee 或者你想要的名字
  3. Gitee host URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)
    Credentials 中如还未配置码云APIV5私人令牌,点击 Add - > Jenkins
  4. Domain 选择 Global credentials
  5. Kind 选择 Gitee API Token
  6. Scope 选择你需要的范围
  7. Gitee API Token 输入你的码云私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
  8. ID, Descripiton 中输入你想要的 ID 和描述即可。
  9. Credentials 选择配置好的 Gitee APIV5 Token
  10. 点击 Advanced ,可配置是否忽略 SSL 错误(适您的Jenkins环境是否支持),并可设置链接测超时时间(适您的网络环境而定)
  11. 点击 Test Connection 测试链接是否成功,如失败请检查以上 3,5,6 步骤。

Sentry和Jenkins的使用 - 图16

项目配置

  1. 创建一个Jenkins流水线,有几种形式可供选择

Sentry和Jenkins的使用 - 图17

  • Freestyle project:自由形式项目,任何不属于下面的项目都可以选择这个,自定义程度较高

Sentry和Jenkins的使用 - 图18

  • Pipeline:管道

Sentry和Jenkins的使用 - 图19

  • Multi-configuration project:多种配置

Sentry和Jenkins的使用 - 图20

  • Folder:文件夹

Sentry和Jenkins的使用 - 图21

  • GitHub Organization:

Sentry和Jenkins的使用 - 图22

  • Multibranch Pipeline:

Sentry和Jenkins的使用 - 图23

这些形式没有本质区别,都是流水线性质,只是根据不同形式的项目会有不同的推荐的常用步骤。

日常的项目build可以选择第一种,Freestyle project自由形式的项目。

这种流水线有6个推荐的Step

  • General:通用(该条流水线的描述、远程仓库的连接、关于构建和仓库的基础配置)
  • Source Code Management:源代码管理(从哪里拉取代码,哪个分支,也支持SVN
  • Build Triggers:构建触发器(什么情况下会触发构建过程开始启动)
  • Build Environment:构建环境(build之前要准备哪些,密钥传输、清空jenkins工作空间,一般情况下没有特殊需求可以不用管)
  • Build:构建(主要的构建过程,通过配置一些待执行shell命令,达到移动文件,执行构建的目的。命令直接写shell,平时在ssh工具终端中怎么写,就怎么写)
  • Post-build Actions:构建后操作(构建成功,执行哪些操作,消息推送、给远程仓库打标签等等后续操作)
  1. 选择已经配置好的Gitee账户链接,配置之后可以访问账户之下的所有仓库

Sentry和Jenkins的使用 - 图24

  1. 选择要拉取代码的仓库地址,分支

Sentry和Jenkins的使用 - 图25

  1. 配置触发器(什么情况下开启构建流程)

Sentry和Jenkins的使用 - 图26

  1. 配置构建环境,没有特殊要求可以不管

Sentry和Jenkins的使用 - 图27

  1. 配置整个构建过程执行的shell脚本,注意如果一个程序分两段shell,需要使用export BUILD_ID=DONTKILLME留活,不然Jenkins会在一段脚本之后杀死程序,如图,我需要scp在传输文件之后接着执行第二段脚本,那就需要在第一段的后面加上这条命令,告诉Jenkins,不要杀死我。

Sentry和Jenkins的使用 - 图28

  1. 构建过程执行完之后要做的操作,配合不同的插件,可以执行不同的后续操作。

添加钉钉机器人通知

Sentry和Jenkins的使用 - 图29

群助手选择添加一个自定义机器人

Sentry和Jenkins的使用 - 图30

填写安全设置可以使用自定义关键词,定义的关键词必须在推送的时候包含该关键词。也可以使用IP地址,将Jenkins服务器IP加进去,或者使用签名推送。

Sentry和Jenkins的使用 - 图31

更多功能,更多插件

Sonar集成,安装SonarQube Scanner for JenkinsJenkins只是一个构建流程控制工具,具体怎么玩,看具体需求。

https://gitee.com/help/articles/4193#article-header6