# 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)
- 增量对比:
- 
- 报告采集展示
- 
#### 流水线(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