SonarQube掃描源代碼的方法
雷建鋒
一、分析源代碼綜述
一旦成功安裝了SonarQube平臺,您就可以開始安裝一個分析器并開始創建項目了。在第一次分析時,該平臺會自動創建一個項目。如果您需要在第一個分析之前在項目上設置一些配置,那么您可以選擇配置它。
1.分析范圍:文件類型和數據類型
SonarQube可以對20多種不同的語言進行分析。這種分析的結果將是質量度量和問題(編碼規則被破壞的實例)。然而,分析的內容會因語言而異:
l? 在所有語言中,“(blame)責備”數據將自動從支持的SCM提供者中導入。Git和SVN都是自動支持的。其他提供商需要額外的插件。
l? 在所有語言中,都執行對源代碼的靜態分析(Java文件、COBOL程序等)
l? 可以對某些語言執行編譯后的代碼的靜態分析(Java中的類文件,c#的dll文件等等。)
l? 可以對某些語言執行對代碼的動態分析
2.無法識別的文件
默認情況下,只有在分析過程中,才會將被語言插件識別的文件加載到項目中。例如,如果您的SonarQube實例上有Java和JavaScript插件,那么所有.Java和.js文件都會被加載,但是.xml文件將被忽略。
3.分析過程中
在分析過程中,從服務器請求數據,分析文件,然后以報告的形式將結果數據發送回服務器,然后在服務器端異步分析。分析報告是排隊的,并按順序處理,因此很有可能在您的分析日志顯示完成之后的一個短暫的時間內,更新后的值在SonarQube項目中是不可見的。但是,您將能夠知道發生了什么,因為一個圖標將被添加到項目名稱旁邊。鼠標懸停在上面以獲得更詳細的信息(如果您使用適當的權限登錄,則會鏈接到鏈接)。
一旦處理完成,圖標就會消失,但是如果分析報告處理失敗了,那么圖標將會改變:
4.運行分析
首先,您應該為將要分析的項目的語言安裝插件,可以直接下載,也可以通過更新中心下載安裝;然后,您需要選擇一個分析方法。以下是可用的:
·??????? :?分析.net項目
·??????? :
Launch analysis from Maven with minimal configuration
·??????? :?Launch Gradle analysis
·??????? : Launch analysis from Ant
·??????? : Launch analysis from Jenkins
·??????? :?當其他分析程序都不合適時,從命令行啟動分析。
注意,我們不建議在SonarQube分析運行的機器上運行防病毒掃描器,它可能導致不可預測的行為。
5.?? FAQ
Q.分析報錯:java.lang.OutOfMemoryError:
GC overhead limit exceeded.這個應該怎么處理?
A.這意味著您的項目太大或太復雜,以至于掃描器無法用默認的內存分配進行分析。要解決這個問題,您需要將較大的內存(使用-Xmx數值)分配給運行分析的進程,一些CI引擎可能會給你一個輸入來指定必要的值,例如,如果你在Jenkins的工作中使用Maven構建步驟來運行分析。否則,使用Java選項來設置更高的值。請注意,這里省略了設置Java選項的細節,因為它們根據環境的不同而有所不同。
二、
1.
特性Feature
SonarQube Scanner是默認用于分析SonarQube項目的啟動器。
2.
安裝
1)
下載軟件,并解壓到,下載地址:
2)
更新全局設置以指向您的SonarQube服務器,打開并編輯編輯/conf/sonar-scanner.properties:
#-----
Default SonarQube server
sonar.host.url= #sonar.host.url配置的是實際sonar服務器的地址
3)
將?/bin?目錄添加到系統環境變量"path"中
4)
驗證安裝是否成功:打開cmd面板,輸入sonar-scanner -h,出現下圖,則表示環境變量設置成功:
如果您需要更多的調試信息,您可以添加sonar.verbose屬性,添加命令行參數-Dsonar.verbose=true。
3.
用法use
1)在項目的根目錄中創建一個配置文件:?sonar-project.properties
\
需要注意的是,需要分析的源碼在windows系統上的,路徑分隔符需要將'\'替換為'/'。
2)
按照官方文檔設置配置文件時候,sonar scanner掃描報錯“Please provide compiled classes of your project with
sonar.java.binaries property”,解決辦法是在sonar-project.properties
文件中增加一行
sonar.java.binaries=項目路徑/target/classes
以下是一個實際項目的配置文件:
# must be
unique in a given SonarQube instance
sonar.projectKey=game-of-life
# this is the
name and version displayed in the SonarQube UI. Was mandatory #prior to
SonarQube 6.1.
sonar.projectName=game-of-life
sonar.projectVersion=1.0
#sonar.language=java
# Path is
relative to the sonar-project.properties file. Replace "\" by
"/" on #Windows.
# This property
is optional if sonar.modules is set.
sonar.sources=.
# Encoding of
the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
sonar.java.binaries=C:/game-of-life-master/gameoflife-core/build/classes
3)
進行項目根目錄,也即sonar-project.properties文件所在目錄,運行命令sonar-scanner
4)
若分析成功,則出現如下界面:
5)
登錄sonar服務器,會發現多了一個項目,即剛剛分析的項目。
6)
安全
任何授予執行分析權限的用戶都可以進行分析。如果任何一個組沒有被授予執行分析權限,或者SonarQube實例被保護(屬性被設置為true),具有執行分析權限的用戶的分析令牌必須通過?sonar.login屬性提供。舉例::?sonar-scanner -Dsonar.login=[my
analysis token]
4.
故障排除troubleshooting
5.?????? Going Future
三、
特性
建議對Java Maven項目使用此分析器進行分析。
先決條件
l? Maven 3.x
l? SonarQube已經完成
l? 至少您的SonarQube服務器支持的最小版本的Java是在使用的(最新LTS的Java 8)
l? 您希望分析的每種語言的語言插件都已安裝
l? 您已經閱讀了
初始設置:全局設置
編輯位于$ MAVEN_HOME
/ conf或?/ .m2中的settings.xml文件。有三個地方需要新增:1)本地倉庫路徑localRepository? 2)pluginGroup 3)sonar配置。舉例:
D:/maven/repo? #替換成本地repo倉庫
org.sonarsource.scanner.maven
sonar
true
#替換成自己sonar服務器的實際RUL
分析一個Maven項目
分析一個Maven項目包括在pom.xml文件所在的目錄中運行Maven目標:sonar:sonar
mvn clean verify sonar:sonar
# In some situation you may want to run sonar:sonar goal as a dedicated
step. Be sure to use install as first step for multi-module projects
mvn clean install
mvn sonar:sonar
# Specify the version of sonar-maven-plugin instead of using the latest.
See also 'How to Fix Version of Maven Plugin' below.
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1170:sonar
舉例:
xmlns:xsi=""
xsi:schemaLocation="
">
D:/maven/repo
org.sonarsource.scanner.maven
sonar
true
分析完成后,若分析成功,則會出現這樣的界面
打開SonarQube系統,發現新項目已經體現在系統中的了
要獲得覆蓋率信息,您需要在分析之前生成覆蓋率報告。有關更多信息,請參閱。
四、
五、其他
sonarlint和pylint,與IDE結合使用非常好。