全网最详细jenkins+sonarqube+SonarQube Scanner+jacoco 部署流程说明

一:Sonarqube的配置

1.下载资源

1:下载 SonarQube 资源包,这里选择7.6版本 ,别下载开发版和企业版本,直接下载community,之前卡了一天的问题 就是版本下载错啦
https://www.sonarqube.org/

在这里插入图片描述

2:注意:8.3以上的版本需要有jdk11的支持,且SonarQube 不支持mysql数据库

2: 修改配置文件

1: 将SonarQube 压缩包进行解压,将其解压在 /home/sonar/sonarqube-7.6 路径下
2: 修改 /config/sonar.properties 文件,将如下内容进行复制

## sonar连接的数据库账号
sonar.jdbc.username=root 
## sonar连接的数据库密码
sonar.jdbc.password=xxx
## sonar 连接的数据库驱动信息 (需要提前创建连接的数据库)
sonar.jdbc.url=jdbc:mysql://10.12.22.21:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
## sonar的网页 端口号
sonar.web.port=9000

在这里插入图片描述

3: 授权普通用户

创建普通用户,并且给普通用户授予权限 (只有普通用户才可以启动sonarqube)\

## 增加用户 sonar
useradd sonar

## 给sonar文件权限
chown -R sonar /home/sonar

4:启动程序

这里注意切换为普通用户 sonar,然后执行下面的命令
进入/home/sonar/sonarqube-7.6/bin/linux-x86-64 输入如下命令

## 启动
./sonar.sh start  启动
 
扩展命令
## 停止
./sonar.sh stop  停止
## 重启
./sonar.sh restart 重启

验证: 打开浏览器 {你服务的ip}:{sonarqube的端口号} 这里以10.12.22.68:9000为例,

账号密码都是admin/admin

如果失败,查看logs web.log 和 sonar.log 查看具体原因

在这里插入图片描述

5: 汉化 (可选,不推荐)

进入网站: https://github.com/SonarQubeCommunity/sonar-l10n-zh/tree/sonar-l10n-zh-plugin-1.26

在这里插入图片描述

将对应汉化的版本jar 解压到/home/sonar/sonarqube-7.6/extensions/plugins ,重启sonar 即可.

6:进行初始化的设置

1.开启SCM 如果不开启,后续操作会报错
在这里插入图片描述
2:打开我的账号-> 安全->随机输入一个字符串—>得到登录token令牌 → 复制保留(请复制粘贴保留,后续会用到)

在这里插入图片描述

7:创建项目

1.打开创建项跳转页
在这里插入图片描述
2.创建的项目的名称
在这里插入图片描述
得到项目的project key
在这里插入图片描述
这令牌后续会用到,记下的你的令牌 ,比如 此时你的project key 就是 newtvupackdataservice2,到这一步.不用执行他提示的命令,此时项目页面还没有出来(是正常的),
我们目的是 Jenkins构建的时候,自动给我们构建出来项目的页面,看下面的操作

二:Jenkins的配置

1: 下载插件

在jinkens点击->系统管理->管理插件->下载如下2个插件

Jacoco 用于测试覆盖率
在这里插入图片描述
Sonar Scanner 用于扫描项目
在这里插入图片描述

2: 全局设置

1: 在jinkens点击->系统管理->全局设置
在这里插入图片描述

3: 全局工具配置

1: 在jinkens点击->系统管理->全局工具配置–>SonarScanner for MSBuild
在这里插入图片描述

2: 在jinkens点击->系统管理->全局工具设置–>SonarQube Scanner
在这里插入图片描述

4: 项目配置

 1: jinkens找打自己的想要设置的项目->配置->打开开启扫描环境

在这里插入图片描述
2:配置jenkins连接的sonar信息
在这里插入图片描述


# project key 就是上面得到的,不能错
sonar.projectKey=newtvupackdataservice  
sonar.projectName=newtvupackdataservice
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
sonar.junit.reportsPath=target/surefire-reports
# 代码覆盖率插件
sonar.java.coveragePlugin=jacoco
# jacoco插件版本
jacoco.version=0.7.8
sonar.login=admin
sonar.password=admin

3:每次构建前需要设置清除target文件

实际使用了几天之后,发现自己就除了几个空行,结果就一直报import Jacoco code coverage to SonarQube: Cannot import coverage information for file, coverage data is invalid,谷歌的stackOverFlow也没有得到十分明确的信息 ,百度更不用说啦, 压根就没有这个异常的解释,
后来自己发布了这个博客,继续搜索这个关键字,还是没有得到这种异常关键字,看到我的博客 0.0

最后发现jenkins 如果设置如下配置,才可以解决


在这里插入图片描述

三:jacoco的配置

1: 添加依赖

1:在自己服务的pom.xml文件中,添加如下依赖

   <!--jacoco覆盖率-->
        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.3</version>
        </dependency>
        
<plugin>
   <groupId>org.jacoco</groupId>
   <artifactId>jacoco-maven-plugin</artifactId>
   <version>0.7.8</version>
   <executions>
       <execution>
           <id>pre-test</id>
           <goals>
               <goal>prepare-agent</goal>
           </goals>
       </execution>
       <execution>
           <id>post-test</id>
           <phase>test</phase>
           <goals>
               <goal>report</goal>
           </goals>
       </execution>
   </executions>
</plugin>
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
       <testFailureIgnore>true</testFailureIgnore>
   </configuration>
</plugin>

如果输入 mvn install 命令的时候,此时会项目的target/site/index.html中生成覆盖率的报告文件,如果成功可以进行一下步

在这里插入图片描述

2: jinkens配置jacoco

1.请确保之前的sonar的配置有jacoco的信息,版本号需要和mavend的一致,
我这里就懒得改啦…你们记得一致呀
在这里插入图片描述
2:根据自己的项目路径的不同, 设置扫描的路径
在这里插入图片描述

四:使用的方法

1:查看覆盖率

1:生成sonar报告
在这里插入图片描述
此时他自己创建出来project 页面

2:查看覆盖率
在这里插入图片描述
打开每个目录可以查看每个文件/文件夹的所在文件的覆盖率
在这里插入图片描述
在这里插入图片描述
红色的代表没有覆盖,绿色的代表已经覆盖

五:问题问答

1:jacoco无法检测lombok的解决方案?

方案1: 把之前lombok的代码全部进行删除,手动生成setter getter方法
方案2: 配置文件的方案 详情参考下面的链接
https://www.rainerhahnekamp.com/en/ignoring-lombok-code-in-jacoco/

2:jacoco无法覆盖定时任务的解决方案?

在进行junit测试的时候,可以直接把定时任务的注入到Spring容器中,直接注入对象进行调用定时的具体实现方法

3:本地可以debug进行调式通过,但是jacoco显示为0?

首先确定下,本地debug进行返回的时候,是否是最后一步抛出了异常,如果此时抛出了异常,即便前面的代码已经执行过,jacoco也会默认为他没有执行

其次回看之前的jenkins配置jacoco的配置信息,看是否信息出错

4:jacoco本地覆盖很高,但是到了sonar覆盖率就变低啦?

Jacoco本地的时候的时候,他显示的覆盖率分别为分支覆盖率和代码覆盖率,在进行显示的时候,
他会取一个分支覆盖率和代码覆盖率的中间值, 如果只是为了测试 代码具体走的行数,只用看代码覆盖率即可.

5:maven install 无法生成jacoco的报告文件 ?

看项目中是否包含如下代码 (如果没有父项目也要检查看下)

下方代码的作用:在进行install 打包时,跳过test.

如果想要生成test的报告文件,把下方的true 改为false 即可

<plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
</plugins>

6. 聚合项目覆盖率为0的问题

1,创建sonarqube项目的时候copy maven执行命令:
在这里插入图片描述

mvn sonar:sonar \
  -Dsonar.projectKey=filebackend-service \
  -Dsonar.host.url=http://10.12.22.68:9000 \
  -Dsonar.login=415e9bf2cd6c296ba9f4bff6451cf8efc4bd5aa0

2,在build的时候可以移除pre steps 中的 execute sonarqube scanner

已经添加的可以移除掉

在这里插入图片描述
将第一步的命令复制到构建mvn命令执行窗口

在这里插入图片描述
Jacoco配置好对应的文件相对路径,注意聚合目录可能不同

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值