SonarQube 是靜態程式碼分析平台,可以自動偵測程式碼品質問題、安全漏洞、技術債。本文使用 Docker Compose 搭配 PostgreSQL 建立 SonarQube Community Edition,並安裝 sonar-cnes-report 外掛以支援報告匯出。
前置作業:調整系統參數
SonarQube 內嵌 Elasticsearch,對 host 系統有額外要求。在容器外的 host上執行:
1
2
| sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
|
永久化設定:
1
2
3
| echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.d/99-sonarqube.conf
echo "fs.file-max=131072" | sudo tee -a /etc/sysctl.d/99-sonarqube.conf
sudo sysctl -p /etc/sysctl.d/99-sonarqube.conf
|
vm.max_map_count 必須在 host 上設定,無法在容器內修改。
準備外掛 JAR
前往 sonar-cnes-report releases 下載最新版本的 JAR 檔,放到本地的 plugins/ 目錄:
1
2
3
| mkdir -p plugins
curl -L -o plugins/sonar-cnes-report.jar \
https://github.com/cnescatlab/sonar-cnes-report/releases/latest/download/sonar-cnes-report-<version>.jar
|
下載前請確認 release 頁面上的版本號與 SonarQube 版本的相容性。
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| services:
sonarqube:
image: sonarqube:lts-community
container_name: sonarqube
depends_on:
db:
condition: service_healthy
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
- ./plugins/sonar-cnes-report.jar:/opt/sonarqube/extensions/plugins/sonar-cnes-report.jar
ports:
- "127.0.0.1:9000:9000"
ulimits:
nofile:
soft: 131072
hard: 131072
nproc:
soft: 8192
hard: 8192
db:
image: postgres:15
container_name: sonarqube_db
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U sonar"]
interval: 10s
timeout: 5s
retries: 5
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
|
注意: 舊版使用的 SONARQUBE_JDBC_URL 環境變數已棄用,請改用 SONAR_JDBC_URL。conf 和 bundled-plugins volume 在 SonarQube 9.x 之後已移除,不需要再掛載。
啟動
等待幾秒後,查看日誌確認啟動狀態:
1
| docker compose logs -f sonarqube
|
確認外掛是否載入:
1
| docker compose logs sonarqube | grep -i "cnes"
|
應出現 Plugin loaded: CNES Report。
瀏覽器開啟 http://localhost:9000,預設帳號密碼均為 admin,首次登入會要求修改密碼。
References