Как я могу опубликовать cppcheck.xml на jenkins, используя сам jenkinsfile?

В настоящее время у меня есть работа с многоветвевым конвейером, в которой происходит сборка, а cppcheck используется для анализа кода. Однако в многоветвевом конвейере нет вкладки «Действия после сборки», чтобы включить «публикацию результатов cppcheck». Долго искал ответ в инете, но так и не нашел.

Доступны только общие, триггеры сборки, расширенные параметры проекта и вкладки конвейера (я проверил расширенные параметры проекта, и нет возможности добавить туда раздел пост-сборки).

Есть ли способ жестко закодировать публикацию cppcheck.xml, используя сам jenkinsfile? Есть ли какой-либо синтаксис, который я могу использовать, чтобы вызвать плагин cppcheck, чтобы проверить файл xml и опубликовать его. Это действительно экстренная необходимость. Я пытался много искать, чтобы преобразовать xml в другие форматы, такие как html или jnuit xml. Кажется, ничего не работает. Кто-нибудь может помочь?


person JenkinsNewbie1989    schedule 13.09.2017    source источник
comment
В конце концов, я использовал свойство cppcheck_html, чтобы создать отчет в формате html и опубликовать его на jenkins.   -  person JenkinsNewbie1989    schedule 28.09.2017


Ответы (3)


Для этого я использую Jenkins плагин предупреждений с пользовательским парсером .

Начиная с версии 3.8 вы можете динамически определять новые синтаксические анализаторы в разделе конфигурации системы Jenkins. Просто перейдите по адресу http://[jenkins-url]/configure и создайте новый анализатор в разделе < strong>Предупреждения компилятора. Пользовательский интерфейс должен быть понятным

Вместо XML текстовый файл генерируется с помощью этой командной строки:

cppcheck --enable=all --template="{file},{line},{severity},{id},{message}" . 2> cppcheck.txt

Вот справка по параметру template:

--template='<text>'  Format the error messages. E.g.
                     '{file}:{line},{severity},{id},{message}' or
                     '{file}({line}):({severity}) {message}' or
                     '{callstack} {message}'
                     Pre-defined templates: gcc, vs, edit.

Дополнительную информацию можно найти в руководстве Cppcheck в формате PDF.

Я использую это регулярное выражение для анализа файла:

^(.+),(\d+),(error|warning|style|performance|portability|information),(.*),(.*)$

ОБНОВИТЬ

Плагин предупреждений подошел к концу. Все функции интегрированы в плагин нового поколения предупреждений.

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

Создайте файл XML с помощью этой командной строки:

cppcheck --xml --xml-version=2 . 2> cppcheck.xml

В вашем файле Jenkins вам нужно будет добавить эту строку для сканирования файла на наличие предупреждений или проблем:

scanForIssues tool: cppCheck(pattern: 'cppcheck.xml')
person Crayon    schedule 09.11.2017

В настоящее время плагин CPPCheck не поддерживает конвейер.

Однако для плагина открыт запрос на вытягивание.

https://github.com/jenkinsci/cppcheck-plugin/pull/36

Не стесняйтесь клонировать его и сделать еще несколько тестов.

person JamesD    schedule 13.09.2017
comment
это очень жаль. я проверю это. Спасибо за ответ. - person JenkinsNewbie1989; 14.09.2017

В ноябре 2017 года упоминание о запросе на вытягивание от JamesD было объединено.

Если вы посмотрите на документацию Pipeline, теперь есть htmlpublisher команда.

Обратите внимание, что XML-файл должен быть сгенерирован заранее, а аргумент шаблона, используемый ниже, ищет файл по пути %WORKSPACE%.

stage('CppCheck') {
    steps {                       
        publishCppcheck pattern:'output/bin/Release/report_cppcheck.xml'
    }    
}
person vincedjango    schedule 02.10.2018