问题
如何做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版本一致。