跳至主要內容

代码扫描:SonarQube


代码扫描:SonarQube

静态代码扫描是CI/CD中重要的一环,可以在代码提交到代码仓库之后,在CI/CD流程中加入代码扫描步骤,从而及时地对代码进行质量的检查。这可以有效地降低后期维护成本,优化产品质量,提高产品交付速度。同时,静态代码扫描还可以将代码问题自动通知给开发人员,使得问题得到及时发现和解决。通俗地说,通过将静态代码分析融入到CI/CD流程中,可以进一步提高软件开发过程的效率和质量,帮助团队快速交付高质量的产品。

Sonarqube是一款开源的代码质量管理平台,用于检测代码中的错误,漏洞和代码规范,通过插件的机制,可以基于现有的Gitlab、Jenkins 集成、以便在项目拉取后进行连续的代码检查。旨在提供一个完整的代码质量管理解决方案。SonarQube的优势:

  • 支持众多计算机编程语言
  • 通过插件机制能集成IDE、Jenkins、Git等
  • 内置大量常用代码检查规则
  • 支持定制开发规则
  • 可视化界面
  • 支持从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目

Sonarqube的工作原理如下:

  • 代码收集:首先,Sonarqube向代码仓库请求代码,并将代码下载到本地。
  • 代码分析:然后,Sonarqube使用其内置的代码分析器分析代码并生成有关代码质量的重要信息,例如代码复杂性、代码重复性、代码测试覆盖率等。
  • 数据存储:Sonarqube将收集的数据存储在其数据库中,以供后续使用。
  • 报告生成:Sonarqube使用其内置的报告生成器生成各种数据可视化图表、报告和警告,并将其呈现给用户。
  • 反馈和持续改进:用户可以使用Sonarqube提供的反馈功能来共享意见和建议,以改善代码质量。此外,Sonarqube还提供了持续集成和持续交付等功能,以帮助团队在代码开发过程中不断改进代码质量。

安装

1.安装Java 17并配置环境变量

下载地址:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

#解压
tar zxf jdk-17_linux-x64_bin.tar.gz
mv jdk-17.0.9 /hos/jdk

#编辑/etc/profile文件,填入以下内容
export JAVA_HOME=/hos/jdk
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

#加载
source /etc/profile

2.安装数据库PostgreSQL 13

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql13-server
/usr/pgsql-13/bin/postgresql-13-setup initdb
systemctl enable postgresql-13
systemctl start postgresql-13

#创建用户和数据库
su - postgres
psql
create user sonarqube with password 'sonarqube';
create database sonarqube owner sonarqube;

3.配置内核参数

vi /etc/sysctl.conf
# 添加以下内容
vm.max_map_count=524288
fs.file-max=131072

#加载
sysctl  -p

vi /etc/security/limits.conf
# 添加以下内容
*	soft	nofile	65536
*	hard	nofile	65536

4.创建SonarQube启动用户(SonarQube 内置了 elasticsearch,elasticsearch 不允许使用 root 用户启动)

useradd sonarqube
passwd sonarqube
su - sonarqube

安装

建议下载长期支持版,下载地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.3.79811.zip

img.png

unzip sonarqube-9.9.3.79811.zip

cd sonarqube-9.9.3.79811

#配置数据库参数
vi conf/sonar.properties
# 更改数据连接配置
sonar.jdbc.username=test_user
sonar.jdbc.password=abc123
sonar.jdbc.url=jdbc:postgresql://localhost:5432/test_db

#启动,sonarqube使用9000端口,es使用9001端口
bin/linux-x86-64/sonar.sh start

访问

访问地址:http://服务器IP:9000,初始账号:admin,密码:admin

插件

自动安装

以安装中文插件为例:登录sonarqube,进入【Administration】➡【Marketplace】➡【Plugins】:

img.png

首次使用需要先同意风险提示:

img_1.png

搜索并下载中文插件 “Chinese Pack”:

img_2.png

安装完插件之后需要重启一下sonarqube才能生效,上方菜单栏的【Administration】➡【System】➡【Restart Rerver】:

img_3.png

手动安装

以上为自动安装流程,但是只能安装最新版本,如果使用的sonarqube历史版本,可能和最新插件不兼容,所以手动安装步骤如下:

首先参考自动安装中搜索插件的步骤,找到插件后进入插件主页,可以根据对应关系下载插件的历史版本,下载后上传到sonarqube的安装目录:sonarqube/extensions/plugins/,然后重启服务即可生效。

使用

1.Maven构建中使用sonarqube分析代码

1、在 pom.xml 文件中添加 Sonarqube 插件

<build>
    <plugins>
        <plugin>
            <groupId>org.sonarsource.scanner.maven</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
            <version>3.8.0.2131</version>
        </plugin>
    </plugins>
</build>

2、运行 Maven 构建命令来构建代码,并生成 Sonarqube 报告

$ mvn sonar:sonar