Featured image of post 使用 Docker Compose 安裝 SonarQube(含 sonar-cnes-report 外掛)

使用 Docker Compose 安裝 SonarQube(含 sonar-cnes-report 外掛)

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_URLconfbundled-plugins volume 在 SonarQube 9.x 之後已移除,不需要再掛載。

啟動

1
docker compose up -d

等待幾秒後,查看日誌確認啟動狀態:

1
docker compose logs -f sonarqube

確認外掛是否載入:

1
docker compose logs sonarqube | grep -i "cnes"

應出現 Plugin loaded: CNES Report

瀏覽器開啟 http://localhost:9000,預設帳號密碼均為 admin,首次登入會要求修改密碼。


References

comments powered by Disqus