ソースコードの分析ツール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 builddotnet sonarscanner end /d:sonar.token="sqp_67d2038f19511358a039a90691fe34c8f7261587"
解析結果をSonarQubeに送信した後もしばらく時間がかかります。- しばらく待った後管理画面に行って結果が出ていればOK
