ヒトリ歩き

愚痴とかいろいろ書きます

SonarQubeをインストールしたよ

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に必要なパッケージをインストールします。
JavaPostgreSQLは必須です。

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

SonarQubeの起動

cd /opt/sonarqube-8.1.0.31237/bin/linux-x86-64/
./sonar.sh start
Starting SonarQube...
Started SonarQube.

./sonar.sh status
SonarQube is running (4377).

Webブラウザから 「http://IPアドレス:9000」に接続し、SonarQubeの画面が表示されたらインストール完了です。

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上に静的解析の結果が表示されます。
f:id:kotapontan:20200213234940p:plain

まとめ

SonarQubeのドキュメントを見ても、必要なデータベース周りの設定の記載がなかったので、色々なサイトを見て回り、やっとインストールできました。
私の英語の読解力のなさもあり、ドキュメントを見るのも大変でしたが、とりあえずインストールできてよかったです。
今のプロジェクトでは、SonarQubeを使えなさそうなので、次のプロジェクトが始まるまでに理解を深めようと思います。(SonarQubeのドキュメントを読まなければ・・・)

TwitterでSonarQubeの情報を調べてたら、SonarQubeの書籍が発売されるそうです。
日本語の情報は少ないようなので、ありがたいですね。

クリーンなコードへのSonarQube即効活用術

クリーンなコードへのSonarQube即効活用術