Jenkins、JaCoCo 和 SonarQube 与 Maven 的集成

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 276 小节,累计 43w+ 字,讲解图:1917 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1500+ 小伙伴加入,欢迎点击围观

使用 Jenkins 构建应用程序、使用 Jacoco 代码覆盖率运行测试、进行 SonarQube 分析并将所有结果在线保存到 SonarQube 是部署应用程序的好方法。

在本文中,您将能够将 Jenkins 与 Maven 结合使用并管理以下任务:

  • 构建应用

  • 使用 Jacoco 测试覆盖率报告运行测试

  • 运行 SonarQube 分析

  • 将测试结果、测试覆盖率报告和SonarQube分析报告推送到SonarQube Server。

其他常见任务,如从版本控制系统中提取源代码或将 war 部署到应用程序服务器,不在本文的讨论范围之内。

詹金斯

Jenkins 是一个屡获殊荣的跨平台持续集成和持续交付应用程序。使用 Jenkins 持续构建和测试您的软件项目 ,使开发人员更容易将更改集成到项目中,并使用户更容易获得全新构建。它还允许您通过提供强大的方法来定义您的构建管道并与大量测试和部署技术集成, 从而持续交付 您的软件。

首先你需要一个 Jenkins 实例。如果你已经有一个,你可以使用它。您可以从 https://jenkins-ci.org/ 下载最新版本

Jenkins 声纳插件

使用更新中心(不是 Sonargraph)安装 Jenkins“SonarQube 插件”。插件网址:

https://wiki.jenkins-ci.org/display/JENKINS/SonarQube+plugin


声纳管

SonarQube 是一个管理代码质量的开放平台。因此,它涵盖了 7 个轴:重复代码、编码标准、单元测试、复杂代码、潜在错误、评论、设计和架构

如果您没有 SonarQube 实例,则需要从 http://www.sonarqube.org/ 安装一个。

Jenkins 中的 SonarQube 服务器配置

要添加新的 SonarQube 服务器,请遵循“管理 Jenkins -> 配置系统”并找到“添加声纳”选项。在 Advanced 链接下填写服务器属性:


 Name: MySonarServer
Server URL: http://10.210.99.88:9000
Sonar account login: sonar
Sonar account password: myPass
Database URL: jdbc:mysql://10.210.99.88:3306/sonar?useUnicode=true&characterEncoding=utf8
Database login: sonar
Database password: myDbPass
Database driver: com.mysql.jdbc.Driver


构建脚本的覆盖选项

添加“verify -Prun-its,coverage”maven 构建选项以捕获测试覆盖率报告。例子:


失败的测试行为

Maven 有一个参数可以在测试失败后停止或继续。在理想情况下,如果测试失败,最好停止构建。在 Jenkins 中,您可以使用“Build-> Advanced-> MAVEN_OPTS”设置此选项并附加以下参数。


 Name: MySonarServer
Server URL: http://10.210.99.88:9000
Sonar account login: sonar
Sonar account password: myPass
Database URL: jdbc:mysql://10.210.99.88:3306/sonar?useUnicode=true&characterEncoding=utf8
Database login: sonar
Database password: myDbPass
Database driver: com.mysql.jdbc.Driver

将 SonarQube 添加到 Jenkins 后期构建

您可以使用“添加构建后操作”选项将声纳分析添加到 Jenkins。这是一个列表,因此如果有多个 Sonar 安装,请选择您添加的那个。

POM更新

在 <properties> 标签内添加 SonarQube 项目属性。如果你没有设置任何属性,SonarQube 将使用默认值。


 Name: MySonarServer
Server URL: http://10.210.99.88:9000
Sonar account login: sonar
Sonar account password: myPass
Database URL: jdbc:mysql://10.210.99.88:3306/sonar?useUnicode=true&characterEncoding=utf8
Database login: sonar
Database password: myDbPass
Database driver: com.mysql.jdbc.Driver

对于 Jacoco 代码覆盖,将以下代码添加到 profiles 标签


 Name: MySonarServer
Server URL: http://10.210.99.88:9000
Sonar account login: sonar
Sonar account password: myPass
Database URL: jdbc:mysql://10.210.99.88:3306/sonar?useUnicode=true&characterEncoding=utf8
Database login: sonar
Database password: myDbPass
Database driver: com.mysql.jdbc.Driver

完成所有这些步骤后,您将能够为每个部署运行 SonarQube 分析。此外,您将在 SonarQube 项目页面中看到测试报告和测试代码覆盖率。

可以看到结果截图:

詹金斯单元测试报告

测试和覆盖总结

单元测试报告

单元测试覆盖率报告