# Jenkins整合Jacoco实现覆盖率报告 ## 前置说明 - [Jenkins 安装](https://plugins.jenkins.io/maven-plugin) - Jenkins 插件安装 - [Git plugin][Git plugin] - [Git Forensics Plugin][Git Forensics Plugin] - [Git Parameter Plug-In][Git Parameter Plug-In] - [Coverage Plugin][Coverage Plugin] - [Maven Integration plugin][Maven Integration plugin] - [Maven](https://plugins.jenkins.io/maven-plugin) - [Jacoco](https://www.jacoco.org/) ## Maven添加Jacoco插件 ### 方法一、更新parent版本 - 项目中父依赖为:`qifu-saas-parent` - 更新 `qifu-saas-parent` 版本 `[1.0.14,)`。开发测试 `[1.0.14-SNAPSHOT,)` ### 方法二、直接添加插件 - pom.xml 中添加插件 - ```xml org.apache.maven.plugins maven-surefire-plugin 3.5.2 ${argLine} 4 true org.jacoco jacoco-maven-plugin 0.8.12 prepare-agent prepare-agent report test report ``` ## 集成覆盖率报告 ### Jenkins安装插件 - [Git plugin][Git plugin] - [Git Forensics Plugin][Git Forensics Plugin] - [Git Parameter Plug-In][Git Parameter Plug-In] - [Coverage Plugin][Coverage Plugin] - [Maven Integration plugin][Maven Integration plugin] ### Jenkins流水线配置 - 可以参考:https://github.com/jenkinsci/coverage-plugin?tab=readme-ov-file#usage #### 自由风格项目(Freestyle Project) - 添加构建后操作(Post Step) - 增量对比: - ![](https://picture.texous.cn/blog/20250303104613312.png) - 报告采集展示 - ![](https://picture.texous.cn/blog/20250303104707049.png) #### 流水线(Pipeline) - 编写Jenkinsfile - ```groovy pipeline { agent any tools { maven "MavenInner" } parameters { gitParameter(branch: '', branchFilter: '.*', defaultValue: 'master', name: 'buildBranch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'GitParameterDefinition') } environment { GIT_URL='ssh://git@git.keyfil.com:9922/qifu-gateway/keycloak-justauth.git' } stages { stage('Checkout') { steps { echo "正在从 GitLab 拉取分支的代码..." git branch: "main", credentialsId: "1", url: "${GIT_URL}" } } stage('Maven Build') { steps { echo "开始执行 Maven 构建..." sh 'mvn clean test jacoco:report -Daliyun=*' } } stage('Generate Coverage Report') { steps { echo "使用 Git Forensics 统计代码变更..." discoverGitReferenceBuild referenceJob: 'Jacoco测试', targetBranch: '$referenceJob' recordCoverage qualityGates: [[criticality: 'NOTE', metric: 'MODULE'], [baseline: 'MODIFIED_FILES', criticality: 'NOTE', metric: 'FILE'], [baseline: 'MODIFIED_LINES', criticality: 'NOTE', metric: 'LINE']], tools: [[parser: 'JACOCO']] } } } post { success { echo "构建成功!" } failure { echo "构建失败,请检查日志。" } } } ``` ### 构建测试 ## 编写单元测试 ### 添加pom依赖 ```xml org.springframework.boot spring-boot-starter-test test ``` ### 编写单元测试 ```java package io.github.yanfeiwuji.justauth.social; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class WeworkIdentityProviderFactoryTest { private WeworkIdentityProviderFactory weworkIdentityProviderFactoryUnderTest; @BeforeEach void setUp() { weworkIdentityProviderFactoryUnderTest = new WeworkIdentityProviderFactory(); } @Test void testGetName() throws Exception { assertEquals("企业微信", weworkIdentityProviderFactoryUnderTest.getName()); } } ``` ## 高级使用 ### Squaretest插件 - 安装 Squaretest 插件并破解 - [直接下载](http://confluence.qifu.com/download/attachments/38510668/Squaretest.zip?api=v2) - [破解教程参考](https://blog.csdn.net/binbushi/article/details/135942290) - 右键 > Generate > Generate test ## 参考 [Git plugin]: https://plugins.jenkins.io/git [Git Forensics Plugin]: https://plugins.jenkins.io/git-forensics [Git Parameter Plug-In]: https://plugins.jenkins.io/git-parameter [Coverage Plugin]: https://plugins.jenkins.io/coverage [Maven Integration plugin]: https://plugins.jenkins.io/maven-plugin