SonarScanner 是当您的构建系统没有特定扫描仪时使用的扫描仪。
配置您的项目
在你的项目根目录中创建一个名为的配置文件 sonar-project.properties
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# --- optional properties ---
# defaults to project key
#sonar.projectName=My project
# defaults to 'not provided'
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
#sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
从 zip 文件运行 SonarScanner
要从 zip 文件运行 SonarScanner,请按照下列步骤操作:
- 将下载的文件展开到您选择的目录中。我们将
$install_directory
在接下来的步骤中引用它。 -
通过编辑更新全局设置以指向您的 SonarQube 服务器
$install_directory/conf/sonar-scanner.properties
:#----- Default SonarQube server #sonar.host.url=http://localhost:9000
- 将
$install_directory/bin
目录添加到您的路径中。 -
通过打开一个新的 shell 并执行命令
sonar-scanner -h
(sonar-scanner.bat -h
在 Windows 上)来验证您的安装。你应该得到这样的输出:usage: sonar-scanner [options] Options: -D,--define
Define property -h,--help Display help information -v,--version Display version information -X,--debug Produce execution debug output 如果您需要更多的调试信息,您可以添加以下的一个命令行:
-X
,--verbose
或-Dsonar.verbose=true
。 - 从项目基本目录运行以下命令以启动分析并传递您的身份验证令牌:
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 上提供了适用于大多数语言的简单项目示例。可以浏览或下载它们。您会在 sonarqube-scanner/src 下找到它们。
sonar-project.properties 的替代品
如果在项目的根目录下无法创建 sonar-project.properties 文件,有以下几种选择:
-
可以通过命令行直接指定属性。前任:
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=src1
-
属性 project.settings 可用于指定项目配置文件的路径(此选项与
sonar.projectBaseDir
属性不兼容)。前任:sonar-scanner -Dproject.settings=../myproject.properties
sonar.projectBaseDir
从 SonarScanner 2.4 开始,可以通过属性设置要分析的项目的根文件夹。sonar-project.properties
如果sonar.projectKey
未在命令行中指定,则此文件夹必须包含一个文件。可以在此项目配置文件中或通过命令行参数定义其他分析参数。
备用分析目录
如果要分析的文件不在分析开始的目录中,请使用该sonar.projectBaseDir
属性将分析移动到其他目录。EG 分析开始于jenkins/jobs/myjob/workspace
但要分析的文件在ftpdrop/cobol/project1
. 这配置sonar-project.properties
如下:
sonar.projectBaseDir=/home/ftpdrop/cobol/project1
sonar.sources=src
sonar.cobol.copy.directories=/copy
分析参数
可以在多个位置配置项目分析设置。这是层次结构:
- 在 UI 中定义的全局属性适用于所有项目(从顶部栏中,转到管理 > 配置 > 常规设置)
- 在 UI 中定义的项目属性会覆盖全局属性值(在项目级别,转到“项目设置”>“常规设置”)
- 在项目分析配置文件或扫描仪配置文件中定义的项目分析参数会覆盖 UI 中定义的参数
- 分析/命令行参数,在启动分析时定义(
-D
在命令行上),覆盖项目分析参数
请注意,只有通过 UI 设置的参数才会存储在数据库中。例如,如果您sonar.exclusions
通过命令行覆盖特定项目的参数,它将不会存储在数据库中。后续分析或 SonarLint 中连接模式的分析仍将使用 UI 中定义的排除项执行,因此存储在 DB 中。
界面中显示的大多数全局和项目级别的属性键也可以设置为分析参数,但下面列出的参数只能在分析时设置。
有关与测试覆盖率和执行相关的特定于语言的参数,请参阅测试覆盖率和执行。
有关与外部问题报告相关的特定于语言的参数,请参阅外部问题。
分析参数区分大小写。
强制参数
服务器
钥匙 | 描述 | 默认 |
---|---|---|
sonar.host.url |
服务器网址 | http://本地主机:9000 |
项目配置
钥匙 | 描述 | 默认 |
---|---|---|
sonar.projectKey |
项目的唯一键。允许的字符是:字母,数字- ,_ ,. 和: ,与至少一个非数字字符。 |
对于 Maven 项目,这默认为
|
可选参数
项目标识
钥匙 | 描述 | 默认 |
---|---|---|
sonar.projectName |
将显示在 Web 界面上的项目名称。 | 对于 Maven 项目,否则为项目密钥。如果未提供且数据库中已有名称,则不会被覆盖 |
sonar.projectVersion |
项目版本。 | 对于 Maven 项目,否则“不提供” |
验证
默认情况下,需要用户身份验证以防止匿名用户浏览和分析您实例上的项目,并且您在运行分析时需要传递这些参数。身份验证在全局安全 (/instance-administration/security/) 设置中强制执行。
当需要身份验证或“任何人”伪组没有执行分析的权限时,您需要提供具有执行分析权限的用户凭据,以便在其下运行分析。
钥匙 | 描述 | 默认 |
---|---|---|
sonar.login |
对项目具有执行分析权限的 SonarQube 用户的身份验证令牌或登录名。 | |
sonar.password |
如果您使用身份验证令牌,请将其留空。如果您使用登录名,则这是与您的sonar.login 用户名一起使用的密码。 |
网页服务
钥匙 | 描述 | 默认 |
---|---|---|
sonar.ws.timeout |
等待 Web 服务调用响应的最长时间(以秒为单位)。仅当您在分析期间等待服务器响应 Web 服务调用时遇到超时时,从默认值修改此值才有用。 | 60 |
项目配置
钥匙 | 描述 | 默认 |
---|---|---|
sonar.projectDescription |
项目说明。 | 对于 Maven 项目 |
sonar.links.homepage |
项目主页。 | 对于 Maven 项目 |
sonar.links.ci |
持续集成。 | 对于 Maven 项目 |
sonar.links.issue |
问题跟踪器。 | 对于 Maven 项目 |
sonar.links.scm |
项目源代码库。 | 对于 Maven 项目 |
sonar.sources |
包含主要源文件的目录的逗号分隔路径。 | 从 Maven、Gradle、MSBuild 项目的构建系统读取。当既不提供sonar.sources 也不sonar.tests 提供时,默认为项目基目录。 |
sonar.tests |
包含测试源文件的目录的逗号分隔路径。 | 从 Maven、Gradle、MSBuild 项目的构建系统中读取。否则默认为空。 |
sonar.sourceEncoding |
源文件的编码。例如:UTF-8 , MacRoman , Shift_JIS 。这个属性可以替换为project.build.sourceEncoding Maven 项目中的标准属性。可用编码列表取决于您的 JVM。 |
系统编码 |
sonar.externalIssuesReportPaths |
通用问题报告的逗号分隔路径列表。 | |
sonar.projectDate |
为分析指定一个日期。此参数仅在您需要追溯创建未分析项目的历史记录时才有用。格式为yyyy-MM-dd ,例如:2010-12-01。由于您无法在数据库中最近一次之前执行分析,因此您必须按时间顺序重新创建您的项目历史记录,最旧的在前。注意:如果您希望创建长期运行的历史记录,您可能需要调整内部管理设置。 |
当前的日期 |
sonar.projectBaseDir |
当您需要在不同于启动目录的目录中进行分析时,请使用此属性。EG 分析开始于jenkins/jobs/myjob/workspace 但要分析的文件在ftpdrop/cobol/project1 . 路径可以是相对的或绝对的。不是指定源目录,而是指定源目录的某个父目录。此处指定的值成为新的“分析目录”,然后指定其他路径,就好像分析从 的指定值开始一样sonar.projectBaseDir 。注意分析过程会需要这个目录的写权限;这是sonar.working.directory 意志被创造的地方。 |
|
sonar.working.directory |
为使用 SonarScanner 或 SonarScanner for Ant(大于 2.0 的版本)触发的分析设置工作目录。此属性与 MSBuild 的 SonarScanner 不兼容。路径必须是相对的,并且对于每个项目都是唯一的。注意:每次分析前都会删除指定的文件夹。 | .scannerwork |
sonar.scm.provider |
此属性可用于明确告诉 SonarQube 您在项目中使用的是哪个 SCM(以防自动检测不起作用)。此属性的值始终为小写并取决于 SCM(例如,如果您使用的是 Git,则为“git”)。查看SCM 集成文档了解更多信息。 | |
sonar.scm.forceReloadAll |
默认情况下,只检索已更改文件的责任信息。将此属性设置true 为加载所有文件的责任信息。如果您觉得某些 SCM 数据已过时,但 SonarQube 未从 SCM 引擎获取最新信息,这可能很有用。 |
|
sonar.scm.exclusions.disabled |
对于支持的引擎,SCM 忽略的文件,即 中列出的文件.gitignore ,也将自动被分析忽略。将此属性设置true 为禁用该功能。如果sonar.scm.disabled 设置为 ,则始终禁用 SCM 排除true 。 |
|
sonar.scm.revision |
覆盖分析结果中显示的修订,例如 Git sha1。默认值由 CI 环境提供或由检出源猜测。 | |
sonar.buildString |
使用此属性传递的字符串将与分析一起存储并在 的结果中可用api/project_analyses/search ,从而允许您稍后识别特定分析并获取其 ID 以用于api/project_analyses/set_baseline 。 |
|
sonar.analysis.[yourKey] |
此属性存根允许您将自定义键/值对插入分析上下文,这也将传递给webhooks。 |
重复
钥匙 | 描述 | 默认 |
---|---|---|
sonar.cpd.${language}.minimumtokens |
只要一行中至少有 100 个重复的标记(覆盖sonar.cpd.${language}.minimumTokens )分布在至少 10 行代码(覆盖sonar.cpd.${language}.minimumLines )中,一段代码就被认为是重复的。对于 Java 项目,如果一行中至少有 10 条语句,则无论标记和行数如何,都认为一段代码是重复的。此阈值不能被覆盖。 |
100 |
sonar.cpd.${language}.minimumLines |
(看上面) | 10 |
分析日志
钥匙 | 描述 | 默认 |
---|---|---|
sonar.log.level |
控制分析期间生成的日志的数量/级别。DEBUG :INFO 在DEBUG 级别显示日志+更多详细信息。类似于sonar.verbose=true 。TRACE :显示DEBUG 日志 + SonarScanner 执行的所有 ElasticSearch 查询和 Web API 调用的时间。 |
INFO |
sonar.verbose |
向客户端和服务器端分析日志添加更多详细信息。激活DEBUG 扫描仪模式,并将客户端环境变量和系统属性添加到分析报告处理的服务器端日志中。注意:如果将密码等敏感信息存储为服务器端环境变量,则此设置可能会暴露这些信息。 |
错误的 |
sonar.scanner.dumpToFile |
将传递给扫描仪 API 的完整属性列表输出到指定文件,作为调试分析的一种方式。 | |
sonar.scanner.metadataFilePath |
设置扫描器写入report-task.txt 文件的位置,其中包含ceTaskId . |
的价值 sonar.working.directory |
质量门
钥匙 | 描述 | 默认 |
---|---|---|
sonar.qualitygate.wait |
强制分析步骤轮询 SonarQube 实例并等待 Quality Gate 状态。如果没有其他选项,您可以使用它在 Quality Gate 失败时使管道构建失败。有关更多信息,请参阅CI 集成页面。 | |
sonar.qualitygate.timeout |
设置扫描器应等待处理报告的秒数。 | 300 |
已弃用
列出这些参数是为了完整性,但已弃用,不应在新分析中使用。
钥匙 | 描述 | |
---|---|---|
sonar.links.scm_dev 自 SQ 7.1 起已弃用 |
开发者连接。 | 对于 Maven 项目 |