ソースコードの分析ツール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