分类: 敏捷开发
2018-09-06 23:19:32
SonarQube扫描源代码的方法
雷建锋
一、分析源代码综述一旦成功安装了SonarQube平台,您就可以开始安装一个分析器并开始创建项目了。在第一次分析时,该平台会自动创建一个项目。如果您需要在第一个分析之前在项目上设置一些配置,那么您可以选择配置它。
1. 分析范围:文件类型和数据类型
SonarQube可以对20多种不同的语言进行分析。这种分析的结果将是质量度量和问题(编码规则被破坏的实例)。然而,分析的内容会因语言而异:
l 在所有语言中,“(blame)责备”数据将自动从支持的SCM提供者中导入。Git和SVN都是自动支持的。其他提供商需要额外的插件。
l 在所有语言中,都执行对源代码的静态分析(Java文件、COBOL程序等)
l 可以对某些语言执行编译后的代码的静态分析(Java中的类文件,c#的dll文件等等。)
l 可以对某些语言执行对代码的动态分析
2. 无法识别的文件
默认情况下,只有在分析过程中,才会将被语言插件识别的文件加载到项目中。例如,如果您的SonarQube实例上有Java和JavaScript插件,那么所有.Java和.js文件都会被加载,但是.xml文件将被忽略。
3. 分析过程中
在分析过程中,从服务器请求数据,分析文件,然后以报告的形式将结果数据发送回服务器,然后在服务器端异步分析。分析报告是排队的,并按顺序处理,因此很有可能在您的分析日志显示完成之后的一个短暂的时间内,更新后的值在SonarQube项目中是不可见的。但是,您将能够知道发生了什么,因为一个图标将被添加到项目名称旁边。鼠标悬停在上面以获得更详细的信息(如果您使用适当的权限登录,则会链接到链接)。
一旦处理完成,图标就会消失,但是如果分析报告处理失败了,那么图标将会改变:
4. 运行分析
首先,您应该为将要分析的项目的语言安装插件,可以直接下载,也可以通过更新中心下载安装;然后,您需要选择一个分析方法。以下是可用的:
· : 分析.net项目
· : Launch analysis from Maven with minimal configuration
· : Launch Gradle analysis
· : Launch analysis from Ant
· : Launch analysis from Jenkins
· : 当其他分析程序都不合适时,从命令行启动分析。
注意,我们不建议在SonarQube分析运行的机器上运行防病毒扫描器,它可能导致不可预测的行为。
5. FAQ
Q. 分析报错: java.lang.OutOfMemoryError: GC overhead limit exceeded. 这个应该怎么处理?
A. 这意味着您的项目太大或太复杂,以至于扫描器无法用默认的内存分配进行分析。要解决这个问题,您需要将较大的内存(使用-Xmx数值)分配给运行分析的进程,一些CI引擎可能会给你一个输入来指定必要的值,例如,如果你在Jenkins的工作中使用Maven构建步骤来运行分析。否则,使用Java选项来设置更高的值。请注意,这里省略了设置Java选项的细节,因为它们根据环境的不同而有所不同。
二、1. 特性Feature
SonarQube Scanner是默认用于分析SonarQube项目的启动器。
2. 安装
1)
下载软件,并解压到
2)
更新全局设置以指向您的SonarQube服务器,打开并编辑编辑
#----- Default SonarQube server
sonar.host.url= #sonar.host.url配置的是实际sonar服务器的地址
3)
将
4) 验证安装是否成功:打开cmd面板,输入sonar-scanner -h,出现下图,则表示环境变量设置成功:
如果您需要更多的调试信息,您可以添加 sonar.verbose 属性,添加命令行参数-Dsonar.verbose=true。
3. 用法use
1) 在项目的根目录中创建一个配置文件: sonar-project.properties
\
需要注意的是,需要分析的源码在windows系统上的,路径分隔符需要将'\'替换为'/'。
2) 按照官方文档设置配置文件时候, sonar scanner扫描报错“Please provide compiled classes of your project with sonar.java.binaries property”,解决办法是在sonar-project.properties
文件中增加一行
sonar.java.binaries=项目路径/target/classes
以下是一个实际项目的配置文件:
# must be unique in a given SonarQube instance
sonar.projectKey=game-of-life
# this is the name and version displayed in the SonarQube UI. Was mandatory #prior to SonarQube 6.1.
sonar.projectName=game-of-life
sonar.projectVersion=1.0
#sonar.language=java
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on #Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
sonar.java.binaries=C:/game-of-life-master/gameoflife-core/build/classes
3) 进行项目根目录,也即sonar-project.properties文件所在目录,运行命令sonar-scanner
4) 若分析成功,则出现如下界面:
5) 登录sonar服务器,会发现多了一个项目,即刚刚分析的项目。
6) 安全
任何授予执行分析权限的用户都可以进行分析。如果任何一个组没有被授予执行分析权限,或者SonarQube实例被保护(属性被设置为true),具有执行分析权限的用户的分析令牌必须通过 sonar.login属性提供。举例:: sonar-scanner -Dsonar.login=[my analysis token]
4. 故障排除troubleshooting
5. Going Future
特性
建议对Java Maven项目使用此分析器进行分析。
先决条件
l Maven 3.x
l SonarQube已经完成
l 至少您的SonarQube服务器支持的最小版本的Java是在使用的(最新LTS的Java 8)
l 您希望分析的每种语言的语言插件都已安装
l 您已经阅读了
初始设置:全局设置
编辑位于$ MAVEN_HOME / conf或?/ .m2中的 settings.xml文件。有三个地方需要新增:1)本地仓库路径localRepository 2)pluginGroup 3)sonar配置。举例:
#替换成自己sonar服务器的实际RUL
分析一个Maven项目
分析一个Maven项目包括在pom.xml文件所在的目录中运行Maven目标:sonar:sonar
mvn clean verify sonar:sonar
# In some situation you may want to run sonar:sonar goal as a dedicated step. Be sure to use install as first step for multi-module projects
mvn clean install
mvn sonar:sonar
# Specify the version of sonar-maven-plugin instead of using the latest. See also 'How to Fix Version of Maven Plugin' below.
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1170:sonar
举例:
xmlns:xsi=""
xsi:schemaLocation="
">
分析完成后,若分析成功,则会出现这样的界面
打开SonarQube系统,发现新项目已经体现在系统中的了
要获得覆盖率信息,您需要在分析之前生成覆盖率报告。有关更多信息,请参阅。
sonarlint和pylint,与IDE结合使用非常好。