Sonarqube作為程式碼的檢測,與Jenkins可搭配在CI的環境下進行建置時的自動程式碼檢測,在環境的建立上請先安裝:
- 下載安裝 Java : jre-8u251-windows-x64.exe
- 下載安裝 Java 11 : jdk-11.0.7_windows-x64_bin.exe
- 下載安裝 Visual Studio SQL server 2017 or 2019
接著依照下述步驟安裝
- Sonarqube (https://www.sonarqube.org/downloads/)
- SonarQube Scanner for MSBuild
環境設定與執行sonarqube參考網址:
轉貼內文:
在軟體開發的生命週期中,讓產出的程式碼可以維持著高品質也是非常重要的一件事情,例如在有些公司會透過
Code
Review,分析程式碼的品質及找出一些疏失問題,但若要用人工一一找出程式碼的潛在問題或安全性隱憂,實在是太花費時間和功夫了,SonarQube是一套Open
Source的程式碼品質分析工具,可幫我們對程式碼的品質做更完整的檢查,並找出一些可能的安全性隱憂。
安裝SonarQube
我們先到官網下載SonarQube,點擊下方連結前往進行下載。
並解壓縮到我們指定的目錄
修改設定檔 \conf\sonar.properties
在解壓縮目錄下的 conf 資料夾我們可以找到 sonar.properties
設定檔,在設定檔內我們要調整
sonar.jdbc.username={資料庫連線使用者名稱}
soanr.jdbc.password={資料庫連線使用者密碼}
sonar.jdbc.url=sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
設定資料庫
開啟SQL
Serve,建立資料庫sonar,資料庫名稱須與sonar.jdbc.url的databaseName相符合,並且必須設定資料庫定序為Case sensitivity(CS)和Accent
sensitivity(AS),如下圖
啟動SonarQube
打開 Command
Line,執行解壓縮目錄下的bin\windows-x86-64\StartSonar.bat,成功後應該可以看到如同下面的畫面
設定完成且SonarQube運行成功後(可以透過Browser開啟操作頁面http://localhost:9000/):
打開瀏覽器,前往
http://localhost:9000,可看到成功啟動SonarQube,如下圖所示,點擊Log
in進行登入,帳號:admin,密碼:admin
補充:
- 透過Powershell執行 bin\windows-x86-64\StartSonar.bat
若執行失敗,先確認是 Process[es]有問題還是Process[web]有問題:
app[][o.s.a.SchedulerImpl] Process[es] is up
...
app[][o.s.a.SchedulerImpl] Process [web] is stopped <--有問題
如果是Process[web]有問題,到C:\sonarqube-8.3.1.34397\logs路徑下查看"web.log"
可能的錯誤有以下幾種:
1. Sonarqube預設使用的port被占用
"Failed to initialize end point associated with ProtocolHandler
["http-nio-0.0.0.0-9000"]
java.net.BindException: Address already in use: bind"
解決辦法:
埠9000被其他程式佔用,找到那個程式佔用了這個埠,Console執行 "netstat
-aon|findstr "9000"
"查看哪個程式占用,關閉程式,重啟startsonar.bat,問題解決。
2. fails with Sonarqube requires JAVA 11+ to run
解決辦法:
如果確認已安裝Java
11(jdk-11.0.7_windows-x64_bin.exe)
open your wrapper.conf file (C:\SonarQube\conf\wrapper.conf), it
has default:
# Path to JVM executable. By default it must be available in PATH.
# Can be an absolute path, for example:
#wrapper.java.command=/path/to/my/jdk/bin/java
wrapper.java.command=java
change it to (i have jdk11, you can adjust it)
# Path to JVM executable. By default it must be available in PATH.
# Can be an absolute path, for example:
#wrapper.java.command=/path/to/my/jdk/bin/java
#wrapper.java.command=java
wrapper.java.command=C:\Program Files\Java\jdk-11.0.7\bin\java
save, run bin\windows-x86-64\StartSonar.bat to start SonarQube
3. fails with connect to database
"Cannot create PoolableConnectionFactory (連接到主機 localhost,1433
(連接埠 1433) 的 TCP/IP 連接已經失敗。錯誤:
"localhost,1433。確認連接屬性。確認 SQL Server
執行個體是否在主機上執行並接受在通訊埠的 TCP/IP
連接。確認防火牆未封鎖通訊埠的 TCP 連接。"。)"
解決辦法:
確認C:\sonarqube-8.3.1.34397\conf
下的sonar.properties裡的DB url設定如下:
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
(不用加1433 port)
The connection string format has changed. No more :1443 or
selectMethod
4. fails with connect to database 2
"The password of the account must be changed."
解決辦法:
在建立DB的時候注意將選項設定成不需要改變password at next
time。(下圖)
5. fails with connect to database 3
"Cannot open database "sonar" requested by the login. The login
failed."
解決辦法:
- 確認C:\sonarqube-8.3.1.34397\conf
下的sonar.properties裡的db帳號密碼和url正確
sonar.jdbc.username=sonarUser
sonar.jdbc.password=Sonar_User_12345678
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
- 確認db的sysadmin權限有設定:
四、分析程式碼
下載 SonarQube Scanner for MSBuild
SonarQube 其實可以分為兩種工具,一種是負責執行程式碼分析的
Runner,每個語言都有自己對應的 SonarQube Runner
,而另外一種則是在透過 Runner 分析之後,我們可以透過 SonarQube
的報表網站,觀看軟體的健康檢查報告,發掘是否有潛藏性的危險。
前項操作即為啟動報表網站,接下來要分析C#程式碼,必須借用SonarQube
Scanner for MSBuild
下載後,解壓縮到我們自己指定目錄
設定Path環境變數
為了等下方便進行分析,我們在 Path
系統環境變數附加 SonarScanner.MSBuild.exe、MSBuild.exe
的路徑,如下圖所示
開啟Command Line,切換目錄到我們要分析的 C#
Project,依序輸入下列指令進行分析
SonarScanner.MSBuild.exe begin
/k:"project-key"
MSBuild.exe /t:Rebuild
SonarScanner.MSBuild.exe end
上述的project-key是在SonarQube中分析專案的名稱,可設為跟C#
Project同一名稱,以方便識別。
回到瀏覽器畫面,可看到分析專案的報告
點擊專案名稱連結,檢視專案的各項分析報告
可任意點擊連結,查看程式bug或漏洞
點擊檔案連結,可查看原始碼,SonarQube會指出有問題的程式碼在那一行,並提出如何進行改善。
SonarQube分析報告有眾多種類,上述只簡略介紹一、二,讀者有興趣,可實際操作,親自體會。
留言
張貼留言