SonarQube 系列之 — 01 安装和扫描

一、sonar简介

SonarQube(简称Sonar)是管理代码质量的开放平台,它可以快速地对代码质量进行分析,并给出合理的解决方案,提高管理效率,保证代码质量。支持Java, Python, C#, JavaScript, PHP, VB.NET, TypeScript, Flex等等二十几种编程语言的代码质量管理与检测。 SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。官网文档

  • a. Web 服务器
  • b. 基于 Elasticsearch 的搜索服务器
  • c. 计算引擎服务器负责处理代码分析报告并保存在 SonarQube 数据库

Sonar Scanners:是用于将项目发布到Sonar进行审查的工具。也可以不用该工具。官网

SonarLint:是Eclipse,IDEA中的Sonar插件


SonarQube工作流程如上图:

  1. 开发人员在本地使用 SonarLint 运行分析 IDEs 上的代码;
  2. 开发者将自己的代码上传到持续集成服务器上,例如:git,SVN,TFVC,……;
  3. 持续集成服务器触发自动构建,SonarQube 扫描仪执行代码分析;
  4. 分析报告发送到 SonarQube 服务器进行处理;
  5. SonarQube 服务器分析和存储分析报告结果到 SonarQube 数据库中,并显示结果在 UI 界面中;
  6. 开发人员通过修改、评审代码来管理和减少他们 SonarQube UI 页面上的问题;
  7. 项目经理收到分析报告
    运维使用 api 来从 SonarQube 自动化配置和提取数据
    运维使用 JMX 监控 SonarQube 服务器

二、部署安装

1. 环境准备

  1. jdk 1.8版本

  2. sonarqube 7.6 downloads

  3. SonarQube+Scanner downloads

  4. 数据库,Sonarqube支持Mysql、PostgreSQL,SqlServer、Oracle等,选择合适的数据库,创建相应sonar库,设置用户名、密码,设置用utf-8编码

2. 安装包解压,并修改配置文件

将安装包上传到服务器,并且解压到/data目录下:

#cd /data
#unzip sonarqube-7.6.zip -d /data/sonarqube
#cd /data/sonarqube/sonarqube-7.6/conf
#vi sonar.properties

修改:数据库配置,以及数据库用户名,密码,这里用的数据库是PostgreSQL,具体内容如下

3. 启动Sonar,并验证

chmod -R 755 /data/sonarqube/sonarqube-7.6/
cd /data/sonarqube/sonarqube-7.6/bin/linux-x86-64
./sonar.sh start

#如果未完成启动可以使用console命令查看启动过程中的问题
./sonar.sh console
#sonar支持的启动参数: console | start | stop | restart | status | dump

#如果启动完成,但是依然不能访问,可以通过以下命令查看启动日志
cat $SONAR_HOME/logs/web.log

浏览器访问:http://localhost:9000(管理员:admin,密码:admin)。如访问失败,则可以在 ../logs/sonar.log 文件中查看日志。

4. 常用插件安装,汉化包Plugin Library

  1. 常用插件
    Chinese Pack -- 中文语言包,有兼容列表说明,这里是:sonar-l10n-zh-plugin-1.26.jar
    JaCoCo -- Java 代码覆盖率
    PMD -- Java 静态代码扫描
    Checkstyle -- Java 代码规范检查
    Crowd -- Crowd 插件,实现统一登录
    ShellCheck Analyzer -- Shell 代码规范检查
    SonarCSS、SonarHTML、SonarJS等 -- Sonar 针对不同编程语言代码分析

可百度云下载,链接:https://pan.baidu.com/s/1LhI_aoL0ZBXFAeVTBOqVDQ ,提取码:wlzj

  1. 放入sonar如下目录: sonarqube-7.6extensionsplugins

  2. 然后重启sonar就可以了。

其他补充

安装服务
如果是windows机器,可以打开 StartSonar.bat 文件所在目录,运行文件 InstallNTService.bat 将Sonar安装为服务

三、SonarQube的扫描

官网可以看到,SonarQube支持以下方式来进行项目的扫描;

1. 直接使用SonarQube scanner即扫描仪来进行分析

如果本地未搭建开发环境,此时使用SonarQube scanner就很方便

  1. 修改配置文件
    在sonar-scanner.properties中配置对应的sonar.host.url 、sonar.sourceEncoding

  2. 修改环境变量
    export SCAN_HOME=/data/sonarqube/sonar-scanner
    export PATH=$PATH:$SCAN_HOME/bin

  3. 修改项目配置文件
    在项目根路径下创建sonar-project.properties、配置信息如下:

sonar.projectKey=sonarScannerTest      
sonar.projectName=sonarScannerTest
sonar.version=1.0
sonar.sources=src
sonar.binaries=bin
sonar.language=java
sonar.sourceEncoding=UTF-8
  1. 执行和查看
    在项目根目录下执行命令,执行sonar-scanner/sonar-scanner -X命令
    执行成功的话,访问SonarQube查看项目扫描结果。

2. 使用SonarQube扫描仪分析Maven

  1. 找到位置 $MAVEN_HOME/conf下的settings.xml,添加如下配置:
<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>http://loaclhost:9000</sonar.host.url>
		<!-- 具有执行分析权限的用户名和密码 -->
		<sonar.login>analysis</sonar.login>
		<sonar.password>123456</sonar.password>
            </properties>
        </profile>
     </profiles>
</settings>

注意:直接加进去会报错,将<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>添加到文件原有的<pluginGroups></pluginGroups>中,将 到</profile>的内容添加到文件原有的<profiles></profiles>中

  1. 运行编辑器的命令窗口,在项目根目录下执行:
    mvn clean verify sonar:sonar
    或者
    mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar -Dsonar.scm.provider=git

  2. 执行成功的话,访问SonarQube查看项目扫描结果。

遇到报错:SCM provider autodetection failed. Both svn and git claim to support this project. Please use sonar.scm.provider to define SCM of your project.
在命令中添加参数 -Dsonar.scm.provider=git就好啦~

3. 使用SonarQube扫描仪分析ant

  1. 下载sonarqube-antjar包,放到ant的/lib目录下,在项目的build.xml中添加一个 sonar Ant target:
<!-- build.xml -->
<project name="My Project" default="all" basedir="." xmlns:sonar="antlib:org.sonar.ant">
...
  
<!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) -->
<property name="sonar.host.url" value="http://localhost:9000" />
<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
<property name="sonar.projectName" value="Example of SonarScanner for Ant Usage" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.sources" value="src" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />
...
 
<!-- Define SonarScanner for Ant Target -->
<target name="sonar">
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <!-- Update the following line, or put the "sonarqube-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
        <classpath path="path/to/sonar/ant/task/lib/sonarqube-ant-task-*.jar" />
    </taskdef>
 
    <!-- Execute SonarScanner for Ant Analysis -->
    <sonar:sonar />
</target>
  1. 在项目根目录下执行如下命令
    ant sonar

  2. 执行成功的话,访问SonarQube查看项目扫描结果。

4. 其他类型

使用SonarQube扫描仪分析Gradle
使用SonarQube扫描仪分析MSBuild
使用SonarQube扫描仪分析Azure DevOps
没用过,待补充

5. Eclipse+ SonarLint插件(连接到SonarQube平台)

  1. 打开Eclipse,选择Help->Eclipse Marketplace,在Find里面输入SonarQube,点击install
  2. 在SonarQube平台新建项目
  3. 在项目上右键—> Run as—>Run configuration—>Maven Build 下面新建 sonar:sonar
原文地址:https://www.cnblogs.com/liuyitan/p/13157042.html