---
# System prepended metadata

title: SonarQube
tags: [' 原碼檢測', 筆記, 程式設計]

---

---
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.找一個自己知道的位置建立
![image](https://hackmd.io/_uploads/Sya5seeXZe.png)
## 3.安裝SonarQube -> 到建立docker-compose.yml路徑安裝
```powershell=
cd D:\tools\sonarqube
docker compose up -d
```

# 二、建立掃描專案
## 0. 開啟網頁 http://localhost:9000/ 
登入帳號，第一次會先設定帳號密碼
## 1.點選Create Project -> Manually
![image](https://hackmd.io/_uploads/SJzEUJlXWe.png)
## 2.建立自己知道的Project Display Name
![image](https://hackmd.io/_uploads/rJRvLJembx.png)
## 3.建立專案的token -> 掃描會用到
![image](https://hackmd.io/_uploads/ryuT8JlXbe.png)
![image](https://hackmd.io/_uploads/rJgWD1xQ-x.png)
## 4.生成後會出現下面的畫面，按繼續可以取的如何掃描的方法
![image](https://hackmd.io/_uploads/Byb1O1lXWg.png)
## 5.開啟PowerShell 並跳至掃描的專案底下
![image](https://hackmd.io/_uploads/BJvG51gXWe.png)
## 6.直接執行官方給的第一條指令 -> 會跳錯，因為沒有安裝dotnet-sonarscanner
![image](https://hackmd.io/_uploads/B1IV9Jg7-e.png)
![image](https://hackmd.io/_uploads/Bk6I5yxmWg.png)
## 7.安裝dotnet-sonarscanner -> 安裝相容sonarQube 9.x的版本
```powershell=
dotnet tool install --global dotnet-sonarscanner --version 8.0.3
```
![image](https://hackmd.io/_uploads/Hy00ckgXWl.png)

## 8.再執行一次網頁給的指令 ->
### 有出現Pre-processing succeeded 就代表成功
![image](https://hackmd.io/_uploads/r1-9iJeXWe.png)
```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 進行編譯  -> 顯示編譯成功就可以

![image](https://hackmd.io/_uploads/rkd43kxQZg.png)

## 10.資料結算 -> 
### 出現 Post-processing succeeded.就成功
![image](https://hackmd.io/_uploads/HkBdh1gQWx.png)
## 11.成功後就可以看到報告
![image](https://hackmd.io/_uploads/Sy0a3ylXZl.png)

# 三 建立使用者讀取的Token
這功能主要用來給外掛使用的，例如 產生Word、PDF報告的，都不能使用專案產生的Token。
## 1. 點取右上角使用者，並點取My Account
![image](https://hackmd.io/_uploads/Hk4c5CK4Ze.png)
## 2. 點取Securilty 
![image](https://hackmd.io/_uploads/rkSMTCFV-x.png)
## 3. 輸入Token基本資料
![image](https://hackmd.io/_uploads/rJDta0KN-l.png)
## 4. 點選Generate 就會取得Token
### <div style="color:red;">這個請保管好，不見了就不會出現，需要重新取得</div>

![image](https://hackmd.io/_uploads/HJWna0tN-x.png)

# 四 生成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)
![image](https://hackmd.io/_uploads/r1lIZJ5EWe.png)

## 2. 查詢Docker SonarCube虛擬機名稱
![image](https://hackmd.io/_uploads/ryXRWJqEbl.png)

## 3. 切換目錄到jar的位置
![image](https://hackmd.io/_uploads/HJtGfkcEZx.png)

## 4. 複製jar文件到 Sonarcube虛擬機上
### 格式為 docker_cp_"文件"_"主機名稱":"主機路徑" 其中_為空白鍵，範例如下
```bash=
docker cp sonar-pdf-report-1.5.2.jar sonarqube:/opt/sonarqube/extensions/plugins
```
![image](https://hackmd.io/_uploads/Sky3zy5V-e.png)
## 5. 重啟Sonarcube虛擬機
```bash=
docker restart sonarqube
```
## 6. 重啟後開啟SonarCube網頁並點選Sonar PDF Report plugin
![image](https://hackmd.io/_uploads/By9gHycNbl.png)

## 7. 可以看一下要輸出詳細資料的地方
![image](https://hackmd.io/_uploads/ryEvSycEWx.png)

## 8. 之後重新建立一個新的專案並取得執行指令
![image](https://hackmd.io/_uploads/S1EtI19Vbx.png)

```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

![image](https://hackmd.io/_uploads/Byq_ukcVZg.png)

## 10. 使用本文章三產出的Token抽換上方的指令，並執行掃描，執行後會出現

![image](https://hackmd.io/_uploads/r1-mKJcN-l.png)


## 11. 取消產報告的指令並存檔
![image](https://hackmd.io/_uploads/H1R6K194Ze.png)

## 12 再跑一次分析
```bash=
dotnet sonarscanner end /d:sonar.login="sqp_98f842a2d4671e7e4aec6bd3bb6aa6fe7fa166b6"

```
![image](https://hackmd.io/_uploads/B1IJ915VZx.png)

## 13 路徑上就會出現PDF
![image](https://hackmd.io/_uploads/H1iXcy9Ebl.png)
