大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南

在上一篇文章中介绍了代码重构指南的理论部分。

这篇文章是一些实战的内容,作为上一篇文章内容的补充。

我会在本文中介绍最流行的代码静态分析工具 SonarQube 的搭建和使用。

ichati.cn 的前后端都使用了 SonarQube 做代码质量分析。它帮我们发现了项目中很多问题,对项目质量很有帮助。


SonarQube 介绍


就像 Sonar 自己所宣传的那样,SonarQube 是代码静态分析这个领域中最强者之一,是行业的标准。

它的客户不仅有 Ebay、Microsoft、Hilton、Dell、Intel 等国际大厂,甚至包括 FBI、NASA、T- Moblie、MIT 这些政府、高校、通信等各大行业的顶级组织和机构。

据 Sonar 称,它们共清理了超过 5000 亿行代码。

SonarQube 的商业模式中规中矩。

和 strapi、discourse 这些开源项目的模式几乎一摸一样。都提供了开源版本和收费版本。

SonarQube 分为4 个等级。

社区版、开发版、企业版和数据中心版。

其中社区版是免费的。开发版是每年 150 美元、企业版是每年 20000 美元。数据中心版是每年 130000 美元。

可以看到,SonarQube 的定价还是非常高的。像 ichati.cn 这种小型团队,最多只能接受 150 美元的开发版。


前置条件与安装


SonarQube 的安装方式分两种。一种是 Docker,一种是压缩包安装。

以下是压缩包安装的方式。

使用 SonarQube 需要准备几个工具。Java、PostgreSQL、浏览器。


Java


SonarQube 使用 Java 编写,所以需要依赖 Java 环境。

目前最新版本的 SonarQube  是 10,这个版本必须使用 Java 17 版本。经过测试,Java 11 和 20 都不支持。

Java 17 下载地址:

www.oracle.com/java/techno…

在 terminal 运行:


java --version

确保 Java 版本正确。

image.png


PostgreSQL


SonarQube 在运行时会用到数据库,最受支持的数据库是 PostgreSQL。

除了 PostgreSQL,还可以选择 Oracle。MySQL 曾经也受到支持,但是最新版本的 SonarQube 已经不支持 MySQL 了。

几乎支持所有版本的 PostgreSQL。


SonarQube


下载 SonarQube。

SonarQube 10 下载地址:

www.sonarsource.com/products/so…

SonarQube 中会包含三个组件,分别是 CI/CD、主Server(WebServer、计算引擎和 SearchServer) 和 DatabaseServer。


SonarScanner


下载 SonarScanner。

SonarScanner 下载地址:

docs.sonarqube.org/10.0/analyz…

Sonar Scanner 下载完成后,需要把解压目录下的 /bin 目录添加到环境变量中,这样我们就可以直接通过命令行运行 SonnarScanner 了。

运行命令验证配置是否正确。


sonar-scanner -h

image.png


配置


在 SonarQube 解压目录中的 /conf/sonar.properties 文件中写入必要的配置。

首先这三项是必须的。分别是数据库的账号、密码和 url。


sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

另外还会有一些可选项,比如 IP、端口、上下文之类的。


sonar.web.host=0.0.0.0
sonar.web.port=9200
sonar.web.context=


启动项目


每个操作系统的启动命令略有不同,以下是各系统的启动命令:

  • Linux 上:<安装目录>/bin/linux-x86-64/sonar.sh start
  • macOS 上:<安装目录>/bin/macosx-universal-64/sonar.sh start
  • Windows 上:<安装目录>/bin/windows-x86-64/StartSonar.bat

启动成功后会在之前配置的 IP 端口上运行 WebServer。默认是 http://127.0.0.1:9000

默认账号密码是 Admin/Admin。

第一次登陆系统会提示修改密码。


分析项目


进入系统后创建项目,点击 create project,选择 Manually。

image.png

输入项目名、项目 key 和对应的分支。

image.png

创建完成后会进入项目主界面。

image.png

它可以从多个地方分析项目,这里我们选择本地项目 Locally。

选择 token 名称和过期时间,它会帮我们生成一个 token。

image.png

第二步是选择分析的语言和操作系统,它会生成对应的扫描命令。

image.png

它把参数放到了命令行中,其实我们可以通过另一种方式更方便的管理参数。


sonar.projectKey=ichati
sonar.sources=.
sonar.host.url=http://localhost:9200
sonar.token=YOUR_TOKEN

这样就可以直接在项目根目录下运行分析命令了。


sonar-scanner

image.png

稍等片刻,分析完成后,浏览器会自动刷新,展示分析结果。

image.png

可以看到分析的结果非常清晰。

有 Bugs、Vulnerabilities(漏洞)、Debt(技术债务)、Code Smells(代码的坏味道)、重复代码块和重复代码行等信息。

每一项指标都可以点击进去,查看具体的文件、行数和原因。

image.png

它甚至还对修复问题的时间做出了预测。针对每一项问题我们都可以进行评论和跟踪。

作为项目管理人员来说,这些功能都非常贴心。

我们对代码进行修复后,可以再次进行扫描来查看最新的代码健康状况。SonarQube 提供了非常强大的可视化来监控项目随着时间的变化。

SonarQube 的能力还远不止于此,它还可以与 CI/CD、DevOps 平台进行更深度的集成,比如 Jenkins、GithubActions 等,从而做到全方位分析系统的代码质量。

但是 ichati.cn 目前使用的 CICD 比较冷门,所以并没有在这方面和 SonarQube 做集成,所以这部分的内容就不展开讲了。

篇幅所限,本文暂时结束。

后面会持续更新,让我们一起期待《大型网站重构指南》的下一篇。

如果你对最新的技术感兴趣,特别是对 Web3、AI 相关的内容感兴趣,可以添加我的微信 LZQ20130415,拉你进群交流。



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
数据可视化 数据挖掘 Java
提升代码质量与效率的利器——SonarQube静态代码分析工具从数据到洞察:探索Python数据分析与科学计算库
在现代软件开发中,保证代码质量是至关重要的。本文将介绍SonarQube静态代码分析工具的概念及其实践应用。通过使用SonarQube,开发团队可以及时发现和修复代码中的问题,提高代码质量,从而加速开发过程并减少后期维护成本。 在当今信息爆炸的时代,数据分析和科学计算成为了决策和创新的核心。本文将介绍Python中强大的数据分析与科学计算库,包括NumPy、Pandas和Matplotlib,帮助读者快速掌握这些工具的基本用法和应用场景。无论是数据处理、可视化还是统计分析,Python提供了丰富的功能和灵活性,使得数据分析变得更加简便高效。
|
Java 测试技术
Spock单测利器,用了都说好
参考Spock单元测试框架介绍以及在美团优选的实践最近发现了一种写法简洁高效,一个单测方法可以测试多组测试数据,且测试结果一目了然的单测框架Spock。Spock国外的测试框架,其设计灵感来自JUnit、Mockito、Groovy,可以用于Java和Groovy应用的测试。尽管Spock写单测,需要使用groovy语言,但是groovy语言是一种弱类型,写法超级简单,我也是零基础的groovy新
787 0
Spock单测利器,用了都说好
|
监控 前端开发 JavaScript
AST 代码扫描实战:如何保障代码质量
2020 年 618 大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术?淘系前端团队特此推出「618 系列|淘系前端技术分享」,为大家介绍 618 中的前端身影。 本篇来自于频道与D2C智能团队的菉竹,为大家介绍本次 618 大促中是如何用代码扫描做资损防控的。
3137 0
AST 代码扫描实战:如何保障代码质量
|
2月前
|
人工智能 程序员 API
代码生成工具:提升开发效率的利器
随着技术的不断进步,以及在AI浪潮的推动下,代码生成工具逐渐成为开发者们提高效率的得力助手,代码生成工具在现代软件开发中扮演着越来越重要的角色。作为程序开发者,我觉得代码生成工具不是程序员的所有,但是它可以是程序员在开发中的“左膀右臂”,代码生成工具更多的是帮助开发者提高在日常开发中的效率。那么本文就来分享一下关于代码生成工具在开发过程中的应用情况,并对这一领域的未来发展提出些许期待和诉求。
44 7
代码生成工具:提升开发效率的利器
|
4月前
|
数据可视化 搜索推荐 JavaScript
SonarQube:解析代码质量,提升开发效率
在软件开发领域,代码质量管理是至关重要的。本文将介绍静态代码分析工具 SonarQube 的概念与实践,探讨其在代码质量管理中的作用和优势。我们将深入理解 SonarQube 的工作原理,了解如何通过该工具检测、评估和改善代码质量,以提高软件开发效率和可维护性。
|
4月前
|
安全 数据可视化 Oracle
提高代码质量,从静态代码分析工具SonarQube开始
在软件开发过程中,代码质量是至关重要的。而静态代码分析工具SonarQube可以帮助开发人员有效地管理代码质量。本文将介绍SonarQube的概念和实践,以及如何使用它来提高代码质量。
90 1
|
6月前
|
SQL Java 测试技术
微服务轮子项目(46) -SonarQube静态代码测试
微服务轮子项目(46) -SonarQube静态代码测试
47 0
|
8月前
|
jenkins Shell 测试技术
SonarQube实战:各种姿势的代码审查(二)
在Jenkins中集成SonarQube,各种姿势的代码审查。
103 0
|
Java jenkins 持续交付
SonarScanner 整合 SonarQube 代码质量检查完美方案
本篇内容记录了对SonarScanner、SonarQube 的代码检查。
242 0
SonarScanner 整合 SonarQube 代码质量检查完美方案
|
前端开发 关系型数据库 Java
代码质量检测神器——SonarQube
SonarQube是一款代码检测工具,支持对Java、C#、、Python、Go、Html、JavaScript、CSS等代码的质量检测。 因为SonarQube依赖数据库,可以用MySQL或PostgreSQL。SonarQube7.9以上版本不再支持MySQL,所以这里用PostgreSQL。
代码质量检测神器——SonarQube

热门文章

最新文章