2016-05-20 10 views
1

以外の特定のバージョンに漏れ期間を設定し、我々はそのように動作します別の監査ツールを使用して、当社の現在のワークフロー
を、移行したい:Sonarqube Sonarqube(バージョン5.4)を評価する以前のバージョン

生産に走る現在のバージョン私たちのリファレンスバージョンです。
新しい開発バージョンがGITからチェックアウトされている場合、diffプロセスは新しいファイルと変更されたファイルを比較して、 の参照バージョンを計算し、これらのファイルの監査を開始します。
レガシーコード(既に2012年に存在していたコンポーネント)と (2012年以降)の新しいコンポーネントも若干異なります。

ビルドブレークの場合:レガシーコンポーネントから変更されたファイルで

ブロッカーの問題(これらのファイルは、すでに2012年に既存の)
ブロッカーまたは重要な問題新しいファイル(2012年以降に作成されたファイル)で、レガシーと新しいコンポーネント

から

どのようにSonarqubeでそれを実装するのですか?すでに

しようとした二つのこと:

1)のAntスクリプト内の生産/参照バージョンにプロパティsonar.timemachine.period1を設定ソナータスクを開始する前に=>それは

「旧版からいつもだ 、動作しませんでした

2.)Sonarqubeの2つの異なるプロジェクトを定義します.1つはプロダクション版用で、もう1つは新しい開発版用です。 それから、Sonarqube Web UI More/Compare Projectsから知られている機能をプログラムで使用して、ブロックとCritcalの問題について の差分を取得します。

問題:f.e.既に私の生産の中にすでに存在していた200のクリティカルな問題を修正した場合は、重要な問題についてはdiffを取得しません。 リファレンスが、開発バージョンに200の新しい問題が導入されました。
プロジェクトの比較機能には、新規または古い問題のメトリックがありません。比較対象のプロジェクトの問題を数えています。

答えて

3

Sonarタスクを呼び出す前に、sonar.timemachine.period1プロパティをREST呼び出し(ドキュメントhere)で設定する必要があります.Antプロパティタスクで定義した場合、Sonarqubeサーバーには転送されません。そのような 作品は、再利用のためmacrodefを作成:

<project xmlns:sonar="antlib:org.sonar.ant"> 

    <!-- Import Groovy --> 
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/> 
    <!-- Import Sonar --> 
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"/> 

    <property name="sonar.language" value="java" /> 
    <property name="sonar.host.url" value="http://localhost:9000" /> 
    <property name="sonar.projectKey" value="com.whatever:foobar" /> 
    <property name="sonar.projectName" value="foobar" /> 
    <property name="sonar.projectVersion" value="v_1_2_3_xy" /> 
    <property name="sonar.scm.provider" value="git" /> 
    <property name="sonar.sources" value="src"/> 
    <property name="sonar.java.binaries" value="bin"/> 
    <property name="sonar.java.libraries" value=" ... " /> 

    <macrodef name="sonarsetproperty"> 
    <attribute name="host" default="${sonar.host.url}"/> 
    <attribute name="property" /> 
    <attribute name="projectid" default="${sonar.projectKey}"/> 
    <attribute name="value"/> 
    <attribute name="usertoken" default="6e44ba2b9c0f47118d502fbf1d6d36fcfd5f7eb2"/> 
    <attribute name="verbose" default="false"/> 

    <sequential> 
     <groovy> 
     <![CDATA[ 
     println """ 
     ================ Sonar SetProperty ================ 
     SonarHost  => @{host} 
     SonarProperty => @{property} 
     Value   => @{value} 
     ================ Sonar SetProperty ================ 
     """ 
     s = '@{host}/api/[email protected]{property}&[email protected]{value}&[email protected]{projectid}' 

     raw = '@{usertoken}:' 
     bauth = 'Basic ' + javax.xml.bind.DatatypeConverter.printBase64Binary(raw.getBytes()) 
     url = new URL(s) 

     HttpURLConnection conn = url.openConnection() 
     conn.setRequestMethod('POST') 
     conn.setRequestProperty("Authorization", bauth) 
     conn.connect() 

     if(conn.responseCode == 200 || conn.responseCode == 201) { 
      response = conn.content.text 
      if(@{verbose}) println '=== Response ===\n' + response + '\n=== Response ===' 
     } else { 
      ant.fail(message: "Error Connecting to ${url}, Errorcode ${conn.responseCode}") 
     } 
     ]]> 
     </groovy> 
    </sequential> 
    </macrodef> 

    <!-- user needs to be admin --> 
    <sonarsetproperty property="sonar.timemachine.period1" value="v_1_0_0_xy"/> 

    <!-- Execute Sonar --> 
    <sonar:sonar /> 

</project> 

は、どういうわけか私は、REST呼び出しの後
Sonarqube ServerのWeb UI /管理/一般設定/差動ビュー
にsonar.timemachine.period1を確認することが期待しましたしかし、そうではありません。
Note =>BasicAuthusername:passwordを使用する代わりに、
http://sonarhost/account/securityにusertokenを作成し、代わりにusertoken:を使用してください。usertokenはセパレータ ':'と空白のパスワードを持つuseridとして意味します。

関連する問題