---
# System prepended metadata

title: SonarQube Windows 上使用
tags: [容器, Docker, SonarQube, 筆記]

---

### 簡介
SonarQube 是一套開源的程式碼檢測，可以進行 CodeReview 查出潛在的風險

### 部署
採用 Docker Compose 部署
```yaml=
# 這是 Docker Compose 檔案，用於定義 SonarQube 和 PostgreSQL 資料庫的部署配置。

# 版本號碼。
version: "3.6"

# 定義服務。
services:

  # PostgreSQL 資料庫服務。
  db:

    # 使用 PostgreSQL postgres:15.6-alpine 映像。
    image: postgres:15.6-alpine

    # 設定容器名稱。
    container_name: postgres

    # 暴露資料庫埠 5432。
    ports:
      - "5432:5432"

    # 容器重啟策略：始終重啟。
    restart: always

    # 設定環境變數。
    environment:

      # 資料庫名稱。
      POSTGRES_DB: sonar

      # 資料庫使用者名稱。
      POSTGRES_USER: sonar

      # 資料庫密碼。
      POSTGRES_PASSWORD: sonar

    # 掛載資料卷。
    volumes:

      # 掛載本地資料夾 D:\postgresql\data 到容器的 /var/lib/postgresql/data 目錄，用於儲存資料庫資料。
      - D:\sonarqube\postgresql\data:/var/lib/postgresql/data

  # SonarQube 服務。
  sonarqube:

    # 使用 sonarqube:latest 映像。
    image: sonarqube:latest

    # 設定容器名稱。
    container_name: sonarqube

    # 暴露 SonarQube 埠 9000。
    ports:
      - "9000:9000"

    # 容器重啟策略：始終重啟。
    restart: always

    # 設定環境變數。
    environment:

      # SonarQube JDBC URL，指向 PostgreSQL 資料庫。
      SONARQUBE_JDBC_URL: jdbc:postgresql://db:5432/sonar

    # 依存關係：SonarQube 必須在 PostgreSQL 資料庫啟動後才能啟動。
    depends_on:

      # 依存關係服務：db。
      - db

    # 掛載資料卷。
    volumes:

      # 掛載本地資料夾 D:\sonarqube\conf 到容器的 /opt/sonarqube/conf 目錄，用於儲存 SonarQube 設定檔。
      - D:\sonarqube\conf:/opt/sonarqube/conf

      # 掛載本地資料夾 D:\sonarqube\data 到容器的 /opt/sonarqube/data 目錄，用於儲存 SonarQube 資料。
      - D:\sonarqube\data:/opt/sonarqube/data

      # 掛載本地資料夾 D:\sonarqube\logs 到容器的 /opt/sonarqube/logs 目錄，用於儲存 SonarQube 日誌。
      - D:\sonarqube\logs:/opt/sonarqube/logs

      # 掛載本地資料夾 D:\sonarqube\extensions 到容器的 /opt/sonarqube/extensions 目錄，用於儲存 SonarQube 擴充套件。
      - D:\sonarqube\extensions:/opt/sonarqube/extensions
```

### 本機 SonarScanner 安裝
[官方文件說明](https://docs.sonarsource.com/sonarqube/10.4/analyzing-source-code/scanners/sonarscanner-for-dotnet/#iInstallation)
Scanner 在本機跑會需要 Java，記得安裝(目前 SonarQube 到 JDK17 版): [Download](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)

下面是幾個比較常用的 Scanner，可以到官網查看介紹並下載對應的工具
* [CLI](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/)
* [.Net Core](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner-for-dotnet/)

上面兩個的工具裡面的 bin 資料夾，記得加到環境變數裡面的 path 裡

* .Net FrameWork (同 .Net Core)
    * FrameWork 版本比較特殊直接指定到 scanner 資料夾裡面執行即可，加到 path 也吃不到
        * 如: <folder>\SonarScanner.MSBuild.exe 
    * 記得把 vs 的 MSBuild 加到 Path 裡

執行的使用上也是蠻容易的，產生完專案後接著到專案的跟目錄打開 CMD 依序執行即可
    


### 其它
目前 SonarQube 在免費版裡面，OWASP Top10 只有到 2021 年。假如需要完整的支援就需要額外付費的 Plugin 處理。

### 參考
[windows docker部署sonarqube](https://blog.csdn.net/xunye_dream/article/details/124238659)
[sonar-scanner的使用](https://www.cnblogs.com/Uni-Hoang/p/15207178.html)
[白箱掃描工具_Sonarqube_Windows環境版本作業方式](https://coolmandiary.blogspot.com/2022/01/sonarqubewindows.html) 
