Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

说明:由于微信不允许外部链接,请点击文末地址,访问文中链接。

概要

コードカバレッジAPIプラグインは、GSoC2018のJenkinsのサブプロジェクトです。GSoCは、学校の生徒がオープンソースコミュニティに参加し、オープンソース組織にコードを提供するのを支援するためにGoogleが主催するアクティビティです。

このプロジェクトでは、私のメンターはSteven Christou、Supun Wanniarachchi、Jeff Pearce、OlegNenashevです。

現在Jenkinsには、Coberturaプラグイン、Jacocoプラグイン、Cloverプラグインなど、コードカバレッジツールへのアクセスを実装する多くのプラグインがあります...しかし、これらのプラグインの構成アイテム、結果ページに表示されるチャート、表示される内容は類似しています。

したがって、コードカバレッジツールごとに新しいプラグインを最初から作成する場合と比較して、開発者の作業負荷を大幅に軽減するAPIプラグインを提供できます。このAPIプラグインは、最も反復的な作業を処理し、それをさまざまな抽象化レイヤーにカプセル化し、他のプラグインが実装するための使いやすいAPIインターフェースを提供します。

サポートされているコードカバレッジツール

  • ビルトイン

    • JaCoCo
  • コードカバレッジAPIプラグインを実装する他のプラグイン

    • カバレッジ(プラグインカバレッジ)

    • llvm-cov(llvm-covプラグイン)

特徴

  • 現代のチャート

  • コードカバレッジ変化の傾向グラフ

  • ソースコードブラウジングをサポート

  • パイプラインと並列パイプラインをサポート

  • 組み合わせたサポートレポート

  • RESTAPIを提供する

  • 柔軟な失敗条件

現代のチャート

要約テーブルでは、現在の場所でのコードカバレッジの概要を確認できます。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ
サブサマリーテーブルでは、各サブアイテムのコードカバレッジを確認できます。同時に、右上隅の範囲ハンドラーを使用して、表示する項目をフィルターで除外し、テーブルのサイズを縮小します。ノードの名前をクリックしてサブアイテムの詳細ページに入ると、サブアイテムのコードカバレッジに関する詳細情報が表示されます。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

コードカバレッジ変化の傾向グラフ

また、ビルド間でコードカバレッジの変化する傾向を示すコードカバレッジ傾向グラフもサポートしています。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

ソースコードの閲覧

ソースファイルの保存レベルを設定してソースコードの参照を有効にし、最後のビルドソースファイルを保存するか(ソースコードは現在および最後のビルド結果ページに表示されます)、またはすべてのビルドソースファイルを保存します(ソースコードはの結果ページに表示されます)すべてのビルド)。
Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ
次に、File要素のノードでソースコードとそれに関連付けられたコードカバレッジ情報を確認できます。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

パイプライン和並列パイプライン

APIプラグインは、パイプラインと並列パイプラインのサポートを提供します。プラグインは、さまざまなブランチで呼び出すことができます。

node {
    parallel firstBranch: {
        publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')]
}, secondBranch: {
        publishCoverage adapters: [jacocoAdapter('jacoco.xml')]
    }
}

組み合わせたレポート

publishCoverageのタグを設定することにより、同じタグを持つレポートが1つのレポートに結合されます。

node {
    parallel firstBranch: {
        publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')], tag: ‘t’
}, secondBranch: {
        publishCoverage adapters: [jacocoAdapter('jacoco.xml')], tag: ‘t’
    }
}

REST API

カバレッジ情報を取得するために、他のアプリケーションにRESTAPIを提供します。

  • カバレッジ:…/ {buildNumber} / Coverage /…/ result / api / {json | xml}

  • カバレッジの変更:…/ {buildNumber} / Coverage /…/ trend / api / {json | xml}

  • 最後のビルドのカバレッジ:…/ {buildNumber} / Coverage /…/ last / result / api / {json | xml}

  • 最後のビルドのカバレッジ変更:…/ {buildNumber} / Coverage /…/ last / Trend / api / {json | xml}

柔軟な失敗条件

ビルドの結果を制御するために、グローバルレベルとアダプターレベルでさまざまな要素の障害条件を設定できます。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

コードカバレッジが失敗条件を満たしている場合、プラグインは現在のビルドに失敗します。

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

その他の機能

自動検出レポートやフィルターカバレッジなどの他の機能もサポートしています。詳細については、プラグインのドキュメントを参照してください。

建築

プラグインは、その操作中に主に次のことを行います。

  • ユーザーの構成に従ってコードカバレッジレポートファイルを検索します

  • アダプタを使用して、レポートファイルを統一された標準形式に変換します

  • 標準形式のレポートファイルを解析し、それらをマージします

  • 解析結果を表示する

したがって、新しいコードカバレッジツールを実装するためのアダプタを簡単に作成できます。このアダプタは、他の形式のコードカバレッジレポートをプラグインの標準形式に変換するために1つのことを行うだけで済みます。Adapterの実装はExtensionPointに基づいているため、Adapterの実装をさまざまなプラグインに分離でき、プラグインはそれらを自動的に検出します。同時に、変換プロセスを簡素化するために、一連の抽象化レイヤーも提供します。

次の図は、コードカバレッジAPIプラグインのアーキテクチャを示しています

Jenkins GSoC:コードカバレッジAPIプラグイン新しいコードカバレッジ

新しいコードカバレッジプラグインを実装する

CoverageReportAdapterの拡張ポイントを実装することにより、新しいプラグインを実装します。プラグインが提供する抽象化レイヤーを使用することで、JaCoCoを次のように簡単に実装できます。

public final class JacocoReportAdapter extends JavaXMLCoverageReportAdapter {

    @DataBoundConstructor
    public JacocoReportAdapter(String path) {
        super(path);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String getXSL() {
        return "jacoco-to-standard.xsl";
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String getXSD() {
        return null;
    }

    @Symbol("jacoco")
    @Extension
    public static final class JacocoReportAdapterDescriptor extends JavaCoverageReportAdapterDescriptor {

        public JacocoReportAdapterDescriptor() {
            super(JacocoReportAdapter.class);
        }

        @Nonnull
        @Override
        public String getDisplayName() {
            return Messages.JacocoReportAdapter_displayName();
        }
    }
}

ここでは、Java XMLレポートを作成するための抽象化レイヤーを実装し、JaCoCoレポートを標準形式に変換するXSLファイルを提供するという2つのことだけを行いました。

抽象化レイヤーを提供していないコードカバレッジツールを実装する場合は、CoverageElementを登録し、単純なパーサーも実装する必要があります。llvm-covプラグインを参照できます。詳細については、プラグインのGitHubwikiページを参照してください。

附文中链接:

 Code Coverage API plugin:https://jenkins.io/projects/gsoc/

 Steven Christou:https://github.com/christ66

 Supun Wanniarachchi:https://github.com/Supun94

 Jeff Pearce:https://github.com/jeffpearce

 Oleg Nenashev:https://github.com/oleg-nenashev

 Cobertura Plugin:https://github.com/jenkinsci/cobertura-plugin

 llvm-cov Plugin:https://github.com/jenkinsci/llvm-cov-plugin

 repo:https://github.com/jenkinsci/code-coverage-api-plugin

おすすめ

転載: blog.51cto.com/15127503/2657649