说明:由于微信不允许外部链接,请点击文末地址,访问文中链接。
概要
コードカバレッジ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を提供する
- 柔軟な失敗条件
現代のチャート
要約テーブルでは、現在の場所でのコードカバレッジの概要を確認できます。
サブサマリーテーブルでは、各サブアイテムのコードカバレッジを確認できます。同時に、右上隅の範囲ハンドラーを使用して、表示する項目をフィルターで除外し、テーブルのサイズを縮小します。ノードの名前をクリックしてサブアイテムの詳細ページに入ると、サブアイテムのコードカバレッジに関する詳細情報が表示されます。
コードカバレッジ変化の傾向グラフ
また、ビルド間でコードカバレッジの変化する傾向を示すコードカバレッジ傾向グラフもサポートしています。
ソースコードの閲覧
ソースファイルの保存レベルを設定してソースコードの参照を有効にし、最後のビルドソースファイルを保存するか(ソースコードは現在および最後のビルド結果ページに表示されます)、またはすべてのビルドソースファイルを保存します(ソースコードはの結果ページに表示されます)すべてのビルド)。
次に、File要素のノードでソースコードとそれに関連付けられたコードカバレッジ情報を確認できます。
パイプライン和並列パイプライン
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}
柔軟な失敗条件
ビルドの結果を制御するために、グローバルレベルとアダプターレベルでさまざまな要素の障害条件を設定できます。
コードカバレッジが失敗条件を満たしている場合、プラグインは現在のビルドに失敗します。
その他の機能
自動検出レポートやフィルターカバレッジなどの他の機能もサポートしています。詳細については、プラグインのドキュメントを参照してください。
建築
プラグインは、その操作中に主に次のことを行います。
-
ユーザーの構成に従ってコードカバレッジレポートファイルを検索します
-
アダプタを使用して、レポートファイルを統一された標準形式に変換します
-
標準形式のレポートファイルを解析し、それらをマージします
- 解析結果を表示する
したがって、新しいコードカバレッジツールを実装するためのアダプタを簡単に作成できます。このアダプタは、他の形式のコードカバレッジレポートをプラグインの標準形式に変換するために1つのことを行うだけで済みます。Adapterの実装はExtensionPointに基づいているため、Adapterの実装をさまざまなプラグインに分離でき、プラグインはそれらを自動的に検出します。同時に、変換プロセスを簡素化するために、一連の抽象化レイヤーも提供します。
次の図は、コードカバレッジ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