2018/10/12 - 19:19

SonarQubeで「技術的負債」可視化を試みる

:

:

前回までのあらすじ

  • 書籍の一文から拡げる技術陣マネジメント001 · eviry tech blog
  • 負債とは一体なんなのかということを開発陣も明確にわかっていない
  • そんな状態ではビジネスサイド(つまり非開発な人々)にわかってもらえるはずがない
  • なので可視化できればお互い数値なりカラフルなグラフを見て意思決定について話し合えるのではないか

SonarQube のインストール

  • 7.3 は2018年10月現在Community Editionの最新版です
  • LTS版がいいという方は 6.7.5 がいいと思います
  • Downloads | SonarQube
yum install java

VER_SONARQUBE=7.3
INSTALLDIR=/usr/local/sonarqube

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${VER_SONARQUBE}.zip -O /usr/local/src/sonarqube-${VER_SONARQUBE}.zip
unzip /usr/local/src/sonarqube-${VER_SONARQUBE}.zip -d /usr/local/
ln -s /usr/local/sonarqube-${VER_SONARQUBE} ${INSTALLDIR}


MYSQL_USER=sonarqube
MYSQL_PASSWORD=sonarqube
MYSQL_DB=sonarqube
WEB_IP=0.0.0.0
WEB_PORT=9000
cat >  ${INSTALLDIR}/conf/sonar.properties <<EOF
sonar.jdbc.username=${MYSQL_USER}
sonar.jdbc.password=${MYSQL_PASSWORD}
sonar.jdbc.url=jdbc:mysql://localhost:3306/${MYSQL_DB}?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=${WEB_IP}
sonar.web.port=${WEB_PORT}
sonar.web.context=/sonar
sonar.web.javaOpts=-server
EOF

groupadd -g 9999 sonar
useradd -u 9999 -o -g 9999 sonar
chown sonar:sonar -R ${INSTALLDIR}/*

DB設定(MySQL)

# MySQL 5.7でもインストールしてくれ
# 以下の値を必要に応じて変更しないと sonar-scanner がエラーで落ちる
# max_allowed_packet = 16M

# 以下は誰にでもわかるように書いただけ
MYSQL_USER=sonarqube
MYSQL_PASSWORD=sonarqube
MYSQL_DB=sonarqube

# echo "
#   CREATE DATABASE ${MYSQL_DB};
#   CREATE USER '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}';
#   CREATE USER '${MYSQL_USER}'@127.0.0.1 IDENTIFIED BY '${MYSQL_PASSWORD}';
#   GRANT ALL ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@localhost;
#   GRANT ALL ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@127.0.0.1;
"

CREATE DATABASE sonarqube;
CREATE USER 'sonarqube'@'localhost' IDENTIFIED BY 'sonarqube';
CREATE USER 'sonarqube'@127.0.0.1 IDENTIFIED BY 'sonarqube';
GRANT ALL ON sonarqube.* TO 'sonarqube'@localhost;
GRANT ALL ON sonarqube.* TO 'sonarqube'@127.0.0.1;

ここまでくると以下で起動できるかと思います

systemctl start mysqld
/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
  • 起動失敗するパターンは以下がありました
    • そもそも利用可能なメモリ量が足らない
    • elasticsearch が起動する分メモリが必要になる
    • /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start & ; tail -f /usr/local/sonarqube/logs/*.log で起動時エラー確認ができる

起動できると

  • http://sonar.web.host:sonar.web.port/ + sonar.web.context でアクセスできます
  • 初期設定についてはここでは述べません

SonarQube 用コマンド sonar-scanner のインストール

# Mac なら
brew install sonar-scanner

# その他の取得方法が良い人
[Analyzing with SonarQube Scanner](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner)からダウンロードしましょう
  • これ以降は当該コマンドをHomebrewで入れた体で説明します
    • コマンド : /usr/local/bin/sonar-scanner
    • 設定ファイル : /usr/local/etc/sonar-scanner.properties

設定 /usr/local/etc/sonar-scanner.properties はこのような感じにしています

sonar.host.url=http://sonarqube.example.com:9000/sonar
sonar.sourceEncoding=UTF-8

リポジトリ用設定ファイル sonar-project.properties の配置

  • sonar.projectKey がSonarQube上での設定名です
  • プロジェクトのリポジトリルートが ./reponame/ ならば ./reponame/sonar-project.properties へ配置します
sonar.projectName=reponame
sonar.projectKey=repokey
sonar.projectVersion=1.0
sonar.language=php
sonar.exclusions=.git, test/**, **/test/**, vendor/**, **/vendor/**
sonar.sources=.

sonar-scanner の実行

  • なんやかんやあって初期設定でトークンが払い出されていると思います
  • 払い出されていない場合、 設定 -> セキュリティ -> ユーザ でトークンを生成してください
cd ./reponame/

# sonar-scanner -Dsonar.login=${TOKEN}
sonar-scanner -Dsonar.login=c0ffeebeafc0ffeebeafc0ffeebeafc0ffeebeaf
  • sonar-scanner 失敗するパターンは以下がありました
    • ここでいう repokey 相当のプロジェクトが作成されていない
      • 本エントリでは当該手順を飛ばしていますので作成してください
    • 最後の最後で HTTP Error 500などでてこける
      • おそらくコード量(の解析データ量)に対して max_allowed_packet の設定値が小さすぎるので、許す範囲で設定し直してください

このような解析結果を得ます(もっと詳細にみることができます)

最終的にこのあたりを目指したい