《企业实战分享 · SonarQube10.x 详细教程》

news2024/9/20 16:52:46

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗

🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • Sonar 简介与安装
      • 技术简介
      • 版本选择
      • 开始安装
      • 汉化一下
    • Sonar 接入项目
      • 几种方式
      • Maven 接入
      • IDEA 整合
      • GitLab CI 整合
      • 关于 DevOps
    • 总结陈词

写在前面的话

介绍文章之前,先胡扯一下,近期由于私人有一些事情,占用了较多时间,又不想继续潦草的发文,违背了初心。因此,索性暂停了一段时间的博客编写。目前,此间事毕,又可以继续回归博客了,很愉快。

好了,废话不多说,先上一篇近期工作中关于质量管理工具 Sonar 在企业 Devops 中的实战运用分享。

熟悉博主的人可能看过之前已经分享过 Sonar 相关文章了,这边怎么又重复了。其实不然,之前那篇从开发人员角度说明如何使用,本篇主要介绍Sonar 从安装到接入的完整流程。

参考链接:《企业实战分享 · Sonarqube 代码走查》


Sonar 简介与安装

Tips:为保证技术连贯,照例先来一段简介,熟悉的人可以跳过。

技术简介

Sonar 简介

Sonar(通常指 SonarQube)是一款开源的代码质量管理工具,旨在帮助开发团队持续监控和改善代码质量。

它支持多种编程语言,并提供以下功能:

  1. 代码分析:SonarQube能够静态分析代码,识别潜在的缺陷、漏洞和代码异味(code smells)。
  2. 质量指标:提供多种质量指标,如代码覆盖率、重复代码、复杂度等,帮助团队了解代码的健康状况。
  3. 持续集成:可以与CI/CD工具集成,自动化代码质量检查。
  4. 报告和可视化:生成详细的报告和可视化图表,便于团队理解和跟踪代码质量的变化。

Sonar 场景

SonarQube在企业中的应用场景非常广泛,以下是一些典型的使用场景:

  1. 代码审查:在代码提交之前,通过SonarQube进行静态分析,确保代码符合质量标准。
  2. 持续集成:与CI/CD工具(如GitLab CI、Jenkins等)集成,在每次构建时自动进行代码质量检查。
  3. 技术债务管理:帮助团队识别和管理技术债务,制定改进计划。
  4. 合规性检查:确保代码符合行业标准和法规要求。

总结一下

SonarQube是一个强大的工具,可以帮助企业提高代码质量,降低技术债务。与GitLab CI的整合使得代码质量检查自动化,提升了开发效率和代码的可靠性。通过这种方式,团队可以在开发过程中持续监控和改善代码质量,确保交付高质量的软件产品。


版本选择

在之前的博文《企业实战分享 · Sonarqube 代码走查》中,使用的版本还是9.x,现又收到Sonar的相关部署工作。

先看了一下官网,已经更新到10.6了,如下所示。

那是继续图省事用老版本,还是尝试一下新的?这个可能是大部分人在安装相关中间件时的犹豫点。

博主认为,不需要犹豫,这如果是SpringBoot、JDK等关系到代码的核心版本,才需要召开技术评审。而这只是与开发可以解耦的质量检测,涉及到公司开发的 Devops 流程,有最新的版本为何不用。

开始安装

Sonar10.6 的安装不难,但是有一些前置要求,JDK必须是17以上,同时数据库需要使用 PostgreSQL。

开始安装就找一台服务器,准备开始吧。

具体要求,可以参考:官网文档

Step1、安装 JDK17

这个操作基本都会,不详细描述了。

官网下载压缩包、丢到服务器、修改环境变量、生效环境变量、确认版本,搞定。

Step2、安装 PostgreSQL

这个操作基本也会了,跳过。

要注意的是,安装完成后,需要创建一个Sonar专用的用户和数据库,因为后续会产生若干表,影响其他就不好了。

# 切换到postgres用户
su - postgres

# 执行创建指令
psql
create user sonarqube with password 'sonarqube';
create database sonarqube owner sonarqube;
grant all  on database sonarqube to sonarqube;
\q
su -

Step3、安装 Sonar

官网下载最新的压缩包,丢到服务器上,解压就好了。

需要注意的主要两个事情:

1、编辑 /conf/sonar.properties 以配置数据库设置。

sonar.jdbc.url=jdbc:postgresql://ip/sonar
sonar.jdbc.user=xx
sonar.jdbc.password=xx

2、注意一下不能使用 root 用户操作(和内部使用的ES有关),因此还需要专门创建一个 sonar 用户。

sudo useradd sonar
sudo passwd sonar
sudo chown sonar:sonar /opt/sonar/
sudo chmod 700 /opt/sonar/

然后,直接启动即可:

/bin/linux-x86-64/sonar.sh start

启动后访问如下地址:http://127.0.0.1:9000/sonar

汉化一下

有两种汉化方式:

方式一: 用页面自带的

Administrator --> Marketplace --> chinese --> install (如果没有install 字样,在下图红色圆圈处,有"我同意",先点击一下)

方式二:

手动去下载汉化插件包

打开页面:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/latest

将插件放置到这个 ~/sonarqube-xxx/extensions/plugins 目录下,然后重启服务。

汉化后:

界面如下,比9.x的老页面清爽多了。


Sonar 接入项目

几种方式

SonarQube 接入项目的方式主要有以下几种:

1、Maven 插件:

使用 SonarQube 的 Maven 插件,可以在 Maven 构建过程中自动分析代码。通过在 pom.xml 中配置相关的插件和属性,执行 mvn sonar:sonar 命令即可将代码分析结果上传到 SonarQube 服务器。

2、SonarScanner:

SonarScanner 是 SonarQube 提供的独立扫描工具,支持多种编程语言。可以通过命令行运行 SonarScanner,配置 sonar-project.properties 文件来指定项目的相关信息,然后执行 sonar-scanner 命令进行代码分析。

3、IDE 插件:

SonarQube 还提供了一些集成开发环境(IDE)的插件,比如 IntelliJ IDEA 和 Eclipse 插件,可以在开发过程中实时分析代码质量。

4、CI/CD 集成:

可以将 SonarQube 集成到持续集成/持续部署(CI/CD)流程中,例如 Jenkins、GitLab CI、GitHub Actions 等,通过配置相应的步骤在构建过程中自动执行代码分析。


Maven 接入

**描述:**通过绑定Sonar的Maven插件,可以使用Sonar进行代码扫描。

步骤:

Step1、添加Maven插件

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.10.0.2594</version>
</plugin>

Step2、添加配置信息

注意,也可以在settings.xml配置,也可以命令行传入

<!-- SonarQube服务器地址-->
<sonar.host.url>http://192.168.5.98:9000/sonar</sonar.host.url>
<!-- 访问令牌或⽤户名密码 -->
<sonar.token>sqa_21f5d7a5d8a2d155b9d102676281364ee660fcb6</sonar.token>
<!--        <sonar.login>admin</sonar.login>-->
<!--        <sonar.password>sonar</sonar.password>-->

Step3、执行Maven命令

mvn sonar:sonar

Step4、进入网站

踩坑说明一

报错:Your project contains .java files, please provide compiled classes with sonar.java.binaries property, or exclude them from the analysis with sonar.exclusions property.

解答:这个提示表明 SonarQube 在分析你的项目时发现了 .java 文件,但没有找到相应的编译类文件。要解决这个问题,你可以选择提供编译后的类文件,或者排除这些 .java 文件。确保你的 Java 项目已经编译,并且生成了 .class 文件。通常情况下,你可以使用 Maven 或 Gradle 来编译项目。如果还不可以,设置 sonar.java.binaries 属性,在你的 pom.xml 文件或 settings.xml 文件中,添加 <sonar.java.binaries>target/classes</sonar.java.binaries> 配置。

实战:编译一次,再执行就可以了。

踩坑说明二

报错:org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

解答:这个错误信息表明你正在使用的 Java 运行时版本过低,无法识别由更高版本的 Java 编译的类文件。具体来说,class file version 61.0 对应于 Java 17,而 class file version 55.0 对应于 Java 11。

实战:切换一个JDK17的项目就可以了,测试后可以了。继续测试JDK采用21也可以。

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

踩坑说明三

报错:Not authorized. Please check the user token in the property ‘sonar.token’ or the credentials in the properties ‘sonar.login’ and ‘sonar.password’.

解答:这个错误提示表明你在执行 SonarQube 分析时没有正确的授权。


IDEA 整合

这部分之前文章整理过,大差不差,就不赘述了。

参考链接:《企业实战分享 · Sonarqube 代码走查》


GitLab CI 整合

整合步骤

SonarQube与GitLab CI的整合是一个非常常见的场景,具体步骤如下:

  1. 安装SonarQube:在服务器上安装并配置SonarQube。
  2. 配置SonarQube项目:在SonarQube中创建项目,并获取项目密钥和令牌。
  3. GitLab CI配置:
    • 在GitLab项目中,编辑.gitlab-ci.yml文件,添加SonarQube的分析步骤。
    • 使用SonarScanner(SonarQube的分析工具)进行代码分析,并将结果发送到SonarQube服务器。
stages:
  - build
  - test
  - sonar_analysis

build_job:
  stage: build
  script:
    - echo "这是构建阶段,$SONAR_HOST_URL"
  tags:
    - onelink-lb
  only:
    - master
    - /^release.*$/

test_job:
  stage: test
  script:
    - echo "这是测试阶段,$CI_PROJECT_NAME"

sonar_analysis_job:
  stage: sonar_analysis
  script:
    - echo "开始 SonarQube 代码分析"
    - echo SONAR_HOST_URL=$SONAR_HOST_URL, SONAR_LOGIN_TOKEN=$SONAR_TOKEN
    - mvn clean verify sonar:sonar -Psonar -Dmaven.test.skip=true -Dsonar.language=java -Dsonar.inclusions=**/*.java -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN
  tags:
    - onelink-lb
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push"'  # 触发条件
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'  # 合并请求时触发

实战分享
实际开发中,使用的ci文件如下。

实现的效果就是当程序猿提交代码到指定分支时,会触发相应CI策略,前往相应的Runner服务器,执行相关的Maven指令(本质还是Maven方式),最终将代码扫描结果在 Sonar网站展示。

stages:
  - Code Analysis
  - Testing
  - Deploy Framework

.common_def: &common_def
  # 省略

.tag_def: &tag_def
  # 省略

Unit Testing:
  # 省略

Deploy Framework:
  # 省略

Code Analysis:
  <<: *tag_def
  stage: Code Analysis
  rules:
    - if: '$CI_PIPELINE_SOURCE == "sonar"'
    - if: '$CI_COMMIT_BRANCH == "dev-lw"'
  script:
    - echo SONAR_HOST_URL=$ZT_SONAR_HOST_URL,  SONAR_LOGIN_TOKEN=$ZT_SONAR_LOGIN_TOKEN
    - mvn clean verify sonar:sonar -Psonar -Dmaven.test.skip=true -Dsonar.language=java -Dsonar.inclusions=**/*.java -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.host.url=$ZT_SONAR_HOST_URL -Dsonar.login=$ZT_SONAR_LOGIN_TOKEN  -s settings_zoe.xml


关于 DevOps

DevOps 是一种软件开发和运维的文化、实践和工具集,旨在通过促进开发(Dev)和运维(Ops)团队之间的协作与沟通,提高软件交付的速度和质量。DevOps 强调自动化、持续集成、持续交付(CI/CD)、监控和反馈等理念,以实现更快速、更高效的软件开发和交付流程。

GitLab CI 与 SonarQube 整合

GitLab CI与SonarQube的整合可以被视为一种DevOps实践。

  1. 持续集成(CI):GitLab CI 是一个持续集成工具,可以自动化构建、测试和部署过程。通过将代码提交到 GitLab,CI 会自动触发构建和测试,确保代码的质量。
  2. 代码质量检查:SonarQube 是一个代码质量管理工具,可以分析代码中的缺陷、漏洞和代码异味。将 SonarQube 集成到 GitLab CI 流程中,可以在每次构建时自动检查代码质量,确保代码符合质量标准。
  3. 反馈循环:通过将代码质量检查与 CI 流程结合,开发团队可以快速获得反馈,及时发现和修复问题。这种快速反馈机制是 DevOps 的核心理念之一。
  4. 自动化:DevOps 强调自动化,而 GitLab CI 和 SonarQube 的整合可以实现自动化的代码质量检查,减少手动干预,提高效率。

总结一下,将 GitLab CI 与 SonarQube 整合是 DevOps 实践的一部分,能够帮助团队提高软件开发的效率和质量,促进开发与运维之间的协作。通过这种整合,团队可以实现更快速的迭代和更高的代码质量,从而更好地满足业务需求。


总结陈词

💗 本篇文章介绍了质量检测工具 Sonar 在企业中的实战接入,属于 DevOps 的一部分,希望可以帮助到大家。

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

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

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

相关文章

线下活动|落地武汉、长沙高校,10场AI沙龙火爆来袭

人工智能作为引领时代发展的重要力量&#xff0c;正以前所未有的速度改变着我们的世界&#xff0c;而智能体因其开发门槛低、应用场景广泛等优势成为最热门的AI应用方向之一&#xff0c;未来将拥有庞大生态。为此&#xff0c;百度百科校园在开学季的9月联合文心智能体平台在武汉…

清理C盘缓存的垃圾,专业清理C盘缓存垃圾的步骤与策略

在维护计算机系统的过程中&#xff0c;定期清理C盘&#xff08;通常是系统盘&#xff09;中的缓存和垃圾文件是一项至关重要的任务。这不仅能有效释放磁盘空间&#xff0c;提升系统性能&#xff0c;还能减少因磁盘空间不足导致的程序运行缓慢或错误。以下是一系列专业且安全的步…

品胜电子携手成都蓉城,共谋“商业+体育”合作新篇章

9月14日,广东品胜电子股份有限公司(以下简称品胜电子)与成都蓉城足球俱乐部(以下简称成都蓉城)正式签约,成为其官方合作伙伴。全国数码3C行业领军企业与中超强队的携手合作,标志着双方将在“商业体育”融合的模式下资源共享相互赋能,提升其品牌影响力。 蓉城足球俱乐部相关人士…

HTB-Included(本地文件包含、TFTP文件上传、LXD容器挂载目录)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Included靶机 渗透过程 信息搜集 rustscan工具 通常只扫描TCP端口&#xff0c;所以我们要配合nmap进行-sU 执行udp端口扫描 可以观察到 服务器开放了TFTP UDP端口&#xff0c;用来进行文件传输协议…

2024年度10款视频剪辑软件分享

在视频创作日益盛行的今天&#xff0c;一款强大而易于上手的视频剪辑软件成为了每位创作者不可或缺的工具。无论是专业电影制作人、Vlog博主&#xff0c;还是视频编辑爱好者&#xff0c;都能在市场上找到适合自己的那一款。以下是2024年度推荐的10款视频剪辑软件&#xff0c;涵…

推荐一款免费的图片压缩软件,自媒体运营者、摄影爱好者的必备工具

随着社会的发展&#xff0c;咱们生活里的各种新鲜玩意儿越来越多&#xff0c;互联网就像是一个超级大的市场&#xff0c;啥都能干。比如说&#xff0c;咱们现在拍照、看视频、刷朋友圈、逛网店&#xff0c;这些都离不开图片。但是呢&#xff0c;图片这玩意儿&#xff0c;它占地…

self-play RL学习笔记

让AI用随机的路径尝试新的任务&#xff0c;如果效果超预期&#xff0c;那就更新神经网络的权重&#xff0c;使得AI记住多使用这个成功的事件&#xff0c;再开始下一次的尝试。——llya Sutskever 这两天炸裂朋友圈的OpenAI草莓大模型o1和此前代码能力大幅升级的Claude 3.5&…

跨平台Markdown写作软件:小书匠

本文软件由好友 Eduna 推荐&#xff1b; 什么是小书匠 &#xff1f; 小书匠是一款本地优先&#xff0c;去中心化&#xff0c;分布式&#xff0c;支持选择性同步的全平台覆盖笔记软件&#xff0c;是专注于 markdown 写作的客户端编辑器。它支持多种平台&#xff0c;包括 Windows…

Qt Model/View之代理

概念 与模型-视图-控制器模式不同&#xff0c;模型/视图设计没有包含一个完全独立的组件来管理与用户的交互。通常&#xff0c;视图负责向用户展示模型数据&#xff0c;并负责处理用户输入。为了在获取输入的方式上具有一定的灵活性&#xff0c;交互由委托执行。这些组件提供输…

5 个最佳开源无代码项目管理工具

想象一下&#xff0c;你是一名项目经理&#xff0c;每天早上刚坐到办公桌前&#xff0c;咖啡还在手里&#xff0c;你的手机和电脑屏幕上已经被各种未完成的任务、项目更新和团队消息填满。 你快速浏览着的电子邮件&#xff0c;分配任务的通知不断弹出&#xff0c;而每一个通知…

Shopee虾皮:广告类型选择与效果优化要点

Shopee虾皮作为东南亚增势迅猛的电商平台&#xff0c;是很多跨境卖家出海东南亚的首要选择。这势必带来强烈的竞争&#xff0c;因此&#xff0c;如果卖家想要突出重围&#xff0c;广告投放和优化则格外重要。 一、虾皮的广告类型 1.关键词广告 当买家搜索的关键字与卖家投放的…

进程优先级和环境变量

1.优先级 1.优先级的概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先级&#xff0c;linux中进程的优先级数字越小&#xff0c;优先级越高&#xff1b; 2.为什么要有优先级 进程访问的资源(cpu)始终是有限的&#xff0c;而系统中进程又是比较多的&#xff0c;所以进…

【Jetson】Jetson Orin NX刷机教程

Jetson Orin NX刷机教程 一、硬件准备二、安装SDK Manager三、在线或离线刷机 一、硬件准备 需要将Jetson Orin NX的GND和FC_REC引脚短接&#xff0c;设备进入刷机模式。然后用Type-C线将其余主机连接&#xff0c;主机的选择可以为ubuntu虚拟机或者ubuntu系统。注意如果选择虚…

Mybatis接受查询结果的情况

Mybatis接受查询结果的情况 1.查询结果为单条数据时 1&#xff09;通过实体类对象接受 这种方式最直观&#xff0c;当查询结果只有一条记录时使用。在 mapper 接口中定义一个方法&#xff0c;并指定返回类型为对应的实体类类型。mapper.xml 文件中的 <select> 标签使用…

vue3项目打包后多级嵌套路由子路由刷新后空白问题

问题描述 Vue3项目打包发布后&#xff0c;进入个人中心界面,刷新后页面出现空白。前提是已经配置了重定向到index.html。在访问/personal/profile这种路由的时候刷新后页面会出现空白。在App.vue中有一个routerview ,personal界面中有一个routerview .界面如图所示 router.js…

【Python基础】Python错误和异常处理(详细实例)

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、Python中的错误类型三、Python异常处理机制3.1 try-except语句3.2 try-except-else语句3.3 try-fi…

GD - GD32350R_EVAL - PWM实验和验证2 - EmbeddedBuilder - 无源蜂鸣器

文章目录 GD - GD32350R_EVAL - PWM实验和验证2 - EmbeddedBuilder - 无源蜂鸣器概述笔记先前失败的实验电路图本次成功的图 - 无源蜂鸣器电路模块接入实验模块实验软件工程主循环实现PWM频率改变蜂鸣器声音大小实验结果和官方给的蜂鸣器频率响应曲线基本一样看看实际波形END G…

智慧交通基于yolov8的行人车辆检测计数系统python源码+onnx模型+精美GUI界面

【算法介绍】 智慧交通中&#xff0c;基于YOLOv8的行人车辆检测计数系统是一项高效、准确的技术解决方案。该系统利用YOLOv8这一先进的目标检测算法&#xff0c;结合深度学习技术&#xff0c;能够实时检测并准确计数道路上的行人和车辆。YOLOv8在保证检测速度的同时&#xff0…

视图(mysql)

一、什么是视图 视图是⼀个虚拟的表&#xff0c;它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数 据&#xff0c;⽽是通过执⾏查询来动态⽣成数据。⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管 理。视图本⾝并不占⽤物理存储空间&#xff0c;它仅…

linux命令用于删除文本文件中的重复行的命令uniq详解

目录 一、概述 二、基本用法 1、uniq 命令的基本语法 2、常用选项 3、获取帮助 三、主要功能 1. 识别并删除相邻重复行 2. 保留重复行的第一个实例 3. 统计重复次数 4. 忽略指定列的比较 四、示例 1. 删除相邻重复行 2. 显示每一行及其重复次数 3. 只显示重复行 4. …