12

TeamCity ビルド プロセスでソナー分析を統合しようとしています。単体テストを実行し、カバレッジのために dotCover を実行する NUnit ビルド ステップがあります。

私の次のステップはソナーランナーです。現在存在する構成は次のとおりです。gallio.mode=dotCover, sonar.gallio.mode=reuseReport でも sonar.gallio.reports.path も必要です。

前のステップで生成された dotCover レポートへのパスを知っている人はいますか?

4

7 に答える 7

5

同じ問題にある程度の時間を費やしましたが、新しい Sonar c# プラグイン (v.2.3) - Gallio のサポートは削除されましたが、レポートは引き続き必要です。

質問に直接答えるために、TeamCity は dotcoverスナップショットファイルをcoverage_dotcover27574681205420364801.data(数字はランダムです) のような名前の一時フォルダーに入れます。そう

手順は次のとおりです。

  1. テストとカバレッジのステップの後に、Team City で PowerShell Build ステップを作成します。
    • 必要に応じてコマンドラインを使用することもできます
  2. 一時フォルダーで完全な dotCoverスナップショット名を取得する
  3. dotCover を実行して、スナップショットから HTML レポートを生成する
    • 注 - Sonar (c# プラグイン v 2.3) は dotCover HTML レポートのみをサポートします
  4. 生成された HTML レポートをソナーに渡す

PowerShell スクリプト:

$snapshot = Get-ChildItem "%system.teamcity.build.tempDir%" `
     -Filter coverage_dotcover*.data `
     | select -ExpandProperty FullName -First 1

%teamcity.dotCover.home%\dotCover.exe report `
    /ReportType=HTML /Source="$snapshot" `
    /Output="%sonar.coverageReport%"

ソナーランナーでレポートを次のように指定できるようになりましたsonar.cs.dotcover.reportsPaths='%sonar.coverageReport%'

%sonar.coverageReport% は TeamCity で定義されたプロパティです

于 2014-11-26T15:53:39.693 に答える
4

組み込みの NUnit ランナーを使用してこれを行う方法が見つかりませんでした。PowerShell ビルド ステップを使用して必要なコマンドを手動で呼び出すことで、なんとか機能させることができました。

最初のステップは、dotCover カバー コール内で Gallio を介して NUnit テストを実行することです。

& dotCover cover `
/TargetExecutable="C:\Program Files\Gallio\bin\Gallio.Echo.exe" `
/TargetArguments="/report-type:XML /report-name-format:test-report /runner:IsolatedProcess /report-directory:.\Gallio .\Path\Test.dll" `
/Filters="+:WhatToCover" `
/Output=coverage.snapshot

その後、Gallio テスト レポートは、Sonar が reuseReport を使用して取得できるようになり、TeamCity はテスト結果を自動的に検出します。

サービスメッセージを標準出力に書き込むことで、TeamCity にカバレッジスナップショットを直接処理させることができます。

Write-Host "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='coverage.snapshot']"

カバレッジ情報を Sonar で使用できる形式にするには、 dotCover report コマンドと文書化されていないレポート タイプ TeamCityXMLを使用する必要があります。

& dotCover report /Source=coverage.snapshot /Output=coverage-report.xml /ReportType=TeamCityXML
于 2012-11-02T10:07:59.867 に答える
1

nunit/dotcover ビルド ステップからのカバレッジ レポートは、teamcity の隠しアーティファクト ディレクトリに保存されます。ソナーステップでアーティファクトの依存関係としてそれを追加する必要があります。非表示のアーティファクト ルートはお勧めしませんが、実行できます。

これは、レポートを公開するために使用したアーティファクト パスで、数週間機能した後、失敗し始めました。

%env.TEAMCITY_DATA_PATH%/system\artifacts\**\%teamcity.build.id%\.teamcity\.NETCoverage\dotCover.snapshot

レポートを受け取ったら、家は自由です。

于 2014-10-24T23:44:34.810 に答える
1

少し面倒な解決策かもしれませんが、私は 2 つの連鎖ビルドを使用しています。

最初のビルド構成は、ソリューションをビルドし、テスト/カバレッジを実行し、さらに dotCover スナップショットをアーティファクトとして保存します。

もう 1 つのビルドは、最初のビルドにアーティファクト依存関係があり、.teamcity/.NETCoverage/dotCover.snapshot実行 "C:\Program Files (x86)\JetBrains\dotCover\v2.7\bin\dotCover.exe" report /ReportType=HTML /Source="dotCover.snapshot" /Output="dotCover.html"され、最新のステップとして SonarRunner を実行します (プロジェクト プロパティ ファイルは "dotCover.html" を指します)。

(SonarQube 5、dotCover 2.7、TC8で試しました)

于 2015-05-10T09:37:25.027 に答える