静的解析のために LaraDock の SonarQube を Windows 10 + VirtualBox + Docker の環境で動かしてみたメモ


概要

SonarQubeというもので静的解析なるものが出来ると聞いて、前回のソースに試してみたメモ。
エラー修正の方向を間違えて迷走したが、最後には問題なく試すことができた。

検証ソース

環境

  • Windows 10 Home
  • Vagrant 2.2.6
  • virtualbox 6.0.14
  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Docker version 19.03.2, build 6a30dfc
  • docker-compose version 1.24.1, build 4667896b
  • Laradoc
  • SonarQube Community EditionVersion 7.9.1 (build 27448)

設定

  • コマンドはvagrant sshでvirtualboxのubuntuにログインしている状態のもの。

必要な Dockerfile

LaraDockの中にはたくさんのDockerfileが入っているが、これに必要なのは以下の2つ。

  • postgres
  • sonarqube

.envファイルの修正

laradock/.env
### SONARQUBE ################################################
## docker-compose up -d sonarqube
## (If you encounter a database error)
## docker-compose exec --user=root postgres
## source docker-entrypoint-initdb.d/init_sonarqube_db.sh
## (If you encounter logs error)
## docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs


-SONARQUBE_HOSTNAME=sonar.example.com
+SONARQUBE_HOSTNAME=127.0.0.1
SONARQUBE_PORT=9000
SONARQUBE_POSTGRES_INIT=true
SONARQUBE_POSTGRES_HOST=postgres
SONARQUBE_POSTGRES_DB=sonar
SONARQUBE_POSTGRES_USER=sonar
SONARQUBE_POSTGRES_PASSWORD=sonarPass

ファイルのパーミッションの設定

~/.laradock/dataは.envファイルのDATA_PATH_HOST=./.laradock/dataを参照しているので、
変更している場合はそれに合わせること。

sudo mkdir -p ~/.laradock/data/sonarqube/logs
sudo chmod -R 777 ~/.laradock/data/sonarqube

上記を行わないと、以下のエラーが出て止まってしまう。

2019-10-19 01:53:08,586 main ERROR Unable to create file /opt/sonarqube/logs/es.log java.io.IOException: Permission denied

## (If you encounter logs error) docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs を試してみたがうまくいかず、調査に時間がかかってしまった。

仮想メモリの確認

  • sonarqube は内部で ElasticSearch を使用しているため、メモリを大量に使う。
  • 以下のコマンドで確認して、デフォルトの65530ならば増やす必要がある。
sysctl vm.max_map_count

仮想メモリを増やす

sudo sysctl -w vm.max_map_count=262144

動作確認

docker-compose up -d sonarqube

virtualboxのIPをここでは192.168.74.60とすると、
http://192.168.74.60:9000/ にアクセスすると、SonarQubeの画面を確認することができる。

ログイン

ユーザ:admin,パスワード:admin でログイン

PHPプラグインの導入

プラグインを入れずに進めると以下のようなエラーとなってしまう。

ERROR: Error during SonarQube Scanner execution
ERROR: No quality profiles have been found, you probably don't have any language plugin installed.
ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

Administration > MarketPlace でプラグイン導入画面へ移動。

phpと入力してプラグインを絞り込んで、インストール

インストールできたら再起動する。

プロジェクトの作成

Adminstration > Projects >Management の順で選択

Create Project を選択

Name とKeyを入力してCreate

Provide TokenにKeyを入力してGenerate。

このTokenはメモ帳などに保存しておくといい。
tokenを確認したら、 Continue。

PHPを解析したいので、Other

SonarQubeクライアントはUbuntuにインストールする予定なので、Linuxを選択。

クライアントツールの設定

# インストール場所の設定
mkdir -p /home/vagrant/sonarqube
# 移動
cd /home/vagrant/sonarqube
# クライアントの入手
sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
# 解凍ツール導入
sudo apt install -y unzip
# 解凍
sudo unzip sonar-scanner-cli-4.2.0.1873-linux.zip
# 解凍したパスを設定して、フルパスをいれなくても sonar-scanner コマンドが使えるようにする
export PATH="$PATH:/home/vagrant/sonarqube/sonar-scanner-4.2.0.1873-linux/bin"
# ソースコードのあるディレクトリに移動
cd /vagrant/project/whitemap/laravel_docker/whitemap/app
# scan開始
sonar-scanner  -Dsonar.projectKey=Larvel  -Dsonar.sources=.  -Dsonar.host.url=http://192.168.74.60:9000  -Dsonar.login=b00689ae6518e3341dc09f529cc66661e3460d20

確認

sonar-scannerに成功すると以下のようなメッセージが表示される。

INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 8.460s
INFO: Final Memory: 6M/24M
INFO: ------------------------------------------------------------------------

ProjectsでWebから確認できる。

バグが1つあった。。



参考

Laradock 3
issue
仮想メモリ - Elasticsearch 導入前に気を付けておきたいこと!
Docker for Windows で postgres コンテナの Volume マウントを安全にする]
SonarQube で PHP のコードを静的解析する
Get Started in Two Minutes Guide
Jenkins + SonarQube で PHP コードメトリクス計測!
Ubuntu の PATH の設定方法 j
docker volume mount 時の user owner 問題
SonarQubeでソースコードの静的解析とレビューを自動化してみる(前編)
How To Ensure Code Quality with SonarQube on Ubuntu 18.04
【PHP】 PHPでの静的解析 SonarQubeを使ってみた