SonarQube構架
SonarQube框架包含以下四個部分:
- Project
- SonarQube Scanner
- SonarQube Server
- SonarQube Database
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
未完待續