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 <arg> 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 項目,這默認為 <groupId>:<artifactId> |
可選參數
項目標識
鑰匙 | 描述 | 默認 |
---|---|---|
sonar.projectName |
將顯示在 Web 界面上的項目名稱。 | <name> 對於 Maven 項目,否則為項目密鑰。如果未提供且數據庫中已有名稱,則不會被覆蓋 |
sonar.projectVersion |
項目版本。 | <version> 對於 Maven 項目,否則“不提供” |
驗證
默認情況下,需要用戶身份驗證以防止匿名用戶瀏覽和分析您實例上的項目,並且您在運行分析時需要傳遞這些參數。身份驗證在全局安全 (/instance-administration/security/) 設置中強制執行。
當需要身份驗證或“任何人”偽組沒有執行分析的權限時,您需要提供具有執行分析權限的用戶憑據,以便在其下運行分析。
鑰匙 | 描述 | 默認 |
---|---|---|
sonar.login |
對項目具有執行分析權限的 SonarQube 用戶的身份驗證令牌或登錄名。 | |
sonar.password |
如果您使用身份驗證令牌,請將其留空。如果您使用登錄名,則這是與您的sonar.login 用戶名一起使用的密碼。 |
網頁服務
鑰匙 | 描述 | 默認 |
---|---|---|
sonar.ws.timeout |
等待 Web 服務調用響應的最長時間(以秒為單位)。僅當您在分析期間等待服務器響應 Web 服務調用時遇到超時時,從默認值修改此值才有用。 | 60 |
項目配置
鑰匙 | 描述 | 默認 |
---|---|---|
sonar.projectDescription |
項目說明。 | <description> 對於 Maven 項目 |
sonar.links.homepage |
項目主頁。 | <url> 對於 Maven 項目 |
sonar.links.ci |
持續集成。 | <ciManagement><url> 對於 Maven 項目 |
sonar.links.issue |
問題跟蹤器。 | <issueManagement><url> 對於 Maven 項目 |
sonar.links.scm |
項目源代碼庫。 | <scm><url> 對於 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 ![]() |
開發者連接。 | <scm><developerConnection> 對於 Maven 項目 |