一、SonarQube整体介绍

SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。

通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理

可以从七个维度检测代码质量:

(1)复杂度分布(complexity):代码复杂度过高将难以理解
(2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

(3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
(4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
(5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
(6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug

(7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
二、SonarQube平台由四部分组成:

1、 SonarQubeServer

1) Web Server, 浏览质量的快照和配置sonarqube实例

2)SearchServer based on Elasticsearch, 执行来自页面的查询请求

3)Compute EngineServer ,处理代码分析报告并保存在sonarqube数据库

2、SonarQube Database :

1) sonarqube实例的配置(安全、插件设置等)

2) 项目、视图等的质量快照。

3、SonarQube Plugins

语言、SCM、集成、身份验证和治理插件

一个或多个sonarqube Scanners运行分析项目

三、集成

下面是SonarQube与其他sonarqube ALM工具如何集成以及SonarQube各种组件在何处被使用。

1)开发者在IDE开发代码并使用sonarlint运行本地分析

2)开发者把代码提交到SCM工具中:git, SVN, TFVC, ...

3)持续集成服务器触发自动编译以及执行SonarQubeScanner

4)SonarQubeServer 处理分析报告

5)SonarQubeServer 处理并存贮分析报告到数据库里并在页面上显示处理结果.

6)开发者审查解决他们的问题,在页面管理问题

7)管理者获得分析报告
Ops 可以使用API从 SonarQube抽取数据
Ops 可以使用 JMX 监控 SonarQubeServer.

四、关于机器部署

1、只能有1个SonarQube Server 和1个 SonarQube Database

2、考虑性能优化,每一个组件(server, database, scanners)应当安装在不同的机器上,并且是专用服务器。

3、SonarQubeScanners 可以水平扩展机器

4、所有机器的时间必须要同步

5、SonarQube Server 和 SonarQube Database 必须在同一网段

6、SonarQubeScanners 与SonarQube Server可以不在同一网段

7、SonarQube Scanners 与 SonarQubeDatabase之间没有通信
五、机器配置要求

1、2G以上内存

2、oracle jre 8或者openjdk8

3、数据库:postgrepSQL 8/9, sql server2014/2016, oracle 11g/12c/XE,mysql5.6/5.7

4、web浏览器:IE11,firefox最新版、 chrome最新版,safari 最新版

5、如果使用linux平台,需要注意以下几点:

vm.max_map_count 大于等于 262144

fs.file-max 大于等于65536

运行 SonarQube 至少要打开 65536 个文件描述符

运行SonarQube 至少打开2048 个线程

可以使用如下命令检查:

sysctlvm.max_map_count

sysctlfs.file-max

ulimit -n

ulimit -u

可以使用root账户动态设置参数如下:

sysctl -wvm.max_map_count=262144

sysctl -wfs.file-max=65536

ulimit -n 65536

ulimit -u 2048

可以修改配置文件永久设置:

/etc/sysctl.d/99-sonarqube.conf (或者/etc/sysctl.conf )

如果SonarQube没有权限打开至少65536个描述符,可以在配置文件里(/etc/limits.d/99-sonarqube.conf (或者/etc/limits.conf ))插入一条如下信息:sonarqube  -   nofile   65536

sonarqube   -  nproc    2048

6、seccomp filter设置

使用如下命令检查设置:

$ grep SECCOMP /boot/config-$(uname -r)

如果内核已设置,则返回如下信息:

CONFIG_HAVE_ARCH_SECCOMP_FILTER=y

CONFIG_SECCOMP_FILTER=y

CONFIG_SECCOMP=y

如果没有设置,需要修改配置文件sonar.properties,增加如下一行

sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
六、安装

1、https://www.sonarqube.org/downloads/下载目前稳定版本SonarQube 6.7.2 (LTS *)

2、使用unzip命令解压:
七、配置mysql数据库

1、mysql5.6/5.7(InnoDB.  innodb_buffer_pool_size, query_cache_size=15m)

2、修改配置文件/conf/sonar.properties

sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

3、建库

安装sonarqube

1、登陆MySQL创建sonar数据库和用户

mysql> CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)   
八、启动sonar

# Windows,执行:

C:\sonarqube\bin\windows-x86-xx\StartSonar.bat

# linux,执行:

/etc/sonarqube/bin/[OS]/sonar.shstart

通过浏览器访问:账号/密码(admin/admin)

http://localhost:9000/sonar

账号/密码:admin/admin

九、安装插件

通过web页面可以安装各种插件

http://localhost:9000/sonar/admin/marketplace

目前有如下插件:

参见网址:https://docs.sonarqube.org/display/PLUG

1、代码分析插件

SonarABAP *

home | docs & download

SonarPLSQL *

home | docs & download

SonarC#

home | docs & download

SonarPython

home | docs & download

SonarCFamily C/C++ *

home | docs & download

SonarRPG *

home | docs & download

SonarCFamily ObjC *

home | docs & download

SonarSwift *

home | docs & download

SonarCOBOL *

home | docs & download

SonarTS

home | docs & download

SonarFlex

home | docs & download

SonarTSQL *

home | docs & download

SonarJava

home | docs & download

SonarVB6 *

home | docs & download

SonarJS

home | docs & download

SonarVB *

home | docs & download

SonarPHP

home | docs & download

SonarWeb

home | docs & download

SonarPLI *

home | docs & download

SonarXML

home | docs & download

2、其他语言:CSS   Erlang     Groovy    Lua    Puppet

3、外部分析工具集成

AEM Rules 、Android Lint、Checkstyle 、Findbugs 、jDepend 、PMD 、Sonargraph 7、Sonargraph Integration 、Xanitizer

十、源代码静态分析

有以下几种方法:

1、SonarQube Scanner for MSBuild(分析.Net projects)

2、SonarQube Scanner for Maven(从Maven启动分析)

3、SonarQube Scanner for Gradle(从Gradle启动分析)

4、SonarQube Scanner for Ant(从Ant启动分析)

5、SonarQube Scanner For Jenkins(从jenkins启动分析)

6、SonarQube Scanner(从命令行启动分析)
十一、源代码静态分析Sonar-Scanner介绍

1、从网站下载sonar-scanner

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

2、安装

使用unzip命令展开

3、编辑配置文件/conf/sonar-scanner.properties:

sonar.host.url=http://localhost:9000

编辑配置文件/etc/profile 增加一行

exportSONAR_SCANNER_OPTS="-Xmx512m"

4、使用命令检查是否安装成功

./sonar-scanner-h
十二、编写工程模板,使用Sonar-Scanner开启代码静态扫描

1、代码扫描案例参见:

https://github.com/SonarSource/sonar-scanning-examples

2、具体案例说明

创建一个配置文件sonar-project.properties

内容如下:

sonar.projectKey=example1:project

sonar.projectName=Example1

sonar.projectVersion=1.0

sonar.sources=src

sonar.sourceEncoding=UTF-8

源文件放在src目录下

3、执行 ./sonar-scanner  开始扫描

4、在web页面可以看到扫描统计情况

http://localhost:9000/sonar

账号/密码:admin/admin

5、关于java代码扫描可以参见插件sonarjava说明

https://www.sonarsource.com/products/codeanalyzers/sonarjava.html

代码静态扫描工具sonar的更多相关文章

  1. python代码安全扫描工具

    python代码安全扫描工具:Coverity. Fortify.SecMissile(漏扫,对源代码提供基于语义的搜索和分析能力,实现已知安全漏洞的快速扫描)

  2. pmd代码安全扫描工具

    pmd是一款开源的代码扫描工具,这里对pmd做了一些修改,加了安全相关的插件.支持的代码文件类型:java.vue.js.xml 下载链接: https://files.cnblogs.com/fil ...

  3. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  4. C/C++代码静态检查工具Cppcheck在VS2008开发环境中的安装配置和使用

    Cppcheck is an analysis tool for C/C++code. Unlike C/C++ compilers and many other analysis tools, it ...

  5. jenkis +sonarqube 对后端代码静态扫描,钉钉群通知执行结果(记录)

    代码提交,触发后端sonar测试,测试完成,jenkins触发依赖任务,执行python脚本,达到预期,调用上线任务模块,进行上线,达不到预期,钉钉群通知. 牵涉到配置: 1.配置sonar测试任务 ...

  6. Lint——Android SDK提供的静态代码扫描工具

    Lint和FindBugs一样,都是静态代码扫描工具,区别在于它是Android SDK提供的,会检查Android项目源文件的正确性.安全性.性能.可用性等潜在的bug并优化改进. 下图简单地描述了 ...

  7. 利用 SonarScanner 静态扫描 Rainbond 上的 Maven 项目

    对代码进行静态扫描是一种非常常见的代码质量保证手段,这种扫描不仅仅可以检查到代码中的缺陷,应用各种业界最佳实践,也可以检查出安全方面的漏洞,给予项目代码全方位的提升.在各种代码扫描方案之中,Sonar ...

  8. JAVA代码静态检测之PMD

    今天再次想启动Java代码静态检测工具的利用问题,主要再次尝试用了PMD,发现不少代码编码规范问题和好的代码建议,并学到不少自己之前没有注意到的Java方便的基础知识,感觉很不错,把相关明白的好的规则 ...

  9. 静态代码扫描工具PMD定制xml的规则(一)操作篇

    0.前言 PMD作为开源的静态代码扫描工具有很强的扩展能力,可使用java或xpath定制rule.第一篇从操作上讲解如何定制一个用于扫描xml是否规范的规则.首先我们知道xml格式的文件在java工 ...

随机推荐

  1. [转]Android中attr自定义标签详解

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:wen= ...

  2. yii---模型的创建

    在 model/ 路径新建 Test.php 模型 我们类的名称一定要与数据表的名称相同. 继承 yii\db\ActiveRecord 类: 在模型类中 声明 tableName() 指定表名 // ...

  3. Python中常用包——sklearn主要模块和基本使用方法

    在从事数据科学的人中,最常用的工具就是R和Python了,每个工具都有其利弊,但是Python在各方面都相对胜出一些,这是因为scikit-learn库实现了很多机器学习算法. 加载数据(Data L ...

  4. 8.11 数据库ORM(5)

    2018-8-11 20:43:52 昨天从俺弟家回来了. 和俺弟聊天发现,他一直停留在自己目前的圈子,自己觉得很牛逼,比别人高人一等,, 读书无用论,,可以用 幸存者偏激理论 大概就是这个 可以否决 ...

  5. 小程序中的block

    <block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性. 因为 wx:if 是一个控制属性,需要将它添加到一个标签上.如果要一次性判断多个组件标签, ...

  6. HDU 2602 - Bone Collector - [01背包模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...

  7. POJ_3616_Milking Time

    Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10841   Accepted: 4564 Des ...

  8. JS闭包中的循环绑定处理程序

    前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件.就是这个问题让我整整调了一个下午.最后还是下班回家,上网查资料才知道怎么解决的. (PS:之前也在<jQuery基础教程>第四 ...

  9. 十天精通CSS3(9)

    Keyframes介绍 Keyframes被称为关键帧,其类似于Flash中的关键帧.在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“{…}”,括号中就是一些不同 ...

  10. matlab常用方法

    1:matlab进行符号的虚数运算 直接使用符号 a+b*j运算,结果是一个角度值,不是复数. 可以使用  a+b*(1j)    进行运算. 如下 position(index,)=radius; ...