1、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):找出循环,展现包与包、类与类之间的依赖、检查程序之间耦合度
2、SonarQube平台由四部分组成:
一、 SonarQubeServer
1) Web Server, 浏览质量的快照和配置sonarqube实例
2)SearchServer based on Elasticsearch, 执行来自页面的查询请求
3)Compute EngineServer ,处理代码分析报告并保存在sonarqube数据库
二、SonarQube Database :
1) sonarqube实例的配置(安全、插件设置等)
2) 项目、视图等的质量快照。
三、SonarQube Plugins
语言、SCM、集成、身份验证和治理插件
一个或多个sonarqube Scanners运行分析项目
3、集成
下面是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.
4、关于机器部署
一、只能有1个SonarQube Server 和1个 SonarQube Database
二、考虑性能优化,每个组件(server, database, scanners)应当安装在不一样的机器上,而且是专用服务器。
三、SonarQubeScanners 能够水平扩展机器
四、全部机器的时间必需要同步
五、SonarQube Server 和 SonarQube Database 必须在同一网段
六、SonarQubeScanners 与SonarQube Server能够不在同一网段
七、SonarQube Scanners 与 SonarQubeDatabase之间没有通讯
5、机器配置要求
一、2G以上内存
二、oracle jre 8或者openjdk8
三、数据库:postgrepSQL 8/9, sql server2014/2016, oracle 11g/12c/XE,mysql5.6/5.7
四、web浏览器:IE11,firefox最新版、 chrome最新版,safari 最新版
五、若是使用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
六、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
6、安装
一、https://www.sonarqube.org/downloads/下载目前稳定版本SonarQube 6.7.2 (LTS *)
二、使用unzip命令解压:
7、配置mysql数据库
一、mysql5.6/5.7(InnoDB. innodb_buffer_pool_size, query_cache_size=15m)
二、修改配置文件/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
三、建库
安装sonarqube
一、登录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)
8、启动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
9、安装插件
经过web页面能够安装各类插件
http://localhost:9000/sonar/admin/marketplace
目前有以下插件:
参见网址:https://docs.sonarqube.org/display/PLUG
一、代码分析插件
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
二、其余语言:CSS Erlang Groovy Lua Puppet
三、外部分析工具集成
AEM Rules 、Android Lint、Checkstyle 、Findbugs 、jDepend 、PMD 、Sonargraph 七、Sonargraph Integration 、Xanitizer
10、源代码静态分析
有如下几种方法:
一、SonarQube Scanner for MSBuild(分析.Net projects)
二、SonarQube Scanner for Maven(从Maven启动分析)
三、SonarQube Scanner for Gradle(从Gradle启动分析)
四、SonarQube Scanner for Ant(从Ant启动分析)
五、SonarQube Scanner For Jenkins(从jenkins启动分析)
六、SonarQube Scanner(从命令行启动分析)
11、源代码静态分析Sonar-Scanner介绍
一、从网站下载sonar-scanner
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
二、安装
使用unzip命令展开
三、编辑配置文件/conf/sonar-scanner.properties:
sonar.host.url=http://localhost:9000
编辑配置文件/etc/profile 增长一行
exportSONAR_SCANNER_OPTS="-Xmx512m"
四、使用命令检查是否安装成功
./sonar-scanner-h
12、编写工程模板,使用Sonar-Scanner开启代码静态扫描
一、代码扫描案例参见:
https://github.com/SonarSource/sonar-scanning-examples
二、具体案例说明
建立一个配置文件sonar-project.properties
内容以下:
sonar.projectKey=example1:project
sonar.projectName=Example1
sonar.projectVersion=1.0
sonar.sources=src
sonar.sourceEncoding=UTF-8
源文件放在src目录下
三、执行 ./sonar-scanner 开始扫描
四、在web页面能够看到扫描统计状况
http://localhost:9000/sonar
帐号/密码:admin/admin
五、关于java代码扫描能够参见插件sonarjava说明
https://www.sonarsource.com/products/codeanalyzers/sonarjava.html
html