Sonar扫描之SonarScanner介绍

简介: Sonar扫描之SonarScanner介绍

Sonar扫描之SonarScanner介绍

SonarScanner用于在构建系统没有指定scanner时使用。

项目配置

在你的项目根目录中创建一个名为 sonar-project.properties的配置文件

# 在给定的SonarQube实例中必须保持唯一
sonar.projectKey=my:project
# --- 可选属性 ---
# 默认值为projectKey
#sonar.projectName=My project
# 默认值为'not provided'
#sonar.projectVersion=1.0
# 默认为 . 路径相对于sonar-project.properties而言
#sonar.sources=.
# 源代码文件编码. 默认为系统默认编码
#sonar.sourceEncoding=UTF-8

从 zip 文件运行 SonarScanner

要从 zip 文件运行 SonarScanner,遵循下列步骤操作:

  1. 将下载的文件解压到你选择的目录,暂且假设该目录路径为:$install_directory
  2. 通过编辑$install_directory/conf/sonar-scanner.properties,更新全局配置以指向 SonarQube 服务器:
#----- 设置默认的SonarQube服务器
#sonar.host.url=http://localhost:9000
  1. $install_directory/bin目录添加到PATH环境变量中。
  2. 通过打开一个新的 shell 并执行命令sonar-scanner -h( Windows 上 sonar-scanner.bat -h)来验证安装是否正确,看到类似如下输出则表示成功:
usage: sonar-scanner [options]
Options:
 -D,--define <arg>     Define property
 -h,--help             Display help information
 -v,--version          Display version information
 -X,--debug            Produce execution debug output
  1. 如果您需要查看更多的调试信息,您可以添加 -X--verbose-Dsonar.verbose=true命令选项
  2. 在项目根目录下运行以下命令以启动分析并传递身份验证令牌
    sonar-scanner -Dsonar.login=myAuthenticationToken

从 Docker 镜像运行 SonarScanner

使用以下命令,使用 SonarScanner Docker 镜像进行扫描:

docker run \
    --rm \
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}" \
    -e SONAR_LOGIN="myAuthenticationToken" \
    -v "${YOUR_REPO}:/usr/src" \
    sonarsource/sonar-scanner-cli

扫描 C、C++ 或 ObjectiveC 项目

扫描包含 C、C++ 或 ObjectiveC 代码的项目需要一些额外的分析步骤。查看完整信息C/C++/Objective-C

示例项目

GitHub 上提供了适用于大多数语言的简单项目示例。点击浏览下载示例项目。

sonar-project.properties 的替代品

如果在项目的根目录下无法创建 sonar-project.properties 文件,有以下几种选择:

  • 可以通过命令行直接指定属性。例子:
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=src1
  • 属性 project.settings 可用于指定项目配置文件的路径(此选项与sonar.projectBaseDir属性不兼容)。例子:
sonar-scanner -Dproject.settings=../myproject.properties
  • 从 SonarScanner 2.4 开始,可以通过sonar.projectBaseDir属性设置要分析项目的根文件夹。如果未在命令行中指定sonar.projectKey,则该文件夹必须包含sonar-project.properties文件。可以在此项目配置文件中或通过命令行参数定义其他参数。

注意:命令行参数优先于sonar-project.properties配置,也就是说,当命令行和sonar-project.properties存在相同参数配置的情况下,以命令行的参数配置为准

可选分析目录

如果要分析的文件不在运行sonar-scanner程序时所在目录,那么需要使用sonar.projectBaseDir属性将分析移动到待分析文件所在目录,否则会导致分析失败,因为程序默认在当前目录下执行扫描。例如,在jenkins/jobs/myjob/workspace目录下运行sonar-scanner,但要分析的文件存在/home/ftpdrop/cobol/project1目录,sonar-project.properties配置如下:

sonar.projectBaseDir=/home/ftpdrop/cobol/project1
sonar.sources=src

高级Docker配置

以下部分提供了使用Docker运行sonar-scanner时的高级配置选项

使用--user选项,以非root用户运行Docker镜像,例如:

docker run \
    --rm \
    --user="$(id -u):$(id -g)" \
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}"  \
    -v "${YOUR_REPO}:/usr/src" \
    sonarsource/sonar-scanner-cli

注意:以非root用户运行容器时,确保该用户对挂载的目录(比如代码目录或者scanner缓存目录)有读写权限,否则可能会遇到权限相关问题。

为了防止SonarScanner在每次运行扫描时重新下载语言分析器,可以挂载一个供scanner存储下载内容的目录,以便在scanner运行期间可以重用下载的内容。在某些CI系统上,还需要将此目录添加到CI缓存配置中。以下命令将在运行之间存储和使用缓存:

docker run \
    --rm \
    -v ${YOUR_CACHE_DIR}:/opt/sonar-scanner/.sonar/cache \
    -v ${YOUR_REPO}:/usr/src \
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}" \
    sonarsource/sonar-scanner-cli

还可以使用SONAR_USER_HOME环境变量更scanner存储下载内容的位置。

故障排除

Java heap space error or java.lang.OutOfMemoryError

通过SONAR_SCANNER_OPTS环境变量增加内存

Linux:

export SONAR_SCANNER_OPTS="-Xmx512m"

Windows:

set SONAR_SCANNER_OPTS=-Xmx512m

Unsupported major.minor version

升级用于分析的Java版本,或使用一个本机包(嵌入自己的Java运行时)

Property missing: `sonar.cs.analyzer.projectOutPaths'. No protobuf files will be loaded for this project.

Scanner CLI无法分析.NET项目。请用SonarScanner for .NET。

参考连接

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

目录
相关文章
|
3月前
|
Java Spring 容器
springcloud项目中指定扫描路径
springcloud项目中指定扫描路径
159 7
|
jenkins 持续交付
解决Sonarqube quality gate获取不到Sonarqube正确扫描结果的问题
在Jenkins pipeline中,一般都会用到Sonar-scanner来扫描代码,扫描完之后,把结果上传到SonarQube中,SonarQube把结果与质量阀进行对比,然后通过Sonarqube quality gate来判断这次扫描结果是成功还是失败。 不少同学都遇到过Sonarqube quality gate 获得的最后结果不正确,明明SonarQube中的结果是success,而Sonarqube quality gate判断的结果是pending。 这是怎么一回事呢?
2444 0
解决Sonarqube quality gate获取不到Sonarqube正确扫描结果的问题
五分钟带你玩转sonar(五)教你使用SonarLint插件
五分钟带你玩转sonar(五)教你使用SonarLint插件
3250 0
五分钟带你玩转sonar(五)教你使用SonarLint插件
|
Java
sonar入门:使用sonar-scanner检测代码
sonar入门:使用sonar-scanner检测代码
1477 0
sonar入门:使用sonar-scanner检测代码
|
3月前
|
SQL
2021Kali系列 -- Burpsuite+Sqlmap批量扫描
2021Kali系列 -- Burpsuite+Sqlmap批量扫描
102 0
|
3月前
|
Python
路径扫描 -- dirsearch
路径扫描 -- dirsearch
37 0
|
3月前
|
JavaScript 开发工具 Docker
扫描工具 -- ReconNote
扫描工具 -- ReconNote
37 0
|
3月前
扫描工具 -- Nuclei
扫描工具 -- Nuclei
242 0
|
Java Spring
SpringBoot不扫描某个包
因为项目中写了很多个CommandLineRunner,导致在本地启动项目的时候就会很慢,注释掉的话,又会很麻烦~~~
787 0
|
Java Spring 容器
springboot如何忽略扫描某个包范围的组件
springboot如何忽略扫描某个包范围的组件