Code Coverage API plugin 一個新的代碼覆蓋率插件

概要node

Code Coverage API plugin 是 Jenkins 在 GSoC 2018 中的一個子項目。GSoC 是一個由谷歌舉辦的,幫助在校學生進入開源社區,爲開源組織貢獻代碼的活動。 在這個項目中,個人 mentor 是 Steven Christou, Supun Wanniarachchi, Jeff Pearce 和 Oleg Nenashev。 目前在Jenkins中,有不少插件都實現了代碼覆蓋率工具的接入,例如 Cobertura Plugin, Jacoco Plugin, Clover Plugin…可是這些插件的配置項,結果頁展現的圖表和顯示的內容都是相似的。 所以,相對於如今的爲每個代碼覆蓋率工具都從頭編寫一個新的插件,咱們能提供一個 API 插件將會大大減小開發者的工做量。這個 API 插件將處理那些最重複的工做,將其封裝成不一樣的抽象層,並提供易於使用的 API 接口讓其它插件去實現。 支持的代碼覆蓋率工具 內置 JaCoCo 其它實現了 Code Coverage API plugin 的插件 Cobertura (Cobertura Plugin) llvm-cov (llvm-cov Plugin)git

Featuresgithub

現代化的圖表 代碼覆蓋率變化趨勢圖 支持源代碼瀏覽 支持 Pipeline 和 Parallel Pipeline 支持 Report combining 提供 REST API 靈活的 Failed Conditionsjson

現代化的圖表api

在概要表中咱們能夠看到當前位置的代碼覆蓋率概況。架構

在子概要表中,看到每個子項的代碼覆蓋率狀況。同時,使用右上角的 range handler 能夠篩選出咱們想要看到的項來減少表的大小。經過點擊節點的名字能夠進入子項的詳情頁,來看到更多的關於子項代碼覆蓋率的信息。

** 代碼覆蓋率變化趨勢圖**ide

咱們也支持代碼覆蓋率趨勢圖,來顯示 Build 之間的代碼覆蓋率變化趨勢。工具

** 源代碼瀏覽**ui

經過設置 Source File Storing Level 爲 save last build source files(將會在當前和上一次Build的結果頁中顯示源碼) 或者 save all build source files (在全部Build的結果頁中顯示源碼) 來啓用源代碼瀏覽。 以後咱們就能夠在 File 元素的節點中看到源代碼以及與之相關聯的代碼覆蓋率信息。

** Pipeline 和 Parallel Pipeline**spa

API 插件提供 Pipeline 和 Parallel Pipeline 的支持,你能夠在不一樣的 Branch 中調用插件: node { parallel firstBranch: { publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')] }, secondBranch: { publishCoverage adapters: [jacocoAdapter('jacoco.xml')] } }

Reports Combining

經過給 publishCoverage 設置 tag,把含有相同 tag 的報告結合爲一個報告。 node { parallel firstBranch: { publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')], tag: ‘t’ }, secondBranch: { publishCoverage adapters: [jacocoAdapter('jacoco.xml')], tag: ‘t’ } } REST API

咱們提供 REST API 供其它應用獲取覆蓋率信息。 覆蓋率: …/{buildNumber}/coverage/…/result/api/{json|xml} 覆蓋率變化: …/{buildNumber}/coverage/…/trend/api/{json|xml} 上一次Build的覆蓋率: …/{buildNumber}/coverage/…/last/result/api/{json|xml} 上一次Build的覆蓋率變化: …/{buildNumber}/coverage/…/last/trend/api/{json|xml}

靈活的 Failed Conditions

咱們能夠在 Global 和 Adapter 級別爲不一樣的元素設置失敗條件來控制 Build 的結果。

假如代碼覆蓋率符合失敗的條件,插件將會使當前的 Build 失敗。

其餘功能

咱們也支持其它一些像是自動檢測報告,篩選覆蓋率這樣的功能,在插件的文檔中能夠找到 更多的信息。

架構

插件在運行過程當中主要會作下面幾個事情: 根據用戶的配置找到代碼覆蓋率報告文件 使用 Adapter 將報告文件轉化爲統一的標準格式 解析標準格式的報告文件並併合並它們 顯示解析後的結果 因此,咱們能夠簡單編寫一個 Adapter 來實現一個新的代碼覆蓋率工具。這個 Adapter 只須要作一件事,將其它格式的代碼覆蓋率報告轉化爲咱們插件的標準格式。Adapter的實現方式基於 ExtensionPoint,因此咱們能夠將 adapter 的實現分離到不一樣的插件中,插件將會自動發現它們。 同時,爲了簡化轉化的過程,咱們也提供了一系列的抽象層。

The below diagram show the architecture of Code Coverage API plugin

實現一個新的代碼覆蓋率插件

咱們經過實現CoverageReportAdapter這個 extension point 來實現一個新的插件。經過使用咱們插件提供的抽象層,咱們能夠像下面這樣的簡單來實現 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 文件。 假如你想要實現一個咱們沒有提供抽象層的代碼覆蓋率工具,你還須要註冊 CoverageElement 並實現一個簡單的 Parser。可參考 llvm-cov Plugin,更多的信息參見插件的 GitHub wiki page。 附文中連接: Code Coverage API plugin:jenkins.io/projects/gs… Steven Christou:github.com/christ66 Supun Wanniarachchi:github.com/Supun94 Jeff Pearce:github.com/jeffpearce Oleg Nenashev:github.com/oleg-nenash… Cobertura Plugin:github.com/jenkinsci/c… llvm-cov Plugin:github.com/jenkinsci/l… repo:github.com/jenkinsci/c…

相關文章
相關標籤/搜索