备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 学习计划 持续集成六 Jenkins配置项目和质量检测(sonar)
1 0

海报分享

持续集成六 Jenkins配置项目和质量检测(sonar)

目录

1.安装插件

2.配置sonarQube服务

3.创建自由风格或是maven项目

4.定时任务配置:

5.sonar环境

6.编译

6.1指定pom.xml编译

6.2 指定编译的模块或目录(接着5.1)

7.sonar scanner

7.1 扫描指定模块

8.配置前端扫描


配置多个模块和单个模块不一样,多个模块配置问题可以看下一篇

1.安装插件

  • checkstyle
  • findbugs
  • pmd
  • jacoco(这个也可以安装)
  • sonar scanner

2.配置sonarQube服务

如果是配置本地,url不要写127.0.0.1 访问不了,要写localhost;

注意: jenkins和sonar都是docker,且部署在同一台机器上

这里的配置就是在docker里分配的地址

首先jenkins和sonar都要在同一网段内,可以使用命令

#新建bridge
docker network create dep_network
#将之前我们的jenkins加入该网络
docker network connect dep_network jenkins
#将之前的sonar加入该网络
docker network connect dep_network sonarqube

然后使用命令:

docker inspect sonarqube,查看地址

这张图是docker inspect sonarqube

配置sonar scanner全局插件

3.创建自由风格或是maven项目

4.定时任务配置:

参数一共五个

  1. 分钟 取值0-59
  2. 小时 取值 0-23
  3. 天 取值 1-31
  4. 月 取值 1-12
  5. 星期 取值0-7,0和7都表示星期天

第一种是在源码发生改变时触发:

第二种是周期性触发:

5.sonar环境

6.编译

对应上一篇说过的maven命令

clean package checkstyle:checkstyle findbugs:findbugs pmd:pmd org.jacoco:jacoco-maven-plugin:prepare-agent -Dmaven.test.failure.ignore=true

6.1指定pom.xml编译

在一些情况下,我们会进行一些特殊配置,是的要执行的pom.xml文件不再根目录,而像上面的配置,模式是从根目录执行的

6.2 指定编译的模块或目录(接着5.1)

参考了 https://segmentfault.com/q/1010000021576084/

注意:

使用命令 -pl 命令指定模块编译,执行入口pom.xml的路径为根目录,就像上面我写的是build/pom.xml,那么我要编译sso-web-login,对应的写法“-pl ../sso-web-login -am”

就和build/pom.xml里配置的一样。

多个模块就用逗号隔开:-pl ../sso-service,../sso-web-login -am

-pl 是指定要编译的模块;

-am 表示同时编译它依赖的模块;

jenkins 指定编译,包含依赖模块,我在编译的pom.xml里配置了所有模块,比如eureka server这些都没有编译。

7.sonar scanner

分析命令说明

#项目的key(唯一)
sonar.projectKey=xxx
#项目名称,可以随意,
sonar.projectName=xxx
#项目版本
sonar.projectVersion=1.1.0-SNAPSHOT
sonar.language=java
sonar.sourceEncoding=UTF-8
#有时会出现Please provide compiled classes of your project with sonar.java.binaries property报错,所以加上扫描路径
sonar.java.binaries=./target/classes

构建后加入checkstyle findbugs pmd报表输出,默认就行,默认值是: **/checkstyle-result.xml

7.1 扫描指定模块

指定模块扫描方式不能用sonar scanner插件,它存在一些问题详细说明在下一章 持续集成七 Jenkins配置sonar 配置多模块覆盖率为0问题

对应5.2节,在配置了指定的模块编译,导致某些目录没有编译(没有字节码文件),如果不配置soanr扫描的路径就会报错;soanr扫描需要一个binaries的属性,就是需要编译后的字节码。

这里用到还是sonarQube analysis with maven 功能,在最后增加如下属性,指定扫描已经编译成功的文件路径,注意sonar.inclusions配置的路径是相对项目的,不是相对build/pom.xml

-Dsonar.inclusions=sso-service/**/*,sso-web-login/**/*

同时,如果有配置5.1节(指定pom.xml)这里也需要一样的配置,没有指定自定义pom,那么这里默认就行

同样排除指定目录:

-Dsonar.exclusions=sso-service/**/*,sso-web-login/**/*

如下图配置:

扫描结果

8.配置前端扫描

配置扫描前端代码,首先还是插件。

这里我扫描的是vue,查看插件支持文件:

下面着有关目录的看情况配置

sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
#为项目根目录名称
sonar.modules=xxx/src
# JavaScript module