JavaのプロジェクトだとcheckstyleやspotBugsで、静的解析をして品質アップしていますが、checkstyleやらspotBugsやら色々組み合わせるのも面倒です。
1つの画面でサクッと確認できないかと思っていたところ、SonarQubeの存在を知りましたので、インストールしてみました。
SonarQubeとは
SonarQubeとは、バグや脆弱性、コードの深刻な問題を検出する自動レビューツール。
ブランチやプルリクエストに対して、継続的に検査を実施することが可能。
Javaだけでなく、様々なプログラミング言語に対応している。
Javaは無料版で可能だが、有料版のみ対応しているプログラミング言語があるため、
プロジェクトで使用する言語が無料版で対応可能か?有料版でのみの対応か?を確認しておく必要がある。
dockerで起動
今回の目的から逸れますが、SonarQubeは、dockerイメージがDockerHubに登録されているので、コンテナとして起動することができます。
docker run -d --name sonarqube -p 9000:9000 sonarqube
VM環境にインストール
今回は、VM環境にSonarQubeをインストールしました。
OSは、CentOS7。
DBは、PostgreSQL9.6を使用しています。
必要なパッケージをインストール
SonarQubeに必要なパッケージをインストールします。
JavaとPostgreSQLは必須です。
yum install -y wget yum install -y unzip yum install -y java-11-openjdk yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y postgresql96 yum install -y postgresql96-server
データベースクラスタの作成とPostgreSQLの起動
/usr/pgsql-9.6/bin/postgresql96-setup initdb systemctl enable postgresql-9.6 systemctl start postgresql-9.6
pg_hba.conf、postgresql.confの更新
pg_hba.conf
[変更前] host all all 127.0.0.1/32 ident [変更前] host all all 127.0.0.1/32 md5
postgresql.conf
[変更前] #listen_addresses = 'localhost' [変更後] listen_addresses = '*'
PostgreSQLの再起動
systemctl restart postgresql-9.6
ユーザー作成
useradd sonar passwd sonar
データベースの作成と設定
su - postgres psql CREATE USER sonar; ALTER USER sonar WITH PASSWORD 'sonar'; CREATE DATABASE sonardb WITH ENCODING 'UTF8'; ALTER DATABASE sonardb OWNER TO sonar; ALTER USER sonar SET search_path TO sonardb; ALTER USER sonar SET search_path to public;
カーネルパラメータとシステムリソースの設定
SonarQubeでは、内部でElasticsearchを使用しているため、カーネルパラメータとシステムリソースを変更する必要があります。
sysctl -w vm.max_map_count=262144 sysctl -w fs.file-max=65536 ulimit -n 65536 ulimit -u 4096
カーネルパラメータとシステムリソースの設定を永続化する場合は、下記を参照してください。
https://docs.sonarqube.org/latest/requirements/requirements
SonarQubeのダウンロードと配置
cd /opt wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.1.0.31237.zip unzip sonarqube-8.1.0.31237.zip su sonar chown -R sonar:sonar sonarqube-8.1.0.31237
SonarQubeのプロパティーファイルの変更
[下記の内容を設定] sonar.jdbc.url=jdbc:postgresql://localhost/sonardb?currentSchema=public sonar.jdbc.username=sonar sonar.jdbc.password=sonar
gradleからSonarQubeを使用する
ここで、gradleからSonarQubeを使用するための設定を記載します。
SonarQubeのドキュメントにも、gradleでの使用方法が記載されていますので、詳細はこちらを参照してください。
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-gradle/
build.gradle の設定
plugins { id 'java-library' id "org.sonarqube" version "2.8" } sonarqube { properties { property 'sonar.projectName', 'InitFile' } }
gradle.properties の設定
# gradle.properties systemProp.sonar.host.url=http://localhost:9000 #----- Token generated from an account with 'publish analysis' permission # systemProp.sonar.login=4c2be29bfa4eb8536fb8b4e2d18a179efbea8682 #Tokenかloginのどちらかを指定 systemProp.sonar.login=admin systemProp.sonar.password=admin
gradlewでの実行
gradlewコマンドからsonarqubeを指定し、実行します。
./gradlew clean sonarqube
正常に処理が完了すると、SonarQube上に静的解析の結果が表示されます。
まとめ
SonarQubeのドキュメントを見ても、必要なデータベース周りの設定の記載がなかったので、色々なサイトを見て回り、やっとインストールできました。
私の英語の読解力のなさもあり、ドキュメントを見るのも大変でしたが、とりあえずインストールできてよかったです。
今のプロジェクトでは、SonarQubeを使えなさそうなので、次のプロジェクトが始まるまでに理解を深めようと思います。(SonarQubeのドキュメントを読まなければ・・・)
TwitterでSonarQubeの情報を調べてたら、SonarQubeの書籍が発売されるそうです。
日本語の情報は少ないようなので、ありがたいですね。