问题
如何做python代码的质量检测
描述
针对python代码-Sonar平台
sonar 是一个代码质量检测平台,适用于多个平台,适配多种语言,并且需要配置数据库,JDK来运行。
数据库
- sonar本身有内置数据库,虽然推荐用第三方数据库,因为在数据管理时较为方便,但是在不设置数据库时,单凭内置数据库也可正常启动sonar平台
- 低版本的sonar平台(8.0以下)可兼容mysql,(8.0以上)较高版本sonar平台则不再兼容mysql,如需使用别的第三方数据库则要另选他法。
sonar与sonar scanner
-
sonar是一个开源的平台服务,适用多个平台,将sonar文件下载下来,然后从根目录->bin->然后根据自己的系统(mac,win,linux)等选择启动文件(该平台启动需要jdk环境,所以需要选择与sonar对应的jdk版本:8.0以下jdk版本最高不超过11,<7.8版本的sonar>对应的版本是jdk11,而如果再往上的版本则可能要17)
-
报错记录:启动
sonar
(7.8)(win系统)时报错:缺少log4j模块,建议添加log4j-core
到classpath。 此处便是因为sonar
(7.8)对应jdk11
,而我当时启动的系统配置为jdk17
,后面更换为jdk11
后便启动成功了 -
启动成功后默认的端口的9000,如若本地启动,则浏览器输入
127.0.0.1:9000
便可正常登录sonar
平台 -
sonar scanner
则是质量扫码器,常用的扫描器便是:sonar scanner
,也存在别的扫码器,如有需要可另行选择。 -
sonar scanner
本身也有版本区分,首先需要下载sonar scanner
文件,然后选中其中的启动文件,查看其命令可知,sonar scanner
在启动命令中编写了关于选中jdk
的命令,可知此处实际上是调用了scanner
本身内置的jdk,所以会出现无论本地系统设置了什么jdk
,在启动scanner
时,选中的jdk
版本却是固定的,因为这里是使用了scanner
内置的jdk
版本【4.x版本左右的scanner
内置jdk
版本为11,而最新版的scanner
(6.x)内置jdk
版本为17】 -
set use_embedded_jre=true if "%use_embedded_jre%" == "true" ( set "JAVA_HOME=%SONAR_SCANNER_HOME%\jre" )
jenkins上集成sonar
-
jenkins下载插件
sonarQube Scanner for Jenkins
-
sonar
生成一个token- 登录
sonar
平台(使用admin账号:admin:admin) - 点击头像->
my account
->然后生成token并记录下来
- 登录
-
在
jenkins
对应工作节点上配置环境变量-
tool
:SonarQube Scanner
安装->填写工具地址 -
system
:SonarQube servers
:填写名称(任意),Server URL
:Sonar
服务地址
-
-
在对应
job
中配置sonar
-
在
Build Steps
中选择Execute SonarQube Scanner
-
填写:jdk(这个默认就行,因为就算你选了,但是在
scanner
启动命令中没有去除使用内置jdk
的命令,那么此处设置任何jdk
都不影响scanner
启动时真正调用的jdk
版本) -
填写:
Path to project properties
这个参数好像是项目配置地址,默认不填好像也行 -
填写:
Analysis properties
此处是填写分析配置:(此处无标准模版,如有需要请自行搜寻对应配置) -
sonar.projectname=${JOB_NAME} sonar.projectKey=${JOB_NAME} sources=./ sonar.java.binaries=target/ sonar.java.source=11
-
后面的参数:
Additional arguments
和JVM Options
如无需要都可忽略
-
-
可能的报错:因为节点配置了
sonar
的地址,所以sonar
的版本需要和scanner
的版本有一定对应,至少要二者使用的jdk
版本一致。