Gradle与CI/CD插件集成
结合JUnit进行单体测试
在build.gradle中添加testImplementation,例如
buildscript {
ext {
springBootVersion = '2.1.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.orrincn'
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')
}
可以看到,执行gradle test生成了一个reports的目录,测试执行结果的报告信息在此目录中保存,只通过index.html即可确认结果。
结合Jacoco进行覆盖率确认
Jacoco是Java Code Coverage Library的缩写,它是用于确认java应用单体测试覆盖率的有效工具,最重要的一个前提是需要有测试用例,所以本文是在前面的基础之上的,关于如何使用gradle进行spring boot的单体测试这里不再赘述。
- 添加Jacoco的plugin
apply plugin: ‘jacoco’
- 添加使用设定
后面会给出同样方式使用maven和jacoco的方法,从直观的感受来说gradle写的更加人性化一些,从如下可以读出,jacoco的相关结果的报告是以html方式生成。当然根据需要还可以加上check.dependsOn jacocoTestReport的依赖,这样使用gradle build可以直接生成结果,较为方便。
acocoTestReport {
reports {
xml.enabled false
html.enabled true
}
}
- build.gradle
添加了上述内容的build.gradle为:
buildscript {
ext {
springBootVersion = '2.1.1.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.orrincn'
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
上述gradle build执行的时候实际是执行了jacoco插件的jacocoTestReport任务,其生成的方式应该是html的,位置位于build/reports/jacoco。
结合Sonarqube进行代码审查
gradle的sonarqube插件
gradle中的sonarqube的插件是org.sonarqube,用来在gradle中调用sonarqube进行代码质量分析。详细介绍请参看: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详细信息
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.orrincn'
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
- 扫描方式
可以使用gradle sonarqube即可进行扫描
orrincn:springboot orrin$ 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
orrincn:springboot orrin$
来源:oschina
链接:https://my.oschina.net/orrin/blog/3220723