一、jenkins安装
brew install jenkins
用brew安装比较方便一些,具体安装与启动jenkins见下面链接
https://blog.csdn.net/u014050467/article/details/103319260
二、git准备一个demo项目
因为jenkins要连接git来部署,生产环境也是要这样做的,所以我们要把项目传到github上。
这里项目内容我们不关心,重点是pom.xml文件和Test类。
2.1 pom.xml
和junit、jacoco有关的pom.xml文件如下:
2.1.1 依赖部分:
前两个是spring集成test,之后是junit和jacoco的依赖。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.6</version>
</dependency>
2.1.2 插件部分
主要是maven-surefire-plugin和jacoco-maven-plugin这两个插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.6</version>
<configuration>
<skip>false</skip>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<configuration>
<outputDirectory>${basedir}/target/coverage-reports</outputDirectory>
</configuration>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.2 test类
- 注意这里我们用的是Junit,不是testng,这两个包同时引入会有冲突,maven-surefire-plugin默认优先识别testng,会导致打包时候无法识别到测试方法。
- 还有就是注意包名和main中保持一致,否则也会导致无法运行测试方法。
package com.quan.redistest.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @Author: KD
* @Date: 2021/2/8 3:35 下午
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestClass {
@Autowired
TestService testService;
@Test
public void test(){
testService.saveUserAccessLog();
System.out.println("哈哈");
}
@Test
public void testAdd(){
int res = testService.add(1,2);
System.out.println(res);
}
}
三、jenkins上插件安装
3.1 进入jenkins管理界面
3.2 进入插件管理界面
3.3 下载对应的插件
3.3.1 jacoco插件
3.3.2 junit插件
四、jenkins上新建任务
4.1 新建任务
4.2 选择任务类型
这里选择自由风格
4.3 源码管理
这里填写自己的git地址,账号密码,选择正确的分支
4.4 构建环境
首先选择Maven构建
选择maven版本和要执行的命令
4.5 构建后操作
选择junit report和jacoco report
无需修改使用默认的填写即可。
点击保存完成配置。
五、实现效果
六、存在的坑
主要的坑都在demo项目中,版本问题居多
6.1 jenkins启动
jenkins启动时候可能会报错,如下图所示:
这里是要求必须是java8或java11,这两个是稳定版本,其他版本都不能启动。
6.2 Test类内方法没有被识别
可以看到各项数据都是0,这是因为我们引入了testng包导致的,默认maven-surefire-plugin是跑testng的数据,但实际我们用的是junit。把testng依赖注释掉即可。
6.3 mvn clean install时报错
这个是maven-surefire-plugin包版本问题,两种解决办法,降低jdk版本或提高maven-surefire-plugin包版本。
6.4 jacoco执行被跳过了
如果maven-surefire-plugin的pom引入了字符编码,如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<skipTests>false</skipTests>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
会发现执行时结果是这样:
jacoco的执行被skip了,这是因为maven-surefire-plugin和jacoco-maven-plugin的配置冲突了,把argLine这一行如下修改即可:
<argLine>${argLine} -Dfile.encoding=UTF-8</argLine>
七、参考资料
- https://ningyu1.github.io/site/post/77-jenkins-sonarqube-jacoco-junit/
- https://my.oschina.net/fastjrun/blog/3114088