快速使用 Docker 上手 Sentry-CLI - 玩转 Source Maps 使用 (Create-React-App)

开发 前端
使用 sentry-cli 上传 source maps 时,您需要设置构建系统以创建版本(release)并上传与该版本对应的各种源文件。

[[420986]]

本文转载自微信公众号「黑客下午茶」,作者为少 。转载本文请联系黑客下午茶公众号。

系列

快速使用 Docker 上手 Sentry-CLI - 创建版本

入门

使用 sentry-cli 上传 source maps 时,您需要设置构建系统以创建版本(release)并上传与该版本对应的各种源文件。要让 Sentry 对您的堆栈跟踪进行解码,请同时提供:

  • 要部署的文件(换句话说,您的编译/压缩/打包(transpilation/minification/bundling) 过程的结果;例如,app.min.js)
  • 对应的 source maps

如果 source map 文件不包含您的原始源代码 (sourcesContent),您还必须提供原始源文件。如果源文件丢失,Sentry CLI 将尝试自动将源嵌入到您的 source maps 中。

Sentry 使用 releases 将正确的 source maps 与您的事件相匹配。要创建新版本,请运行以下命令(例如,在发布期间):

 

  1. sentry-cli releases new <release_name> 

release 名称在您的组织中必须是唯一的,并且与您的 SDK 初始化代码中的 release 选项相匹配。然后,使用 upload-sourcemaps 命令扫描文件夹中的 source maps,处理它们,并将它们上传到 Sentry。

  1. sentry-cli releases files <release_name> upload-sourcemaps /path/to/files 

您可以通过导航到 [Project] > Project Settings > Source Maps 找到上传到 Sentry 的工件。

此命令会将所有以 .js 和 .map 结尾的文件上传到指定的版本(release)。如果你想改变这些扩展 — 例如,上传 typescript 源文件 — 使用 --ext 选项:

  1. sentry-cli releases files <release_name> upload-sourcemaps --ext ts --ext map /path/to/files 

到目前为止,该版本处于草稿状态(“unreleased”)。上传所有 source maps 后,您的应用程序已成功发布,使用以下命令完成 release:

 

  1. sentry-cli releases finalize <release_name> 

实战

Create React App 快速创建一个 Demo

新建一个 typescript app 模板项目:

  1. npx create-react-app my-app --template typescript 

加入 @sentry/react,@sentry/tracing 包:

  1. yarn add @sentry/react @sentry/tracing 

修改项目代码

进入 src/index.tsx,进行如下调整:

  1. import React from 'react'
  2. import ReactDOM from 'react-dom'
  3. import './index.css'
  4. import App from './App'
  5. import * as Sentry from "@sentry/react"
  6. import { Integrations } from "@sentry/tracing"
  7.  
  8. Sentry.init({ 
  9.   dsn: "https://token@your.sentry.com/2", // 你的 Sentry 项目 DSN 
  10.   release: "1.0.0"
  11.   integrations: [new Integrations.BrowserTracing()] 
  12. }); 
  13.  
  14. ReactDOM.render( 
  15.   <React.StrictMode> 
  16.     <App /> 
  17.   </React.StrictMode>, 
  18.   document.getElementById('root'
  19. ); 

进入 src/App.tsx,进行如下调整:

  1. import React from 'react'
  2. import logo from './logo.svg'
  3. import './App.css'
  4.  
  5. const onError = () => { 
  6.   // 这里故意抛出一个错误,让 sentry 捕获 
  7.   throw new Error("Break the world"
  8.  
  9. const btnStyles = {width: "200px", height: "50px"cursor"pointer", fontSize: "22px"
  10.  
  11. function App() { 
  12.   return ( 
  13.     <div className="App"
  14.       <header className="App-header"
  15.         <button style={btnStyles} onClick={onError}>Break the world</button> 
  16.         <img src={logo} className="App-logo" alt="logo" /> 
  17.       </header> 
  18.     </div> 
  19.   ); 
  20.  
  21. export default App; 

加入 .sentryclirc 文件,详情可看上篇 -> 快速使用 Docker 上手 Sentry-CLI - 创建一个版本

  1. [auth] 
  2. token=your-auth-token 
  3.  
  4. [defaults] 
  5. org=sentry 
  6. project=create-react-app-sentry 
  7. url=https://x.xxx.com 

编译项目

  1. yarn build 

最终项目结构

上传 Source Maps

在项目根目录中,进入 sentry-cli docker 容器 shell 环境:

  1. docker run --rm -it -v $(pwd):/work getsentry/sentry-cli /bin/sh 

设置变量:

  1. VERSION="1.0.0" # 版本号 
  2. SOURCEMAPS_PATH="./build/static/js" # 构建的 Source Maps 
  3. URL_PREFIX="~/static/js/" # 说明你的 js 相关文件被托管在 http://example.com/static/js/ 下 

执行如下命令:

  1. sentry-cli releases new "$VERSION" 
  2. # Created release 1.0.0. 
  3.  
  4. sentry-cli releases files "$VERSION" upload-sourcemaps "$SOURCEMAPS_PATH" --url-prefix "$URL_PREFIX" 
  5. # > Found 8 release files 
  6. # > Analyzing 8 sources 
  7. # > Analyzing completed in 0.101s 
  8. # > Rewriting sources 
  9. # > Rewriting completed in 0.034s 
  10. # > Adding source map references 
  11. # > Bundling files for upload...  
  12. # > Bundling completed in 0.064s 
  13. # > Optimizing completed in 0.002s 
  14. # > Uploading completed in 2.144s 
  15. # > Uploaded release files to Sentry 
  16. # > Processing completed in 0.077s 
  17. # > File upload complete (processing pending on server) 
  18.  
  19. # Source Map Upload Report 
  20. #   Minified Scripts 
  21. #     ~/static/js/2.42a26a34.chunk.js (sourcemap at 2.42a26a34.chunk.js.map) 
  22. #     ~/static/js/3.edf82367.chunk.js (sourcemap at 3.edf82367.chunk.js.map) 
  23. #     ~/static/js/main.d1a3df88.chunk.js (sourcemap at main.d1a3df88.chunk.js.map) 
  24. #     ~/static/js/runtime-main.b608d38a.js (sourcemap at runtime-main.b608d38a.js.map) 
  25. #   Source Maps 
  26. #     ~/static/js/2.42a26a34.chunk.js.map 
  27. #     ~/static/js/3.edf82367.chunk.js.map 
  28. #     ~/static/js/main.d1a3df88.chunk.js.map 
  29. #     ~/static/js/runtime-main.b608d38a.js.map 
  30.  
  31. sentry-cli releases finalize "$VERSION" 
  32. # Finalized release 1.0.0. 
  33.  
  34. exit 
  35. # 退出容器 

在 Sentry 后台,你应该看到如下图:

本地测试

如果你是 Mac 本地开发环境,可直接执行如下命令:

  1. pushd build; python -m SimpleHTTPServer; popd 

点击 Break the world 按钮:

正常情况下,错误已被上传到 Sentry,然后在错误详情中应看到如下图:

 

责任编辑:武晓燕 来源: 黑客下午茶
相关推荐

2021-08-31 05:01:46

DockerSentry版本

2021-09-08 09:22:34

SentryCLIOS

2023-02-02 08:41:14

React团队Vite

2024-01-30 08:30:41

TypeScript编译器类型

2009-11-02 17:54:44

VB.NET数组

2024-01-16 07:46:11

2020-11-16 09:50:43

hpm-cli

2024-03-26 00:00:01

2022-08-16 10:44:11

Sentry前端异常

2018-04-24 10:05:13

Docker工具交付

2020-11-10 09:19:23

Spring BootJava开发

2017-07-06 20:27:38

React.jsHtml5Javascript

2011-07-26 13:58:17

LINQ

2010-09-17 16:53:14

SQL中CREATE

2015-01-05 14:16:16

DockerFig自动化容器编排

2023-09-26 07:34:24

Docker部署依赖包

2021-05-31 11:30:43

Linuxsource命令

2021-05-16 08:22:19

Linux命令 Source

2023-12-28 10:58:45

2022-08-11 08:27:24

Sentry日志监控系统
点赞
收藏

51CTO技术栈公众号