サイトアイコン TakeNotes.JP

SonarQubeをdocker composeで動かす

ソースコードの分析ツール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、パスワードを変更してログインします。

まずはプロジェクトを作成します。

  1. Create project manuallyから新規プロジェクトを手動で作成します。
  2. プロジェクト名、プロジェクトのキー、ブランチ名(mainのまま)を入力してNext
  3. Use the global settingを選択してCreate project
  4. 「How do you want to analyze your repository?」ではLocallyをクリック
  5. Provide a tokenからプロジェクト用のトークンを生成します。
  6. 実験用なので「No expiration」を選択してGenerateを押し、Continue
  7. Run analysis on your projectでは言語を選択します。(今回はC#なので.NETを選択して.NET Coreを選択

SonarScannerのインストールとコードの解析

Excute the Scannerの項目にて実行するコードが案内されます。

※sonar.host.urlやsonar.tokenの値は置き換えて実行してください

  1. dotnet tool install --global dotnet-sonarscannerを実行してSonarScannerをインストール
    ※インストール直後は反映されない(dotnet-sonarscanner does not exist.と出てエラーになる)かもしれないのでその際は一度exitして再度やり直してみてください。
  2. 以降は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」ディレクトリが作成されます
  3. dotnet build
  4. dotnet sonarscanner end /d:sonar.token="sqp_67d2038f19511358a039a90691fe34c8f7261587"
    解析結果をSonarQubeに送信した後もしばらく時間がかかります。
  5. しばらく待った後管理画面に行って結果が出ていればOK
モバイルバージョンを終了