SonarQube架构及使用介绍

SonarQube构架

SonarQube框架包含以下四个部分:

  • Project
  • SonarQube Scanner
  • SonarQube Server
  • SonarQube Database

SonarQube架构及使用介绍_第1张图片

Project

是需要被分析的源码,如我们的app工程源码,SonarQube支持多种语言和多种工程结构,Andriod是属于一种多模块的java工程。

SonarQube Scanner

是用于执行代码分析的工具,在Project的根目录下执行,我们还需要在Project下进行SonarQube配置,其中指定了工程的相关信息,还指定了SonarQube Server的地址,SonarQube Scanner分析完毕之后,会将结果上报到该Server。

注:官方对Scanner的描述是“The SonarQube Scanner is recommended as the default launcher to analyze a project with SonarQube”,个人理解是可以用任何其它的工具替代,只要能对Source进行分析,并生成Server能构解析的数据格式上报给Server。

SonarQube Server

显示分析结果的Web Server,在SonarQube Scanner第一次将一个工程的分析结果上报给SonarQube Server后,Server上会自动创建一个工程显示分析的结果,可以在Server上设置代码质量管理相关的各种配置,如设置代码检查规则(Rule)和质量门限(Quality Gate)等。

SonarQube配置

SonarQube支持多种工程构建方式的配置,也对应需要用不同的Scanner来执行分析过程:

  • Ant
  • Maven
  • MSBuild(Microsoft Build Engine)
  • Gradle
  • Sonar Runner

下面只讲一下我们目前用得到的两种,即Gradle和Sonar Runner

Gradle

  • scanner:采用gradle plugin,gradle自带了sonarqube的plugin
  • config方式:gradle task
  • 运行方式:gradle sonarqube
apply plugin: "org.sonarqube"
sonarqube {
    sonarProperties {
	    property "sonar.host.url", "http://sonarqube.example.com"
        property "sonar.projectName", "AndroidDemo"
        property "sonar.projectKey", "AndroidDemo"
        property "sonar.version", "2.3.2"
        property "sonar.sources", "src/main/java" // module会继承该路径,也可以重载掉该值
    }
}

更多属性详见
http://docs.sonarqube.org/display/SONAR/Analysis+Parameters

注:如果我们每次分析代码里,都在工程里手动执行,那么用gradle方式就可以了,但是如果要与jenkins集成,则需要用到Sonar Runner方式。

Sonar Runner

  • scanner:sonar-runner
  • config方式:sonar-project.properties (.properties文件是java工程的一种配置文件,格式为"key=value")
  • 运行方式:在工程根目录下执行sonar-runner

sonar-project.properties范例

sonar.host.url=http://sonarqube.example.com
sonar.projectKey=AndroidDemo
sonar.projectName=AndroidDemo
sonar.projectVersion=2.3.2
sonar.sources=src/main/java

sonar.sourceEncoding=UTF-8
sonar.language=java

sonar.modules=app
presentation.sonar.projectBaseDir=app

Jenkins集成

获取SonarQube结果

api/resource/index?resource={id or key of the resource}&metric=quality_gate_details&format=json

你可能感兴趣的:(Sonar,SonarQube,代码分析,代码检查)