ライセンス

無料なのはCommunityでそれ以外のバージョンはServerIDに基づいてライセンスが発行される。ServerIDはJDBC文字列で生成しているらしい。

API DOC

https://next.sonarqube.com/sonarqube/web_api

再起動curl -u admin:admin123 -XPOST http://localhost:9000/api/system/restart
メトリクス一覧curl -u admin:admin123 -XPOST http://localhost:9000/api/metrics/search
プロジェクトごとにメトリクス取得curl -u admin:admin123 -XGET "http://localhost:9000/api/measures/component?component=com.rutake%3Abatch&metricKeys=ncloc"

バージョニング

メジャー.マイナー.パッチ

LTSだとマイナーバージョンは上がらない。LTSのみパッチリリースがある。 バージョンアップには必ずLTSを挟む必要がある。

インストール

サーバーとクライアントがある。V5.1ではJDK7以上が必要。内部でElasticSearchを利用しており、メモリをかなり利用するので注意。またバージョンアップが早くV6だとMySQL5.6以上を必要とするなどハードウェア&ミドルウェアの条件が厳しい。2019年ならdockerで試すのが楽。

Dockerバージョン

docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
http://localhost:9000/ のadmin/adminで入れる
mvn compile sonar:sonar -Dsonar.login=admin -Dsonar.password=admin -Dsonar.svn.username=xxx -Dsonar.svn.password.secured=xxx
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
sudo sysctl --system

9.0だとエラー

could not find java in ES_JAVA_HOME at /usr/lib/jvm/java-11-openjdk/bin/java
privileged: trueを加えることで回避できたが、特権付与になるので他の方法を模索中

バージョンアップ時の注意

Web server startup failed: The following plugins are no longer compatible with this version of SonarQube: 'authgithub', 'authsaml', 'ldap', 'scmgit', 'scmsvn'

DB_importの罠

PHPをスキャン

  1. プロジェクト作成
  2. Sonar-scannerをダウンロードしてパスを通す
  3. コマンドが出るのでそのとおりに実施
sonar-scanner   -Dsonar.projectKey=tftool   -Dsonar.sources=.   -Dsonar.host.url=http://localhost:9000   -Dsonar.login=TOKEN -Dsonar.svn.username=xxx -Dsonar.svn.password.secured=xxx

sonar-scannerはmavenやgradlewが使えない時に使うらしい。新しいバージョンのsonar-scannerは下位互換があるので、気軽にバージョンアップしてOK

上記と同じ値を設定したが、sonar.usernameにtokenを指定してログインで弾かれるので謎。sonar.passwordを追加してしのいだ

sonar.projectKey=tftool
sonar.projectName=php
sonar.sources=.
sonar.host.url=http://localhost:9000
#sonar.login=055fec9a0efce1dc33a10ac3863584417e69eb04
sonar.login=xxx
sonar.password=xxx
sonar.svn.username=xxx
sonar.svn.password.secured=xxx
# javaの場合に必要
sonar.java.binaries=target

projectKeyがユニークなIDで、 ProjectNameは表示上のラベル(表によくでてくるのはこちらで、勘違いしないようにProjectNameは指定しないほうが良いかも)

SonarQube Server インストールと起動

  1. zipダウンロード、解凍
  2. batまたはshをたたく
  3. http://localhost:9000/にアクセス

SonarQube YUMインストール

sudo wget -O /etc/yum.repos.d/sonar.repo http://downloads.sourceforge.net/project/sonar-pkg/rpm/sonar.repo
sudo yum -y install sonar

Apacheとの連携

ProxyPass         /sonar  http://localhost:9000/sonar nocanon
ProxyPassReverse  /sonar  http://localhost:9000/sonar
ProxyRequests     Off
AllowEncodedSlashes NoDecode

コンテキストパス/sonarを定義する。

sonar.web.context=/sonar

初期設定管理者アカウント

admin/admin

設定

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
sonar.web.context=/sonar

事前にsonarデータベースとsonarユーザーを作成しておくこと!

メモリの設定はこちらで!

プラグイン

プラグインはDB移行ではついてこないので、手動で入れる

プラグイン名備考
checkstyle
CoberturaA code coverage utility for Java

Dockerの場合

test_docker_sonarqube_extensions/_data/plugins以下にjarファイルを配置して再起動。

yumインストール

yumパッケージもある

sudo wget -O /etc/yum.repos.d/sonar.repo http://downloads.sourceforge.net/project/sonar-pkg/rpm/sonar.repo
sudo yum install sonar

コード解析の実行

maven

maven-sonar pluginを利用すれば実行可能。デフォルトでlocalhost:9000に行く。docker sonarなら以下だけでOK。設定が毎回引数で与えるのが面倒ならばsettings.xmlへ記載

mvn compile sonar:sonar -Dsonar.java.binaries=target/classes

Jenkinsとの連携

記事

http://yoshio.velvet.jp/blog/archives/4076

移行

  1. DB移行(mysqldump)
  2. http://SONARSERVER:9000/setupにアクセス(Database is up-to-date)が出る

カスタマイズ

ruby on railsをjavaで動かしている模様。viewも.erbファイルとなる。

view置き場

SONARQUBE_DIR/web/WEB-INF/app/views/

controller置き場

SONARQUBE_DIR/web/WEB-INF/app/controllers/ http://docs.sonarqube.org/display/DEV/Extend+Web+Application

9.9 Docker起動できない問題

16Gだと起動できたが、

[0.294s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create worker GC thread. Out of system resources.
# An error report file with more information is saved as:
# /tmp/hs_err_pid1.log

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS