3

質問: 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 サーバー上のハッシュされたファイルと一致しないファイルのみを分析すると説明しました。

4

1 に答える 1

3

これを正常に使用するための鍵は 2 つあります。1) 問題レポート プラグインが sonarQube サーバーにインストールされていることを確認します。2) 生成されたソースが除外されるように sonar.exclusion を指定します。

これと「ソナー」プロファイルがあれば、ユーザーはこの「ソナー」プロファイルと sonar:sonar ゴールを maven コマンドに追加するだけです。

これは次のように変更されます。

mvn clean install -P myProfile

に:

mvn clean install sonar:sonar -P myProfile,sonar 

Maven プロファイルは、ソナーの目標を検証フェーズにバインドして、プロファイルが追加されたときに目標を指定する必要をなくすことができます。もう少し柔軟性を持たせるために、プラグインをバインドしないことにしました。

これは、ユーザーがインクリメンタル コードを検証できるようにするのに十分でした。

于 2014-07-25T07:43:24.367 に答える