SonarQube入门 - 搭建本地环境

一、SonarQube是什么?

SonarQube是一种自我管理的自动代码审查工具,可以系统地帮助您交付干净的代码。作为我们Sonar 解决方案的核心元素 ,SonarQube 集成到您现有的工作流程中并检测代码中的问题,以帮助您对项目执行持续的代码检查。该工具可分析 30 多种不同的编程语言 ,并集成到您的 CI 管道 和 DevOps 平台中 ,以确保您的代码符合高质量标准。

二、SonarQube 实例包含三个组件::

  1. SonarScanner:扫描器,负责将源文件进行代码分析,并将分析后的报告发送给SonarQube服务器
  2. SonarQube Server:SonarQube服务器,负责处理分析报告,后台管理等
  3. Database server:数据库服务器,负责存储数据

三 、安装

1. Java 环境
$~ java -version
java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
2. SonarQube 镜像下载
$> docker pull sonarqube
$> docker volume create --name sonarqube_data
$> docker volume create --name sonarqube_logs
$> docker volume create --name sonarqube_extensions
$> docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest

您现在可以通过 http://localhost:9000 浏览 SonarQube (默认系统管理员凭据是 admin/ admin

3. 安装中文插件
3.1 在线安装 (需点击 I understand the risk

3.2 手动安装

        1.sonar-|10n-zh-plugin。该版本需要与您的 SonarQube 版本兼容。

        2.将下载的 jar 放入 中 <SONARQUBE_HOME>/extensions/plugins,并删除相同插件的所有以前版本。

        3.重新启动您的 SonarQube 服务器。

四、搭建项目

1. 选择手动创建项目,根据提示一步步去创建项目...

2. 接下来要生成Token, 并且最好是把生成token事先保存下来:

Plain Text
sqp_603a34460857921938f47eb9e11757d821a9d6c2

3. 然后选择配置选项,选择项目构建技术, 选选择当前系统环境  
4. 根据提示下载并安装 SonarScanner
5. 下载后解压重命名后拷贝到 /usr/local/ 目录下,并设置环境变量
$ vi ~/.bash_profileexport SONAR_RUNNER_HOME=/usr/local/sonar-scannerexport
PATH=$PATH:$SONAR_RUNNER_HOME/bin$ source ~/.bash_profile
6. 设置好以后,通过以下方式验证一下,看到如下信息就表示设置成功
~ sonar-scanner -v
INFO: Scanner configuration file: /usr/local/Cellar/sonar-scanner/4.8.0.2856/libexec/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.8.0.2856
INFO: Java 11.0.17 Homebrew (64-bit)
INFO: Mac OS X 13.4.1 x86_64
7. 修改sonar-scanner文件夹下的 conf/sonar-scanner.properties配置文件,打开以下两行代码注释,后保存
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8

五、扫描项目

1. 进入到项目要目录执行以下命令
sonar-scanner \-Dsonar.projectKey=test-project \-Dsonar.sources=. \-Dsonar.host.url=http://localhost:9000 \-Dsonar.login=sqp_603a34460857921938f47eb9e11757d821a9d6c2

或 在项目根目录创建 sonar-project.properties文件:

// Properties
# 本地自己起的sonarqube服务地址
sonar.host.url=http://127.0.0.1:9000/
# Sonar 令牌
sonar.login=sqp_603a34460857921938f47eb9e11757d821a9d6c2
# Sonar项目标识,在 SonarQube实例下必须唯一
sonar.projectKey=test-project
sonar.projectName=test-project# 项目版本
sonar.projectVersion=1.4.0
# 代码文件的编码
sonar.sourceEncoding=UTF-8
# 项目代码与 sonar-project.properties 文件的相对路径
sonar.sources=./src
# 排除不参与代码分析的文件或目录
sonar.exclusions=/node_modules/
sonar.tests=./src
sonar.test.inclusions=**/*.spec.ts
2. 运行sonar-scanner命令,看到类似以下输出就说明扫描成功~

3. 刷新 http://localhost:9000 查看报告

六、高级进阶

  • 更换数据库,如PostgreSQL、MySQL...
  • GitLab integration
  • GitLab 关联 SonarQube 实现CI/CD代码扫描
  • SonarQube结合GitLab CI/CD自动检测Push和Merge Request的增量代码质量
  • SonarQube集成gitlab/jenkins

七、补充

1. SonarQube 和 eslint 区别

  • ESLint:它主要用于JavaScript和TypeScript代码的Linting(即语法检查和代码风格检查)。ESLint是一个可扩展的工具,允许你自定义规则,以适应特定的编码风格和规范。ESLint的重点是实时反馈,它可以轻松集成到IDE和编辑器中,通常用于开发过程中。
  • SonarQube:它是一个多语言的代码质量检查工具,支持包括Java,C#,JavaScript,TypeScript在内的30多种语言。SonarQube不仅检查语法错误和代码风格,还分析代码的复杂性,检测可能的漏洞,做代码覆盖率统计等。它的主要目标是长期的代码质量跟踪和管理,通常在CI/CD流水线中使用。

简单来说,ESLint主要用于JavaScript/TypeScript的语法和风格检查,强调的是实时反馈;而SonarQube是一种多语言支持,更全面的代码质量管理工具,强调的是代码质量的长期跟踪和管理。

参考文档:

  • Docs SonarQube
  • macOS sonar-scanner环境搭建
  • SonarQube代码质量检查平台

其他类似工具:

  • DeepSource
  • DeepScan

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Meta-Transformer 多模态学习的统一框架

Meta-Transformer是一个用于多模态学习的新框架&#xff0c;用来处理和关联来自多种模态的信息&#xff0c;如自然语言、图像、点云、音频、视频、时间序列和表格数据&#xff0c;虽然各种数据之间存在固有的差距&#xff0c;但是Meta-Transformer利用冻结编码器从共享标记空间…

Linux lvs负载均衡

LVS 介绍&#xff1a; Linux Virtual Server&#xff08;LVS&#xff09;是一个基于Linux内核的开源软件项目&#xff0c;用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡&#xff0c;从而提高系统的可扩展性和可…

01-1 搭建 pytorch 虚拟环境

pytorch 管网&#xff1a;PyTorch 一 进入 Anaconda 二 创建虚拟环境 conda create -n pytorch python3.9注意要注意断 VPN切换镜像&#xff1a; 移除原来的镜像 # 查看当前配置 conda config --show channels conda config --show-sources# 移除之前的镜像 conda config --…

量化:numpy基础

文章目录 ndarray创建array创建顺序数组改变数据类型nan筛选元素去重重塑 ndarray numpy最重要的一个特点是其N维数组对象ndarry&#xff0c;它是一系列同类型数据的集合 创建array ndarry的创建方式如下&#xff1a; numpy.array(object, dtype None, copy True, order …

c语言——计算两个正整数的最大公倍数

//计算两个正整数的最大公倍数 //例如40和60的最大公约数为20. //计算两个正整数的最大公倍数 //例如40和60的最大公约数为20. #include<stdio.h> int main() {int a,b,temp,i;printf("Input a & b:");scanf("%d%d",&a,&b);if(a<b){…

Go -- 测试 and 项目实战

没有后端基础&#xff0c;学起来真是费劲&#xff0c;所以打算速刷一下&#xff0c;代码跟着敲一遍&#xff0c;有个印象&#xff0c;大项目肯定也做不了了&#xff0c;先把该学的学了&#xff0c;有空就跟点单体项目&#xff0c;还有该看的书.... 目录 &#x1f34c;单元测试…

从Spring的角度看Memcached和Redis及操作

目录 Memcached和Redis的区别 适用场景 Memcached配置使用 Redis配置使用 在SpringBoot的框架里&#xff0c;有直连Redis的SDK却没有Memcached的&#xff0c;可见相比地位。不过各有各的适应场景&#xff0c;Redis这个单线程模型确实非常强。 Memcached和Redis的区别 共同…

redis的数据类型及操作

三、redis的数据类型 String字符串 set、get mset setex setnx 会检测键值对存不存在&#xff0c;如果存在不发生变化&#xff0c;如果存在则增加键值对 只增加 而set会覆盖原来的值 增加、修改 setrange 有下标则替换&#xff0c;没有则添加 getrange 获取全…

剑指 Offer 54. ! 二叉搜索树的第k大节点 (考察二叉树的中序遍历)

剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树&#xff0c;请找出其中第 k 大的节点的值。 我的思路是&#xff1a;用一个全局arrayList不断收集“逆向”中序遍历该搜索二叉树所需要的答案 class Solution {int res, k;public int kthLargest(TreeNode root, int …

为Stable Diffusion web UI开发自己的插件实战

最近&#xff0c;Stable Diffusion AI绘画受到了广泛的关注和热捧。它的Web UI提供了了一系列强大的功能&#xff0c;其中特别值得一提的是对插件的支持&#xff0c;尤其是Controlnet插件的加持&#xff0c;让它的受欢迎程度不断攀升。那么&#xff0c;如果你有出色的创意&…

GLM模型介绍

paper: 《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》 摘要&#xff1a; 我们提出了一个基于自回归空白填充的通用语言模型&#xff08;GLM&#xff09;来解决这一挑战。GLM通过添加2D位置编码和允许任意顺序预测跨度来改进空白填充预训…

机器学习笔记之优化算法(四)线搜索方法(步长角度;非精确搜索)

机器学习笔记之优化算法——线搜索方法[步长角度&#xff0c;非精确搜索] 引言回顾&#xff1a;精确搜索步长及其弊端非精确搜索近似求解最优步长的条件反例论述 引言 上一节介绍了从精确搜索的步长角度观察了线搜索方法&#xff0c;本节将从非精确搜索的步长角度重新观察线搜…

蓝网科技股份有限公司存在SQL注入

书把他从沉重的生活中拉出来&#xff0c;使他的精神不致被劳动压的麻木不仁。通过不断地读书&#xff0c;他认识到&#xff0c;只有一个人对世界了解得更广大&#xff0c;对人生看得更深刻&#xff0c;那么&#xff0c;他才可能对自己所处的艰难和困苦有更高意义的理解&#xf…

AI 绘画Stable Diffusion 研究(五)sd文生图功能详解(下)

大家好&#xff0c;我是风雨无阻。 上一篇文章详细介绍了sd文生图的功能及使用注意事项&#xff0c;感兴趣的朋友可以前往查看&#xff1a;AI 绘画Stable Diffusion 研究&#xff08;四&#xff09;sd文生图功能详解&#xff08;上&#xff09; 。 那今天这篇文章&#xff0c;我…

论文阅读 - Social bot detection in the age of ChatGPT: Challenges and opportunities

论文链接&#xff1a;https://www.researchgate.net/publication/371661341_Social_bot_detection_in_the_age_of_ChatGPT_Challenges_and_opportunities 目录 摘要&#xff1a; 引言 1.1. Background on social bots and their role in society 1.2. The rise of AI-gene…

计算机是如何工作的(笔记)

目录 寄存器 操作系统 进程&#xff08;process&#xff09; CPU pcb中关于进程调度相关的属性 寄存器 用来存储数据的单位&#xff0c;是CPU的一部分 寄存器&#xff0c;存储空间更小&#xff0c;访问速度更快&#xff0c;成本更高&#xff0c;掉电后数据会丢失 寄存器…

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞&#xff0c;如果定时任务出现异常阻塞后&#xff0c;将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高&#xff0c;我们可以通过两种方法将定时任务变成…

【LeetCode 75】第十五题(1456)定长子串中元音的最大数目

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 就难度而言&#xff0c;我觉得算不上中等&#xff0c;因为和上一题基本一致&#xff0c;只不过上一题是求最大平均数&#xff0c…

大麦订单生成器 大麦订单购买截图生成

后台一键生成链接&#xff0c;独立后台管理 教程&#xff1a;修改数据库config/Conn.php 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

过滤器,监听器与拦截器的区别

过滤器&#xff0c;监听器与拦截器的区别 ​ 过滤器和监听器不是Spring MVC中的组件&#xff0c;而是Servlet的组件&#xff0c;由Servlet容器来管理。拦截器是Spring MVC中的组件&#xff0c;由Spring容器来管理 ​ Servlet过滤器与Spring MVC 拦截器在Web应用中所处的层次如…