Skip to content

静态扫描体系集成

静态扫描体系集成

介绍

静态扫描体系集成(Static Analysis Integration)是指将静态代码分析工具和相关技术集成到软件开发和交付流程中的一种实践。这种方法主要用于在代码编写和维护的早期阶段识别和修复潜在的缺陷、代码质量问题和安全漏洞,旨在提高软件的整体质量和安全性。

针对JAVA代码

  • 使用jenkins插件FindBugsJAVA代码进行静态分析
  • 支持项目类型:MavenGradleAnt
  • 可以再不允许程序的前提下对软件进行潜在BUG分析
  • 帮助团队在程序运行之前就是最大程序的发现隐藏较深的问题
  • 提示内容:真正的缺陷,潜在可能发生的错误问题
  • 引入方式:pom.xml中添加FindBugs插件

环境准备

  • jenkins服务
  • 运行FindBugs静态扫描节点,已部署JAVA+Maven项目
  • Jenkins上已安装Warnings Next Generation插件
  • FindBugs静态扫描项目:https://github.com/princeqjzh/iWeb

操作步骤

  • 创建jenkins job 配置git信息,运行节点等信息
  • 配置构建命令,一般来说maven项目直接mvn clean install便可
  • cd 根目录 mvn clean install
  • 选择构建后步骤:post-build Actions->Record compiler warnings and static analysis results
  • 然后在Record compiler warnings and static analysis results中选择Tool中的工具FindBugs
  • 配置参数:Report File Pattern**/findbugsXml.xml (将扫描结果放到事前创建的空文件)
  • 保存配置,然后多次执行job,便可看到生成的分析报告 img.png img.png img.png

针对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 img.png
  • sonar生成一个token
    • 登录sonar平台(使用admin账号:admin:admin)
    • 点击头像->my account->然后生成token并记录下来 img.png
  • 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版本一致。

总结

静态扫描作为代码质量评估的一大手段,将其掌握,必然对持续集成,质量优化皆有益处。