如何针对python代码进行质量检测

问题

如何做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对应工作节点上配置环境变量

    • toolSonarQube Scanner安装->填写工具地址
    • systemSonarQube servers:填写名称(任意),Server URLSonar服务地址
  • 在对应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 argumentsJVM Options如无需要都可忽略

  • 可能的报错:因为节点配置了sonar的地址,所以sonar的版本需要和scanner的版本有一定对应,至少要二者使用的jdk版本一致。