Gradle这篇文章就够用了11-Gradle与CI/CD插件集成

倾然丶 夕夏残阳落幕 提交于 2020-04-06 17:59:56

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$ 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!