2023年10月2日 星期一

以SonarQube掃描Gradle專案源碼

SonarQube 是一套白箱掃描工具,本例使用開源免費的Community版本,有關安裝方式可參考「在KALI Linux建置黑、白箱掃描系統(Arachni及SonarQube)」一文。

本文以SonarQube提供的範例「 sonar-scanning-examples-master\sonarqube-scanner-gradle\gradle-multimodule」做示範說明,置於「C:\sonar-scanning-examples-master\sonarqube-scanner-gradle\gradle-multimodule」目錄下。若想掃描其他gradle專案,請依該專案環境、結構酌作調整,尤其工具及Java版本。

一、必要需求

(一)適合待掃專案的JDK

1.本例使用Java 13,筆者將它放置於C:\JAVA\jdk-13.0.2。

2.建立環境變數「JAVA_HOME」,讓它指向「C:\JAVA\jdk-13.0.2」。

3.在PATH環境變數中加入「%JAVA_HOME%\bin」,讓作業系統可以找到javac.exe。

(二)gradle工具(用來建立 Gradle Wrapper)

1.至Gradle官網 下載Gradle工具包,直接解壓縮到自選目錄,例如「C:\gradle\gradle-8.0.2」。

2.建立環境變數「GRADLE_HOME」,讓它指向「C:\gradle\gradle-8.0.2」。

3.在PATH環境變數中加入「%GRADLE_HOME%\bin」,讓作業系統可以找到gradle.exe。

4.執行 gradle -v 確認gradle.exe可執行。

C:\>gradle -v
------------------------------------------------------------
Gradle 8.0.2
------------------------------------------------------------

Build time:   2023-03-03 16:41:37 UTC
Revision:     7d6581558e226a580d91d399f7dfb9e3095c2b1d

Kotlin:       1.8.10
Groovy:       3.0.13
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.2 (Oracle Corporation 17.0.2+8-86)
OS:           Windows 10 10.0 amd64

C:\>

二、修改待掃專案的build. gradle,加入sonar scanner插件:

本例使用4.3.1.3277版插件,這裡可查詢gradle可用的各版本sonar scanner插件,請選擇合適的版本。

plugins {
    ……其他的plugin……
    // 為SonarQue加入適當版本的插件,參考建立Sonar掃描專案後,Sonar所提示的版本
    id 'org.sonarqube' version '4.3.1.3277'
}

三、執行掃描:

(一)啟動SonarQube Scanner Server,假設位於「 http://192.168.232.153:9000

(二)以瀏覽器連線SonarQube Scanner Server,並建立掃描專案(如重掃描舊專案,請備妥 Project Token)

1. 由Projects頁面選擇「Create Project」->「Manually」

2.社群版只能選擇「Locally」

3.填入「Project display name」(專案名稱)及「Project key」(專案鍵名)

4.產生Project Token(專案身分代號)

5.請記下Project Token



6.選擇要被掃描的專案類型(Gradle)


(三)開啟命令提示字元,將工作目錄切換到待掃描的Gradle專案目錄,本例係位於C:\sonar-scanning-examples-master\sonarqube-scanner-gradle\gradle-multimodule,此範例已自帶「gradle wrapper」。
若您的專案目錄下沒有gradle\wrapper」目錄,則需要於此專案目錄下執行「gradle wrapper」,完成後,會在此目錄下新增.gradle、gradle兩個目錄及gradlew、gradle.bat兩檔案。
若待掃專案已有.gradle、gradle兩個目錄及gradlew、gradle.bat兩檔案,可跳過此步驟。

(四)注意 gradle\wrapper\目錄裡gradle-wrapper.properties 檔的 distributionUrl 項目所指定之 gradle 版號(可至https://services.gradle.org/distributions/ 查看所有版號),及所使用的JDK版本。
若gradle service版號或JDK版本與待掃專案不匹配,建置過程會發生錯誤。

#Tue May 19 06:55:41 BST 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

(五)如果已完成項一及項二的要求,便可直接複製及執行SonarQube所提供的命令。
由於此命令是Linux格式,本例是在Windows環境執行,需調整命令語句,將原始命的整理成單一列。

(六)執行過程如下所示(橘紅色部分是我所執行的命令

C:\sonar-scanning-examples-master\sonarqube-scanner-gradle\gradle-multimodule>gradlew.bat sonar -Dsonar.projectKey=Example-Gradle-Project -Dsonar.host.url=http://192.168.232.153:9000   -Dsonar.login=sqp_99a6eebeda445bce288e94afae9aa409e7454d75
> Task :sonar
SCM provider autodetection failed. Please use "sonar.scm.provider" to define SCM of your project, or disable the SCM Sensor in the project settings.
BUILD SUCCESSFUL in 39s
2 actionable tasks: 2 executed
<-------------> 0% WAITING
> IDLE 

如果前面各步驟無誤,應該可以完成掃描,最後會看到「BUILD SUCCESSFUL」。如果過程出現錯誤,請仔細研讀訊息,善用Google或ChatGPT找出解答。

完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~


完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~


關於 dotNet Framework 專案的掃描,請參閱:以SonarQube執行.netFramework專案的源碼掃描(白箱掃描)

關於 dotNet Core 專案的掃描,請參閱:以SonarQube掃描dotNet Core專案源碼(白箱掃描)

2023年9月28日 星期四

以 SonarQube 掃描 maven 專案源碼(白箱掃描)

SonarQube 是一套白箱掃描工具,本例使用開源免費的Community版 本,有關安裝方式可參考「在KALI Linux建置黑、白箱掃描系統(Arachni及SonarQube)

本文以SonarQube提供的範例「 sonar-scanning-examples-master\onarqube-scanner-maven\maven-multilingual 」做示範說明,若想掃描其他maven專案,請依該專案環境、結構酌作調整,尤其工具及Java版本。

一、必要需求

(一)maven

Apache Maven Project 下載合適版本的Maven(本例使用 maven-3.9.0),並解壓縮到自選目錄,例如「C:\maven\apache-maven-3.9.0」。

建立環境變數「M2_HOME」指向「C:\maven\apache-maven-3.9.0」。

在 PATH 環境變數中加入「%M2_HOME%\bin」,讓作業系統可以找得到mvn.exe。

(二)適合待掃專案的JDK

本例使用Java 11,位於C:\JAVA\jdk-11.0.2。

二、修改待掃專案的pom.xml,加入sonar scanner:

如果不想修改待掃專案的POM.XML,可參考「三、執行掃描」的第(四)點。

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<!-- 以下為SonarQube而建 -->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.1.2184</version>
</plugin>

這裡可查詢各個版本的sonar scanner插件,請選擇合適的版本,本例是使用 3.9.1.2184。

三、執行掃描:

(一)啟動SonarQube Scanner Server,假設位於「 http://192.168.232.153:9000

(二)以瀏覽器連線SonarQube Scanner Server,並建立掃描專案(如重掃描舊專案,請備妥 Project Token)

1. 由Projects頁面選擇「Create Project」->「Manually」

2.社群版只能選擇「Locally」

3.填入「Project display name」(專案名稱)及「Project key」(專案鍵名)

4.產生Project Token(專案身份代號)

5.請記下Project Token



6.選擇要被掃描的專案類型(Maven)



(三)開啟命令提示字元,將工作目錄切換到待掃描的Maven專案目錄,本例使用sonar-scanning-examples-master的sonarqube-scanner-msbuild專案做示範,下載後置於C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild。

(四)如果已完成項一及項二的要求,便可直接複製及執行SonarQube所提供的命令。
由於此命令是Linux格式,本例是在Windows環境執行,需調整命令語句,將原始命的整理成單一列:

(五)若想靈活切換SDK版本,可以在開啟命令提示字元後,依續執行:

C:\>set JAVA_HOME=c:\java\jdk-11.0.2
C:\>set path=%JAVA_HOME%\bin;%PATH%                       #加在前面,確保被優先引用
C:\>cd c:\sonar-scanning-examples-master\sonarqube-scanner-msbuild
C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild>
mvn clean verify sonar:sonar -Dsonar.projectKey=Examp-Maven-A -Dsonar.host.url=http://192.168.232.129:9000 -Dsonar.login=sqp_dba30fef39a3676dd2c2bba4ae197d96ae58aa03

   或者

C:\sonar-scanning-examples-master\sonarqube-scanner-msbuild>
mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar -Dsonar.projectKey=Examp-Maven-A -Dsonar.host.url=http://192.168.232.129:9000 -Dsonar.login=sqp_dba30fef39a3676dd2c2bba4ae197d96ae58aa03

(六)執行過程如下所示(橘紅色部分是我所執行的命令

C:\>java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

C:\>cd sonar-scanning-examples-master\sonarqube-scanner-maven\maven-multimodule
C:\sonar-scanning-examples-master\sonarqube-scanner-maven\maven-multimodule>mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar -Dsonar.projectKey=Examp-Maven-A  -Dsonar.host.url=http://192.168.232.129:9000 -Dsonar.login=sqp_dba30fef39a3676dd2c2bba4ae197d96ae58aa03
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Example of multi-module Maven project                              [pom]
[INFO] Module 1                                                           [jar]
[INFO] Module 2                                                           [jar]
[INFO] Tests                                                              [jar]

<<部分訊息省略>>


[
INFO] ANALYSIS SUCCESSFUL, you can find the results at: http://192.168.232.129:9000/dashboard?id=Examp-Maven-A
[INFO] Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
[INFO] More about the report processing at http://192.168.232.129:9000/api/ce/task?id=AYrZSjAxVbRR_GlSxZsf
[INFO] Analysis total time: 7.571 s
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Example of multi-module Maven project 1.0-SNAPSHOT:
[INFO]
[INFO] Example of multi-module Maven project .............. SUCCESS [  9.495 s]
[INFO] Module 1 ........................................... SUCCESS [  6.353 s]
[INFO] Module 2 ........................................... SUCCESS [  1.566 s]
[INFO] Tests .............................................. SUCCESS [  1.851 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  23.218 s
[INFO] Finished at: 2023-09-28T08:57:11+08:00
[INFO] ------------------------------------------------------------------------

C:\sonar-scanning-examples-master\sonarqube-scanner-maven\maven-multimodule>

如果前面各步驟無誤,應該可以完成掃描,最後會看到「EXECUTION SUCCESS」。如果過程出現錯誤,請仔細研讀訊息,善用Google或ChatGPT找出解答。

完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~

完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~


關於 dotNet Framework 專案的掃描,請參閱:以SonarQube執行.netFramework專案的源碼掃描(白箱掃描)

關於 dotNet Core 專案的掃描,請參閱:以SonarQube掃描dotNet Core專案源碼(白箱掃描)

2023年9月26日 星期二

以SonarQube掃描dotNet Core專案源碼(白箱掃描)

SonarQube是一套白箱掃描工具,本例使用開源免費的Community版本,有關安裝方式可參考「在KALI Linux建置黑、白箱掃描系統(Arachni及SonarQube)

本文以GitHub上的dotNet Core範例「MagicianredLabs/dotnetcore5-example」做示範說明,若想掃描其他 dotNet Core專案,請依該專案環境、結構酌作調整,尤其工具及SDK的版本。

一、必要需求

(一)dotNet SDK

可下載安裝版或ZIP檔,本例選用7.0.201的Amd 64之ZIP版,直接解壓縮到自選目錄:C:\dotNet.core\dotnet-x64-7.0.201,並將此路徑加入 Path 環境變數。

(二)檢查「%USERPROFILE%\.dotnet\tools」目錄裡是否有「dotnet-sonarscanner.exe」檔案及「.store」目錄,如果沒有,請執行下列命令,以安裝 dotNet Core 用的sonarscanner 全域工具:

cd C:\dotNet.core\dotnet-x64-7.0.201
dotnet tool install --global dotnet-sonarscanner --version 5.13.1

備註:可到NUGet查看--version X.X.X可支援的版本

二、執行掃描

(一)啟動SonarQube Scanner Server,假設位於「 http://192.168.232.153:9000

(二)以瀏覽器連線SonarQube Scanner Server,並建立掃描專案(如重掃描舊專案,請備妥 Project Token)

1. 由Projects頁面選擇「Create Project」->「Manually」

2.社群版只能選擇「Locally」

3.填入「Project display name」(專案名稱)及「Project key」(專案鍵名)

4.產生Project Token(專案身份代號)

5.請記下Project Token



6.選擇要被掃描的專案類型(.NET)

7.選擇.NET的型態(.NET Core)



(三)開啟命令提示字元,將工作目錄切換到待掃描的dotNet Core專案目錄,本例使用MagicianredLabs/dotnetcore5-example裡的it.example.dotnetcore5專案做示範,下載後置於D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5。

(四)如果已完成項一之(二)的要求,就不會理會上圖的第一條命令(dotnet tool install --global dotnet-sonarscanner)。
如已將dotNet SDK的目錄加到PATH環境變數,就逐一複製及執行SonarQube所提供的後三段命令。
若想靈活切換SDK版本,可以在執行掃描命令之前先執行「set PATH=SDKPath;%PATH%」設定路徑(SDKPath請換成dotNet SDK的真正路徑)

(五)執行過程如下所示(橘紅色部分是我所執行的命令

C:\>set path=C:\dotNet-x64-7.0.201;%path%
C:\>d:
D:\>
cd d:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5
D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5>dotnet sonarscanner begin /k:".netFramework-Example.core" /d:sonar.host.url="http://192.168.232.153:9000"  /d:sonar.login="sqp_c855f5d97c43571f467c8757cd5bcd1e9bb8792a"
SonarScanner for MSBuild 5.13.1
Using the .NET Core version of the Scanner for MSBuild
Pre-processing started.
Preparing working directories...
<<部分訊息省略>>

D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5>dotnet build
MSBuild version 17.5.0-preview-23061-01+040e2a90e for .NET
  正在判斷要還原的專案...
<<部分訊息省略>>
  Sonar: (it.example.dotnetcore5.webapi.tests.integration.csproj) Project processed successfully


建置成功。


C:\dotNet-x64-7.0.201\sdk\7.0.201\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.EolTargetFrameworks.targets(28,5): warning NETSDK1138: 目標 Framework 'net5.0' 已不受支援,未來將不會再收到任何安全性更新。如需支援原則的詳細資訊,請參閱 https://aka.ms/dotnet-core-support。 [D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5\it.example.dotnetcore5.bl\it.example.dotnetcore5.bl.csproj]
<<部分訊息省略>>

D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5\it.example.dotnetcore5.webapi\Program.cs(12,18): warning S1118: Add a 'protected' constructor or the 'static' keyword to the class declaration. [D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5\it.example.dotnetcore5.webapi\it.example.dotnetcore5.webapi.csproj]
    39 個警告
    0 個錯誤

經過時間 00:01:51.00

D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5>dotnet sonarscanner end /d:sonar.login="sqp_c855f5d97c43571f467c8757cd5bcd1e9bb8792a"
SonarScanner for MSBuild 5.13.1
Using the .NET Core version of the Scanner for MSBuild
Post-processing started.
Calling the SonarScanner CLI...
<<部分訊息省略>>

INFO: More about the report processing at http://192.168.232.153:9000/api/ce/task?id=AYrMzgcpHOOPZyW4SWNL
INFO: Analysis total time: 14.247 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 17.470s
INFO: Final Memory: 17M/60M
INFO: ------------------------------------------------------------------------
The SonarScanner CLI has finished
19:34:12.82  Post-processing succeeded.

D:\sonar-scanning-examples-master\dotnetcore5-example-main\it.example.dotnetcore5>

如果前面各步驟無誤,應該可以完成掃描,最後會看到「EXECUTION SUCCESS」。如果過程出現錯誤,請仔細研讀訊息,善用Google或ChatGPT找出解答。

完成掃描後,可在SonarQube Scanner Web UI看到專案結果~~




   關於 dotNet Framework 專案的掃描,請參閱:以SonarQube執行.netFramework專案的源碼掃描(白箱掃描)