Jenkins GSoC: плагин API покрытия кода Новое покрытие кода

Jenkins GSoC: плагин API покрытия кода Новое покрытие кода

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

Обзор

Плагин Code Coverage API является подпроектом Jenkins в GSoC 2018. GSoC - это мероприятие, организованное Google, чтобы помочь школьникам войти в сообщество с открытым исходным кодом и внести свой код в организации с открытым исходным кодом.

В этом проекте моими наставниками являются Стивен Христу, Супун Ванняраччи, Джефф Пирс и Олег Ненашев.

В настоящее время в Jenkins существует множество подключаемых модулей, реализующих доступ к инструментам покрытия кода, например, подключаемый модуль Cobertura, подключаемый модуль Jacoco, подключаемый модуль Clover ... Но элементы конфигурации этих подключаемых модулей, диаграммы, отображаемые на странице результатов, и отображаемый контент похожи.

Таким образом, по сравнению с написанием нового подключаемого модуля для каждого инструмента покрытия кода с нуля, мы можем предоставить подключаемый модуль API, который значительно снизит рабочую нагрузку на разработчиков. Этот подключаемый модуль API будет обрабатывать наиболее повторяющуюся работу, инкапсулировать ее в разные уровни абстракции и предоставлять простые в использовании интерфейсы API для реализации другими подключаемыми модулями.

Поддерживаемые инструменты покрытия кода

  • Встроенный

    • JaCoCo
  • Другие плагины, реализующие плагин API покрытия кода

    • Покрытие (охват плагинов)

    • llvm-cov (плагин llvm-cov)

Функции

  • Современная диаграмма

  • График тенденции изменения покрытия кода

  • Поддержка просмотра исходного кода

  • Опорный трубопровод и параллельный трубопровод

  • Объединение отчетов о поддержке

  • Предоставить REST API

  • Гибкие невыполненные условия

Современная диаграмма

В сводной таблице мы можем увидеть обзор покрытия кода в текущем местоположении.

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, отчеты с одинаковым тегом объединяются в один отчет.

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} / extension /… / result / api / {json | xml}

  • Изменения в покрытии:… / {buildNumber} / охват /… / trend / api / {json | xml}

  • Покрытие последней сборки:… / {buildNumber} / extension /… / last / result / api / {json | xml}

  • Изменение покрытия последней сборки:… / {buildNumber} / extension /… / last / trend / api / {json | xml}

Гибкие невыполненные условия

Мы можем установить условия отказа для различных элементов на глобальном уровне и уровне адаптера, чтобы контролировать результат сборки.

Jenkins GSoC: плагин API покрытия кода Новое покрытие кода

Если покрытие кода соответствует условиям сбоя, подключаемый модуль не выполнит текущую сборку.

Jenkins GSoC: плагин API покрытия кода Новое покрытие кода

Прочие функции

Мы также поддерживаем другие функции, такие как автоматический отчет об обнаружении и покрытие фильтра. Дополнительную информацию можно найти в документации к плагину.

Архитектура

Во время работы плагин в основном выполняет следующие функции:

  • Найдите файл отчета о покрытии кода в соответствии с конфигурацией пользователя

  • Используйте Адаптер для преобразования файла отчета в единый стандартный формат.

  • Анализируйте файлы отчетов стандартного формата и объединяйте их

  • Показать результат анализа

Следовательно, мы можем просто написать адаптер для реализации нового инструмента покрытия кода. Этому адаптеру нужно только одно, чтобы преобразовать отчеты о покрытии кода в других форматах в стандартный формат нашего подключаемого модуля. Реализация адаптера основана на ExtensionPoint, поэтому мы можем разделить реализацию адаптера на разные плагины, и плагины автоматически обнаружат их. В то же время, чтобы упростить процесс преобразования, мы также предоставляем ряд уровней абстракции.

На приведенной ниже диаграмме показана архитектура плагина Code Coverage 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 и предоставили файл XSL, который преобразует отчеты JaCoCo в наш стандартный формат.

Если вы хотите реализовать инструмент покрытия кода, который мы не предоставляем на уровне абстракции, вам также необходимо зарегистрировать CoverageElement и реализовать простой синтаксический анализатор. Вы можете обратиться к плагину llvm-cov.Для получения дополнительной информации, пожалуйста, обратитесь к вики-странице плагина GitHub.

附文中链接:

 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