質問: Maven の sonarQube を使用して、コミット前に増分分析を収集する方法を教えてください。
背景: SonarQube 4.1.2 を使用して、Maven でビルドされた Java プロジェクトの分析を実行しています。Issues Report プラグイン 1.1 をサーバーにインストールしました。
ビルド コンソールで増分レポートを有効にしました。maven コマンドを使用して、継続的インテグレーション サーバー内から増分データが適切に提供されていることを確認できます。 mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -P sonar -Dsonar.java.target=1.7 -Dsonar.java.source=1.7 -Dsonar.profile=MyProfileName -Dsonar.branch=branchID
関連する Maven プロファイルがあります。
<profile>
<id>sonar</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<sonar.hostname>mySonarHostName</sonar.hostname>
<sonar.host.url>http://${sonar.hostname}:9000</sonar.host.url>
<sonar.jdbc.url>jdbc:oracle:thin:@${sonar.hostname}:1521/sabrixdb</sonar.jdbc.url>
<sonar.jdbc.username>dbusername</sonar.jdbc.username>
<sonar.jdbc.password>dbpassword</sonar.jdbc.password>
<sonar.jdbc.driver>oracle.jdbc.driver.OracleDriver</sonar.jdbc.driver>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
</properties>
</profile>
継続的インテグレーション CI サーバー ログから、期待どおりにコンソールに増分レポートが表示されます。
build 14-Jul-2014 15:40:37 [INFO] [15:40:37.699]
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 ------------- Issues Report -------------
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 +3 issues
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 +3 major
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37 -------------------------------------------
build 14-Jul-2014 15:40:37
build 14-Jul-2014 15:40:37
コマンドを使用してインクリメンタル分析のためにこれを開発マシンから呼び出すと、次のようになります。mvn org.codehaus.mojo:sonar-maven-plugin:2.3.1:sonar -Dsonar.profile=MyProfileName -Dsonar.branch=branchID -Dsonar.analysis.mode=incremental -Dsonar.host.url=http://mySonarHostName:9000 -Dsonar.issuesReport.html.enable=true -Dsonar.issuesReport.console.enable=true -Dsonar.dynamicAnalysis=reuseReports
変更されたコードに予想されるさらに多くの問題を含む増分レポートを取得します。興味深いことに、ここでの数は、sonarQube サーバーで測定されたプロジェクトの課題の総数よりも大きくなっています。
------------- Issues Report -------------
+65058 issues
+42709 major
+2287 minor
+20062 info
-------------------------------------------
参照リンク 調査の一環として、次のリンクを参考にしています。
コミット前分析の 3 つのオプション http://www.sonarqube.org/three-options-for-pre-commit-analysis/
SonarQube での分析 vs. プレビュー vs. インクリメンタル プレビュー http://www.sonarqube.org/analysis-vs-preview-vs-incremental-preview-in-sonarqube/
問題レポート プラグインhttp://docs.sonarqube.org/display/SONAR/Issues+Report+Plugin
CodeHaus ソナー Maven プラグイン http://mojo.codehaus.org/sonar-maven-plugin/plugin-info.html
更新 (2014/07/16) このスレッド [ http://sonarqube.15.x6.nabble.com/Incremental-run-mode-td5024228.html]に気づきました。これは、どのファイルを分析するかを決定するために、インクリメンタルがファイルのハッシュを処理していることを説明しています。
私が取り組んでいるプロジェクトは、ソナーが無視するように指示されていないコードを生成しました。私は、これが追加のチャーンを引き起こしていると仮定しています (マシンが生成したコードをスキャンするのは悪い考えであることに加えて)。この理論を調べるため-Dsonar.exclusions=com/generatedpackage/**/*.java
に、コマンドに追加しています。
更新 (2014/07/17)
生成されたソースを sonar.exclusions で指定することにより、「増分」分析で検出される違反の数が削減されました。これらがすべて考慮されると、問題/違反の数は、プロセスをローカルで検証するために導入した問題の数と一致しました。これのメンテナンスを簡素化するために、次のパターンを使用して、生成されたすべてのファイルのメトリックを単純に抑制します。file:**/generated*/**
統一性のために、分析中のプロジェクトのルート POM 内でこれを指定することができました。
<sonar.exclusions>file:**/generated*/**</sonar.exclusions>
上で引用したように、ソナー Qube フォーラム スレッドは、インクリメンタル分析はハッシュがソナー Qube サーバー上のハッシュされたファイルと一致しないファイルのみを分析すると説明しました。