基于SonarQube代码质量管理

SonarQube是什么?

官网:https://www.sonarqube.org/
Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。 Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。 支持java, JavaScrip, Scala 等等二十几种编程语言的代码质量管理与检测。 SonarQube®是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。

Sonar环境要求

  1. SonarQube服务器的小型(单个或小型团队)实例至少需要2GB的RAM才能有效运行,而OS则需要1GB的可用RAM。
  2. SonarQube必须安装在具有出色读写性能的硬盘驱动器上。最重要的是,“数据”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在该索引上进行大量的I / O。因此,出色的读写硬盘驱动器性能将对SonarQube服务器的整体性能产生重大影响。
  3. SonarQube在服务器端不支持32位系统。但是,SonarQube确实在扫描仪侧支持32位系统。

SonarQube的架构


包含4个部分

  1. Project:需要被分析的源码
  2. SonarQube Scanner:用于执行代码分析的工具,可配置在项目的根目录(maven项目pom.xml同级)下执行
  3. SonarQube Server:显示分析结果的Web Server
  4. SonarQube Database:分析结果存储的数据库

Linux下的安装与部署

1.前期准备
  1. JDK: 选择版本1.8
  2. 数据库:MySQL5.6 或者 5.7
  3. SonarQube:选择7.6, 目前最新版本8.2不支持jdk1.8
  4. SonarQube Scanner: sonar-scanner-3.3.0.1492
2.安装包下载

jdk和数据库就不说了,SonarQube可以选择在官网下载:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip,速度比较感人。

sonarqube-7.6.zip
https://pan.baidu.com/s/1gXmglSXm8D_GCU3QYGSzpQ 提取码:zqbd

sonar-scanner-3.3.0.1492
https://pan.baidu.com/s/1gkRnbw9vzI4TEaX86cKXSQ 提取码:5s5p

(下面是window版本的scanner 有需要可以使用,部署过程跟linux差不多)
sonar-scanner-3.3.0.1492-window
链接:https://pan.baidu.com/s/1ZPMWqiYDxKs4UCDLK-q7bQ 提取码:jqom

3.MySQL环境配置
  1. 创建一个数据库 sonar

    CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    
  2. 创建一个sonar用户,设置用户名账号密码为sonar:
    CREATE USER 'sonar' IDENTIFIED BY 'sonar';
    
  3. 把已创建的数据库sonar的所有权限赋予给sonar用户:
    GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
    GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
    FLUSH PRIVILEGES;
    
4.SonarQube环境配置

(如果jdk环境没有配置的需配置一下,这里不过多介绍)

1.  解压sonarqube-7.6.zipunzip sonarqube-7.6.zip2.  #查看参数sysctl vm.max_map_countsysctl fs.file-maxulimit -nulimit -u#根据需要设置sysctl -w vm.max_map_count=262144sysctl -w fs.file-max=65536ulimit -n 65536ulimit -u 2048
3.  #对sonarqube7.6/conf/sonar.properties进行配置:vim sonarqube7.6/conf/sonar.properties  #配置链接的mysql数据库信息sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=falsesonar.jdbc.username=rootsonar.jdbc.password=rootsonar.sorceEncoding=UTF-8
4.  创建一个sonar用户useradd sonarpasswd sonar
5.  使用sonar用户启动SonarQube,使用root用户会报错(天坑)su sonar./sonarqube-7.6/bin/linux-x86-64/sonar.sh start# 新建一个窗口 /sonarqube-7.6/logs路径下 查看sonar.log日志# 显示SonarQube is up 则成功,若不成功则根据es.log、sonar.log、web.log进行排查# 初次需要初始化数据库,速度较慢,可以去sonar库里查看表是否创建
  1. 访问Web页面:http://ip:9000
    (端口需要修改可以在sonarqube7.6/conf/sonar.properties下修改sonar.web.port配置)
  2. 输入admin/admin 账户密码登录
  3. 若访问页面不成功,检查防火墙设置,并开放9000端口
    #查看防火墙状态
    firewall-cmd --state
    
5.SonarQube汉化
  1. SonarQube社区版汉化代码路径:https://github.com/SonarQubeCommunity/sonar-l10n-zh/
  2. 汉化包兼容表,我们要选择1.26的汉化包
  3. 下载jar包:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.26
  4. 将jar包放入/extensions/plugins路径下 重启即可
SonarQube Scanner配置
 1.  解压zipunzip sonar-scanner-cli-3.3.0.1492-linux.zip2. 配置环境变量vim /etc/profile#文件末尾加入以下配置#export SONAR_SCANNER_HOME=#export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}#刷新source /etc/profile#验证 sonar-scanner -v3.  #可选 后续jenkins跟sonarQube集成,如果jenkins跟SonarQube Server不在一台服务器上#则需要将scanner安装在jenkins的服务器上,并配置scannner路径下conf/sonar-scanner.properties#中sonar.host.url的值指向SonarQube Server服务器的链接4. #可选 本地Sonar校验,在项目的根目录下(与pom文件同一层级)创建一个sonar-project.properties文件,内容如下 # 项目唯一标识sonar.projectKey=# 项目名称sonar.projectName=# 项目版本号sonar.projectVersion=sonar.sourceEncoding=UTF-8sonar.modules=Module1Module1.sonar.language=javaModule1.sonar.java.source=1.8Module1.sonar.sources=./src/main/javaModule1.sonar.java.binaries=./target/classes/5. #可选 在项目根目录下执行sonar-scanner,即可在管理页中出现扫面的项目信息sonar-scanner run

SonarQube集成jenkins

前提是jenkins安装部署并配置好jdk以及maven,jenkins版本不可过低,SonarQube Scanner有要求。
  1. jenkins 点击

  2. 在可选插件中过滤SonarQube Scanner,下载

  3. SonarQube 在配置-》权限-》用户-》令牌-》生成令牌

  4. SonarQube 开启SCM

  5. jenkin系统管理中添加一个SonarQube servers

  6. Jenkins →全局工具配置-》新增一个SonarQube Scanner

    这里也可以选择自动安装,版本选择3.3.0。

  7. jenkins创建一个新的项目
    源码管理选择svn,git也是类似

  8. 可选 Build Triggers中可以选择 Poll SCM(定时轮询SVN,查看SVN中是否有数据变化,如果有变化,则执行构建任务。)

    * * * * *- 第一个*表示分钟,取值0~59
    - 第二个*表示小时,取值0~23
    - 第三个*表示一个月的第几天,取值1~31
    - 第四个*表示第几月,取值1~12
    - 第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
    
  9. 构建步骤

  • 构建一个maven 命令

  • 构建一个sonar scanner,一个对应一个项目,可多个

    Analysis properties :

    # 项目唯一标识
    sonar.projectKey=
    # 项目名称
    sonar.projectName=
    # 项目版本号
    sonar.projectVersion=
    sonar.sourceEncoding=UTF-8sonar.modules=Module1,Module2,Module3Module1.sonar.language=java
    Module1.sonar.java.source=1.8
    Module1.sonar.sources=./src/main/java
    Module1.sonar.java.binaries=./target/classes/comModule2.sonar.language=java
    Module2.sonar.java.source=1.8
    Module2.sonar.sources=./src/main/java
    Module2.sonar.java.binaries=./target/classes/comModule3.sonar.language=java
    Module3.sonar.java.source=1.8
    Module3.sonar.sources=./src/main/java
    Module3.sonar.java.binaries=./target/classes/com
    
  1. jenkins点击构建即可。

Sonar支持阿里巴巴开发手册

  1. 拉取https://github.com/jensgerdes/sonar-pmd sonar-pmd源码,高版本才能支持sonar7.*以上的版本

  2. pom.xml修改

    <!--p3c选用2.0.0版本-->
    <dependency><groupId>com.alibaba.p3c</groupId><artifactId>p3c-pmd</artifactId><version>2.0.0</version>
    </dependency>
    <!--没有这个包,jenkins构建的时候会报错-->
    <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.7</version>
    </dependency>
    

    以下是新增一个p3c规约的例子:

  3. pmd.properties中增加属性

    rule.pmd.CommentsMustBeJavadocFormatRule.name=[p3c]Javadoc should be used for classes, class variables and methods. The format should be '/** comment **/', rather than '// xxx'.
    
  4. 在plugins.pmd中新增一个rules-p3c.xml文件

    <!--p3c-->
    <chc><rule-repo>p3c</rule-repo><rule-key>CommentsMustBeJavadocFormatRule</rule-key><prop><key>remediationFunction</key><txt>CONSTANT_ISSUE</txt></prop><prop><key>offset</key><val>2</val><txt>min</txt></prop>
    </chc>
    
  5. 在pmd.rules文件夹下增加pmd-p3c用于放置描述文件 错误页面的详情展示CommentsMustBeJavadocFormatRule.html

    <p>Look for qualified this usages in the same class.</p>
    <p>Examples:</p>
    <pre>
    /**
    *
    * XXX class function description.
    *
    */
    public class XxClass implements Serializable {private static final long serialVersionUID = 113323427779853001L;/*** id*/private Long id;/*** title*/private String title;/*** find by id** @param ruleId rule id* @param page start from 1* @return Result<Xxxx>*/public Result<Xxxx> funcA(Long ruleId, Integer page) {return null;}
    }
    </pre>
    
  6. PmdRulesDefinition.java中

    @Override
    public void define(Context context) {NewRepository repository = context.createRepository(PmdConstants.REPOSITORY_KEY,          PmdConstants.LANGUAGE_KEY).setName(PmdConstants.REPOSITORY_NAME);extractRulesData(repository, "/org/sonar/plugins/pmd/rules.xml", "/org/sonar/l10n/pmd/rules/pmd");//新增一个方法extractRulesData(repository, "/org/sonar/plugins/pmd/rules-p3c.xml", "/org/sonar/l10n/pmd/rules/pmd-p3c");repository.done();
    }
    
  7. 按照以上套路添加完所需所有阿里规约后,打成一个jar包,放入sonarqube-7.6/extensions/plugins路径下,重启sonarqube服务

  8. 可选 https://gitee.com/chenlingtao/sonar-pmd.git 参考网上其他博客整理的51个规约

  9. SonarQube管理-》质量配置-》创建

  10. 点击p3c-》激活更多规则 (图中已激活阿里规约)

  11. 点击批量修改并活动

  12. 同时也可以个性化活动其他代码规则,将p3c设置为默认

基于SonarQube代码质量检测相关推荐

  1. Docker运行sonarqube (代码质量检测平台)

    onarqube是什么 SonarQube是用于持续检查代码质量的开源平台. 可用于持续集成,持续部署流程中的代码检测环节. idea和jenkins都提供了插件配合使用. liunx推荐配置环境 l ...

  2. Docker搭建SonarQube代码质量检测工具

    SonarQube简介 SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量. 通过插件形式,可以支持众多计算机语言,比如 java, C#, go,C/C++, PL/S ...

  3. 代码质量检测-SonarQube

    文章目录 前言 一.SonarQube是什么? 二.SonarQube安装步骤 1.docker安装 2.docker-compose安装 3. 访问SonarQube 4. 配置SonarQube ...

  4. DevOps之持续集成SonarQube代码质量扫描

          SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查工具结果直接显示在 Web ...

  5. Docker搭建SonarQube代码质量检查平台

    SonarQube是一个用于持续检查代码质量的开源平台 Docker搭建SonarQube代码质量检查平台 快速开始 version: '3' services:mydb:image: postgre ...

  6. 代码质量检测平台架构设计

    「前言」 你是否清楚的了解自己的项目有多少个文件夹.多少个文件.多少行代码.多少个函数.多少个字符数? 你是否在项目中引入过代码质量检测相关的工具? 你是否在不同项目的切换中饱受indent=2还是i ...

  7. 个推如何管理亿级代码的质量?持续集成SonarQube 代码质量管理系统

    2019独角兽企业重金招聘Python工程师标准>>> 平台架构 如下图所示,整个代码管理平台由,Analysers, Server , Database 组成. 当然,根据需求不同 ...

  8. java检测工具_常用Java代码质量检测评估工具

    常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...

  9. 代码质量检测(jacoco pmd pipeline)

    代码质量检测 一.静态代码分析 静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查,范围包括代码风格.可能出现的空指针.代码块大小.重复的代码等. pipeline中,静态代码分析通常被安排 ...

最新文章

  1. linux 进程 ctrl-c,ctrl-z,ctrl-d
  2. 在浙学计算机基础2020答案,浙江大学2020年硕士研究生复试分数线的基本要求
  3. 【mysql的编程专题⑥】视图
  4. 班级日常分享:一天一瞬间!
  5. [导入]ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述.zip(8.80 MB)
  6. RabbitMq分布式事务解决方案第二篇
  7. break 和 continue 语句, 以及循环中的 else 子句
  8. Python正则表达式练习
  9. Bailian2683 求分数序列和【数列和】
  10. 阿里云服务器无法远程连接mysql数据库_关于远程连接MySQL数据库的问题解决
  11. [转]coolfire黑客入门教程系列之(七)
  12. keepalived IP漂移技术
  13. docker限制cpu、内存使用
  14. unity Animator 同时播放两个动画,并动态更换Animator中的AnimationClip
  15. 老师的经典口头禅,这一句最扎心
  16. 电子合同的一个“安全漏洞”
  17. 面试时,HR问你职业规划,教你如何回答,得100分!
  18. 猪齿鱼数智化开发管理平台 1.3.0-alpha发布,欢迎立即体验
  19. Vue生命周期(图示详解)
  20. python批处理进行剪裁图片与图片拼接

热门文章

  1. Java小白从0开始:知识点(3)
  2. php 真实姓名,原来王一博是他的艺名,得知真实名字后,网友:得亏改了
  3. iOS xib设置阴影
  4. 常州工业职业技术学院计算机宿舍,常州工程职业技术学院宿舍怎么样
  5. 查看感兴趣基因的表达量及其相关关系
  6. 《哪吒》飞来,国漫春天将至,互联网下国漫将如何开启崛起之路?
  7. Linux中怎么使用SSL搭建https服务器
  8. Android AMS面试题
  9. 【转载】如何解决usb接口的电磁兼容问题
  10. IOS 经典UI素材网址