--- title: SonarQube tags: 程式設計,筆記, 原碼檢測 description: --- # SonarQube Community Editionv9.9.8 (build 100196) 原馬檢測 # 使用流程 ```mermaid flowchart TD; A[環境建立]; B[下載並安裝 docker]; C[安裝Ubuntu影子系統]; D[影子系統建立帳號密碼] E[建立sonarqube docker-compose.yml]; F[建立Docker服務]; G["進入網頁版 sonarQube"]; H[建立掃描專案]; I[開啟PowerShell]; J[安裝dotnet-sonarscanner]; K[掃描並察看結果]; A --> B; B -->|先確認有沒有安裝Ubuntu影子系統| C; C -->D; D -->E; E -->F; F -->G -->H -->I -->J -->K; ``` # 一、環境建立補充資料 ## 1. docker-compose.yml設定檔 ```dockerfile= version: "3.8" services: sonarqube: image: sonarqube:lts-community container_name: sonarqube depends_on: - db ports: - "9000:9000" environment: SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_logs:/opt/sonarqube/logs db: image: postgres:15 container_name: sonarqube_db environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar POSTGRES_DB: sonar volumes: - postgresql_data:/var/lib/postgresql/data volumes: sonarqube_data: sonarqube_extensions: sonarqube_logs: postgresql_data: ``` ## 2.找一個自己知道的位置建立  ## 3.安裝SonarQube -> 到建立docker-compose.yml路徑安裝 ```powershell= cd D:\tools\sonarqube docker compose up -d ``` # 二、建立掃描專案 ## 0. 開啟網頁 http://localhost:9000/ 登入帳號,第一次會先設定帳號密碼 ## 1.點選Create Project -> Manually  ## 2.建立自己知道的Project Display Name  ## 3.建立專案的token -> 掃描會用到   ## 4.生成後會出現下面的畫面,按繼續可以取的如何掃描的方法  ## 5.開啟PowerShell 並跳至掃描的專案底下  ## 6.直接執行官方給的第一條指令 -> 會跳錯,因為沒有安裝dotnet-sonarscanner   ## 7.安裝dotnet-sonarscanner -> 安裝相容sonarQube 9.x的版本 ```powershell= dotnet tool install --global dotnet-sonarscanner --version 8.0.3 ```  ## 8.再執行一次網頁給的指令 -> ### 有出現Pre-processing succeeded 就代表成功  ```powershell= SonarScanner for MSBuild 8.0.3 Using the .NET Core version of the Scanner for MSBuild Pre-processing started. Preparing working directories... 16:36:22.301 Updating build integration targets... 16:36:22.382 Using SonarQube v9.9.8.100196. 16:36:22.45 Fetching analysis configuration settings... 16:36:22.543 Provisioning analyzer assemblies for cs... 16:36:22.544 Installing required Roslyn analyzers... 16:36:22.544 Processing plugin: csharp version 8.51.0.59060 16:36:22.561 Processing plugin: vbnet version 8.51.0.59060 16:36:22.604 Provisioning analyzer assemblies for vbnet... 16:36:22.604 Installing required Roslyn analyzers... 16:36:22.604 Processing plugin: csharp version 8.51.0.59060 16:36:22.605 Processing plugin: vbnet version 8.51.0.59060 16:36:22.658 Incremental PR analysis: Base branch parameter was not provided. 16:36:22.658 Cache data is empty. A full analysis will be performed. 16:36:22.669 Pre-processing succeeded. ``` ## 9.執行 dotnet build 進行編譯 -> 顯示編譯成功就可以  ## 10.資料結算 -> ### 出現 Post-processing succeeded.就成功  ## 11.成功後就可以看到報告  # 三 建立使用者讀取的Token 這功能主要用來給外掛使用的,例如 產生Word、PDF報告的,都不能使用專案產生的Token。 ## 1. 點取右上角使用者,並點取My Account  ## 2. 點取Securilty  ## 3. 輸入Token基本資料  ## 4. 點選Generate 就會取得Token ### <div style="color:red;">這個請保管好,不見了就不會出現,需要重新取得</div>  # 四 生成PDF報告 [參考1](https://ithelp.ithome.com.tw/articles/10313246) [參考2](https://hackmd.io/@dh46tw/sonar-pdf-report) ## 1.首先下載參考2的鏈結中的jar [載點](https://github.com/dh46tw/sonar-pdf-report/releases/tag/1.5.2)  ## 2. 查詢Docker SonarCube虛擬機名稱  ## 3. 切換目錄到jar的位置  ## 4. 複製jar文件到 Sonarcube虛擬機上 ### 格式為 docker_cp_"文件"_"主機名稱":"主機路徑" 其中_為空白鍵,範例如下 ```bash= docker cp sonar-pdf-report-1.5.2.jar sonarqube:/opt/sonarqube/extensions/plugins ```  ## 5. 重啟Sonarcube虛擬機 ```bash= docker restart sonarqube ``` ## 6. 重啟後開啟SonarCube網頁並點選Sonar PDF Report plugin  ## 7. 可以看一下要輸出詳細資料的地方  ## 8. 之後重新建立一個新的專案並取得執行指令  ```bash= dotnet sonarscanner begin /k:"PSMMVC_Linyuan1234" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="sqp_98f842a2d4671e7e4aec6bd3bb6aa6fe7fa166b6" dotnet build dotnet sonarscanner end /d:sonar.login="sqp_98f842a2d4671e7e4aec6bd3bb6aa6fe7fa166b6" ``` ## 9. 記得先將 自動產PDF先 skip  ## 10. 使用本文章三產出的Token抽換上方的指令,並執行掃描,執行後會出現  ## 11. 取消產報告的指令並存檔  ## 12 再跑一次分析 ```bash= dotnet sonarscanner end /d:sonar.login="sqp_98f842a2d4671e7e4aec6bd3bb6aa6fe7fa166b6" ```  ## 13 路徑上就會出現PDF 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up