目录
配置多个模块和单个模块不一样,多个模块配置问题可以看下一篇
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.定时任务配置:
参数一共五个
-
分钟 取值0-59
-
小时 取值 0-23
-
天 取值 1-31
-
月 取值 1-12
-
星期 取值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 扫描指定模块
对应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,那么这里默认就行
扫描结果
8.配置前端扫描
配置扫描前端代码,首先还是插件。
这里我扫描的是vue,查看插件支持文件:
下面着有关目录的看情况配置
sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
#为项目根目录名称
sonar.modules=xxx/src
# JavaScript module
javascript-module.sonar.projectName=xxx
javascript-module.sonar.language=js
javascript-module.sonar.sources=.
javascript-module.sonar.projectBaseDir=src