#author("2023-04-10T21:02:29+00:00","default:wikiadmin","wikiadmin") #author("2023-04-11T06:13:02+00:00","default:wikiadmin","wikiadmin") -コードチェックツール。 #contents *ライセンス [#wa446329] 無料なのはCommunityでそれ以外のバージョンはServerIDに基づいてライセンスが発行される。ServerIDはJDBC文字列で生成しているらしい。 *API DOC [#w3cba359] 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"| *バージョニング [#h20258d1] メジャー.マイナー.パッチ LTSだとマイナーバージョンは上がらない。LTSのみパッチリリースがある。 バージョンアップには必ずLTSを挟む必要がある。 *インストール [#wed642bd] サーバーとクライアントがある。V5.1ではJDK7以上が必要。内部でElasticSearchを利用しており、メモリをかなり利用するので注意。またバージョンアップが早くV6だとMySQL5.6以上を必要とするなどハードウェア&ミドルウェアの条件が厳しい。2019年ならdockerで試すのが楽。 **Dockerバージョン [#cb5adbe8] 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 -ESが起動しないことがある vm.max_map_count [65530] is too low -vm.max_map_count = 262144を/etc/sysctl.confに追加 -sudo sysctl --system echo "vm.max_map_count = 262144" >> /etc/sysctl.conf sudo sysctl --system ***9.0だとエラー [#dbf47c1a] could not find java in ES_JAVA_HOME at /usr/lib/jvm/java-11-openjdk/bin/java privileged: trueを加えることで回避できたが、特権付与になるので他の方法を模索中 dockerのバージョンを最新(公式リポジトリを利用し23.0.3)上げることで回避できた ***バージョンアップ時の注意 [#y5999fa6] -データのマイグレーションは容量に比例するのでなるべくブランチを削除しておく -プラグインのディレクトリはクリアしておかないとそのまま引き継がれる。互換性のないプラグインは削除しておくべき。 -7.9でデフォルトで入っているプラグインを受け継いだまま8.9を立ち上げるとイカのとおり。全部消しておくべし! Web server startup failed: The following plugins are no longer compatible with this version of SonarQube: 'authgithub', 'authsaml', 'ldap', 'scmgit', 'scmsvn' ***DB_importの罠 [#yb5ccf95] -docker-compose stop ではなくdocker-compose downする。 -DBだけupする。流し込む -その後sonarを立ち上げる。 -docker stop でやると流し込んでもProjectは復元できない ***PHPをスキャン [#n711c215] +プロジェクト作成 +Sonar-scannerをダウンロードしてパスを通す +コマンドが出るのでそのとおりに実施 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-project.propertiesをroot直下に配置 -実行時オプションを与えた場合はそちらが優先される 上記と同じ値を設定したが、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 インストールと起動 [#x7ddbdee] +zipダウンロード、解凍 +batまたはshをたたく +http://localhost:9000/にアクセス **SonarQube YUMインストール [#s263275e] 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との連携 [#s5a1a1e2] -sonar.confとして/etc/httpd/conf.dあたりに配置 ProxyPass /sonar http://localhost:9000/sonar nocanon ProxyPassReverse /sonar http://localhost:9000/sonar ProxyRequests Off AllowEncodedSlashes NoDecode -sonar.properties更新 コンテキストパス/sonarを定義する。 sonar.web.context=/sonar **初期設定管理者アカウント [#h3c6d655] admin/admin *設定 [#d2885102] -SONAR_HOME/conf/sonar.propertiesファイルで設定を行う。MySQLに接続するなら以下の3行だけでよい。sonar.web.contextは/sonarでアクセスするためのもの。 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ユーザーを作成しておくこと! -sonar.web.javaOpts メモリの設定はこちらで! **プラグイン [#h4ea5c0a] プラグインはDB移行ではついてこないので、手動で入れる |プラグイン名|備考| |checkstyle|| |Cobertura|A code coverage utility for Java| ***Dockerの場合 [#feeef962] test_docker_sonarqube_extensions/_data/plugins以下にjarファイルを配置して再起動。 *yumインストール [#z89c85bd] yumパッケージもある sudo wget -O /etc/yum.repos.d/sonar.repo http://downloads.sourceforge.net/project/sonar-pkg/rpm/sonar.repo sudo yum install sonar *コード解析の実行 [#p0ecd99e] **maven [#j75543d5] maven-sonar pluginを利用すれば実行可能。デフォルトでlocalhost:9000に行く。docker sonarなら以下だけでOK。設定が毎回引数で与えるのが面倒ならばsettings.xmlへ記載 mvn compile sonar:sonar -Dsonar.java.binaries=target/classes *Jenkinsとの連携 [#iaa6f9b0] *記事 [#y4258d2d] http://yoshio.velvet.jp/blog/archives/4076 *移行 [#ke9d4a8f] +DB移行(mysqldump) +http://SONARSERVER:9000/setupにアクセス(Database is up-to-date)が出る *カスタマイズ [#af8e6d77] ruby on railsをjavaで動かしている模様。viewも.erbファイルとなる。 **view置き場 [#l79facab] SONARQUBE_DIR/web/WEB-INF/app/views/ **controller置き場 [#p7ca0655] SONARQUBE_DIR/web/WEB-INF/app/controllers/ http://docs.sonarqube.org/display/DEV/Extend+Web+Application *9.9 Docker起動できない問題 [#u3e1ac38] 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