1. 程式人生 > >Gradle進階:4:結合Sonarqube進行程式碼審查

Gradle進階:4:結合Sonarqube進行程式碼審查

在這裡插入圖片描述
作為程式碼質量檢查的流行工具,比如Sonarqube能夠檢查程式碼的“七宗罪”,跟程式碼結合起來能夠更好地提高程式碼的質量,這篇文章將會介紹如何結合gradle和sonarqube對程式碼質量與測試覆蓋率進行分析。

Sonarqube

Sonarqube可以使用docker版本快速搭建,可以參看一下Easypack整理的映象,具體使用可以參看如下連結,這裡不再贅述:

環境假定

本文使用到的sonarqube為本機32003可以訪問到的服務。

gradle的sonarqube外掛

gradle中的sonarqube的外掛是org.sonarqube,用來在gradle中呼叫sonarqube進行程式碼質量分析。詳細介紹請參看:

使用方式

  • 指定plugin
    在build.gradle中新增如下外掛版本資訊
plugins {
  id "org.sonarqube" version "2.6.2"
}
  • 新增apply plugin資訊
apply plugin: "org.sonarqube"
  • sonarqube設定資訊
    最簡單的需求的情況下,非多工程專案做以上配置即可,接下來就是傳遞給gradle所需要的sonarqube的詳細資訊,而這些可以通過property的方式傳入,詳細的使用方式在前面的基礎中都已介紹,此處不再贅述,主要設定的內容為:
    • URL:systemProp.sonar.host.url=http://localhost:32003
    • 使用者名稱:systemProp.sonar.login=admin
    • 密碼:systemProp.sonar.password=admin

設定方式可以使用如下方式:

sonarqube {
    properties {
        property "sonar.host.url", "http://localhost:32003"
        property "sonar.login", "admin"
        property "sonar.password", "admin"
    }
}
  • build.gradle詳細資訊
liumiaocn:springboot liumiao$ cat build.gradle 
buildscript {
	ext {
		springBootVersion = '2.1.1.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

plugins {
  id "org.sonarqube" version "2.6.2"
}

sonarqube {
    properties {
        property "sonar.host.url", "http://localhost:32003"
        property "sonar.login", "admin"
        property "sonar.password", "admin"
    }
}

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'org.sonarqube'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.liumiaocn'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}


dependencies {
	implementation('org.springframework.boot:spring-boot-starter-web')
        testImplementation('org.springframework.boot:spring-boot-starter-test')
}

jacocoTestReport {
    reports {
        xml.enabled false
        html.enabled true
    }
}

check.dependsOn jacocoTestReport
liumiaocn:springboot liumiao$

掃描方式

可以使用gradle sonarqube即可進行掃描

  • 執行日誌
liumiaocn:springboot liumiao$ gradle sonarqube

> Task :sonarqube
SCM provider autodetection failed. No SCM provider claims to support this project. Please use sonar.scm.provider to define SCM of your project.
Class not found: javax.annotation.Nonnull
Class not found: javax.annotation.meta.When
Class not found: javax.annotation.meta.TypeQualifierNickname
Class not found: org.junit.jupiter.api.extension.ExtendWith

BUILD SUCCESSFUL in 6s
5 actionable tasks: 1 executed, 4 up-to-date
liumiaocn:springboot liumiao$ 

結果確認

在這裡插入圖片描述

掃描結果確認

可以看到質量掃描結果和覆蓋率的資訊都進行了顯示
在這裡插入圖片描述

脆弱性資訊詳細

查出了一個缺陷,實際是一個誤報,詳細可參看maven使用方式的詳細介紹。

程式碼覆蓋率

程式碼覆蓋率的詳細資訊也可以在sonarqube上進行直接確認
在這裡插入圖片描述

總結

使用SonarQube可以很好的檢查出程式碼的問題,但是在實際的專案中需要進行裁剪和定製,掃出來的不一定有問題,沒有掃出來也不一定萬事大吉,但是一定程度的程式碼規範和質量提高還是很有用處,實際在使用的時候應該根據具體情況進行實施。

參考文章

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle
https://plugins.gradle.org/plugin/org.sonarqube