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,遵循下列步驟操作:
-
將下載的文件解壓到你選擇的目錄,暫且假設該目錄路徑為:
$install_directory
-
通過編輯
$install_directory/conf/sonar-scanner.properties
,更新全局配置以指向 SonarQube 服務器:#----- 設置默認的SonarQube服務器 #sonar.host.url=http://localhost:9000
-
將
$install_directory/bin
目錄添加到PATH環境變量中。 -
通過打開一個新的 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
如果您需要查看更多的調試信息,您可以添加
-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 上提供了適用於大多數語言的簡單項目示例。點擊瀏覽或下載示例項目。
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/