静态扫描体系集成
静态扫描体系集成
介绍
静态扫描体系集成(Static Analysis Integration)是指将静态代码分析工具和相关技术集成到软件开发和交付流程中的一种实践。这种方法主要用于在代码编写和维护的早期阶段识别和修复潜在的缺陷、代码质量问题和安全漏洞,旨在提高软件的整体质量和安全性。
针对JAVA
代码
- 使用
jenkins
插件FindBugs
对JAVA
代码进行静态分析 - 支持项目类型:
Maven
,Gradle
,Ant
等 - 可以再不允许程序的前提下对软件进行潜在
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
,便可看到生成的分析报告
针对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
版本一致。
总结
静态扫描作为代码质量评估的一大手段,将其掌握,必然对持续集成,质量优化皆有益处。