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
    
  3. $install_directory/bin目錄添加到PATH環境變量中。

  4. 通過打開一個新的 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命令選項

  5. 在項目根目錄下運行以下命令以啟動分析並傳遞身份驗證令牌
    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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM