ソースコードの分析ツールSonarQubeをDocker Composeで動かします。
最終的にはC#のコードを静的解析してみます。
環境はVirtualbox上のDebian 12、Docker version 24.0.6です。
docker composeでコンテナを動かす
公式でdocker-compose.ymlが用意されているのですが、vm.max_map_countの値が低すぎる(max virtual memory areas vm.max_map_count [65530] is too low)というエラーが出て正常に起動できませんでした。
vm.max_map_countの変更方法はSonarQubeのDockerHubページに記載されています。
sysctl -w vm.max_map_count=524288
変更用のシェルスクリプトはinit.shとして別途保存しておきます。
#!/bin/bash -x sysctl -w vm.max_map_count=524288
init.shと同じディレクトリにdocker-compose.yamlを作成します。
version: "3"
services:
  db:
    image: postgres:13
    hostname: postgresql
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data
  init:
    image: bash
    container_name: init
    privileged: true
    user: root
    volumes:
      - ./init.sh:/mnt/init.sh
    command: [ "sh", "-e", "/mnt/init.sh" ]
  sonarqube:
    image: sonarqube:community
    hostname: sonarqube
    container_name: sonarqube
    depends_on:
      - db
      - init
    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
    ports:
      - "9000:9000"
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:
最後にdocker compose up -dを実行してコンテナを起動します。
watch docker ps -aで様子見。
無事正常に起動すれば http://ホスト名:9000 にアクセスします。
SonarQube管理画面
初回ログインはadmin/admin、パスワードを変更してログインします。
まずはプロジェクトを作成します。
- Create project manuallyから新規プロジェクトを手動で作成します。
- プロジェクト名、プロジェクトのキー、ブランチ名(mainのまま)を入力してNext
- Use the global settingを選択してCreate project
- 「How do you want to analyze your repository?」ではLocallyをクリック
- Provide a tokenからプロジェクト用のトークンを生成します。
- 
実験用なので「No expiration」を選択してGenerateを押し、Continue
- Run analysis on your projectでは言語を選択します。(今回はC#なので.NETを選択して.NET Coreを選択
SonarScannerのインストールとコードの解析
Excute the Scannerの項目にて実行するコードが案内されます。
※sonar.host.urlやsonar.tokenの値は置き換えて実行してください
- dotnet tool install --global dotnet-sonarscannerを実行してSonarScannerをインストール
 ※インストール直後は反映されない(dotnet-sonarscanner does not exist.と出てエラーになる)かもしれないのでその際は一度exitして再度やり直してみてください。
- 以降はdotnet buildを実行する(csprojのあるディレクトリ?)で行います
 dotnet sonarscanner begin /k:"test-project001" /d:sonar.host.url="http://192.168.33.10:9000" /d:sonar.token="sqp_67d2038f19511358a039a90691fe34c8f7261587"
 ※実行後「.sonarqube」ディレクトリが作成されます
- dotnet build
- dotnet sonarscanner end /d:sonar.token="sqp_67d2038f19511358a039a90691fe34c8f7261587"
 解析結果をSonarQubeに送信した後もしばらく時間がかかります。
- しばらく待った後管理画面に行って結果が出ていればOK
