Checkstyle и Jenkins: проверьте измененные/добавленные строки в коммите SVN

У нас есть большой старый Java-проект с большим количеством устаревшего кода. Теперь у нас есть соглашения по коду и правила Checkstyle, чтобы проверить это.

Мы хотим настроить задание Jenkins, которое запускается после каждой фиксации в SVN, чтобы проверять, не нарушают ли измененные/добавленные строки какое-либо наше правило Checkstyle.

Невозможно проверить весь проект из-за устаревшего кода. Также мы не можем просто переформатировать весь код, потому что тогда будет сложно определить, кто изменил ту или иную строку и почему.

Подход, который мы рассматриваем - сделать разницу между предыдущим и текущим отчетом Checkstyle и посмотреть, есть ли новые нарушения.

Вопрос - как мы можем получить доступ к предыдущему отчету Checkstyle в Jenkins?

Или как настроить checkstyle, чтобы сборка не удавалась только при наличии новых нарушений?

А может есть готовые решения для такой проверки?


person dds    schedule 08.02.2013    source источник
comment
В похожей ситуации мы вызвали заморозку кода, переформатировали весь код с помощью автоматического форматтера и проверили в измененном формате. Теперь мы можем увидеть, кто что изменил, сравнив либо с версией файла до переформатирования (для очень старых изменений), либо с версией файла после переформатирования (для более новых изменений). Это сработало очень хорошо для всех.   -  person barfuin    schedule 12.02.2013


Ответы (4)


Это немного запутанно, но если вы настроите экземпляр Sonar для анализа вашего проекта, вы сможете запросить данные о нарушениях программно через API удаленного доступа. Вы знаете количество нарушений в устаревшем коде (предположительно, это число не будет часто меняться). Это ваш базовый уровень — вы не хотите, чтобы счет превышал это значение.

Таким образом, внутри вашего задания CI вы можете добавить скрипт в конце, который вызывает Sonar для получения количества нарушений на каждом из уровней серьезности, которые вас интересуют (Blocker, Critical и т. д.), и завершает сборку, если текущее количество превышает порог/эталон.

В целом Sonar довольно хорош, особенно для проектов с большим количеством устаревшего кода, потому что вы можете детализировать и выяснить, где находятся ваши самые рискованные области. У них запущен общедоступный экземпляр, если вы еще не проверили его.

person Sarah    schedule 15.03.2013

Решение состояло в том, чтобы создать bash-скрипт, который делает diff с предыдущим отчетом о проверке и не строится, если есть новые нарушения.

person dds    schedule 29.03.2013

Вы проверили плагин Checkstyle, доступный для jenkins? Он будет генерировать отчеты для каждой фиксации, и вы сможете сравнить результаты для каждого изменения. Каждая фиксация запускает новую сборку, и в конце создается новый отчет.

person Shiva Kumar    schedule 08.02.2013
comment
Я конечно проверил, но вопрос - как нам получить доступ к отчету Checkstyle из предыдущего билда? - person dds; 11.02.2013
comment
Зачем вам делать диф, когда плагин сам покажет вам новые нарушения? - person Shiva Kumar; 11.02.2013
comment
Подскажите, как настроить плагин checkstyle так, чтобы сборка не удавалась только при появлении новых нарушений? Потому что сейчас у нас его много, и строят сбои вне зависимости от новых нарушений. - person dds; 11.02.2013
comment
Обычно в расширенных конфигурациях таких плагинов у вас будет возможность указать порог. Если сборка превышает этот порог, сборка может завершиться ошибкой или сделать ее нестабильной. Если вы говорите, что сборка завершается сбоем независимо от новых нарушений, мне интересно, установили ли вы какое-либо другое свойство, которое приводит к сбою сборки. Что вы видите в выводе консоли о причине сбоя сборки? - person Shiva Kumar; 11.02.2013
comment
Сбои сборки из-за нарушений стиля проверки: не удалось выполнить цель org.apache.maven.plugins:maven-checkstyle-plugin:2.9.1:check (default-cli) в проекте mms-interop: у вас 1923 нарушения стиля проверки. - person dds; 12.02.2013
comment
Я не очень хорошо разбираюсь в конфигурации maven. Можете ли вы проверить этот вопрос и его ответ и посмотреть, работает ли он для вас? Это может быть проблема с конфигурацией, которая вызывает сбой сборки. - person Shiva Kumar; 12.02.2013
comment
Таким образом, решение состояло в том, чтобы настроить пороги состояния для плагина Checkstyle, чтобы он не выполнял сборку, если есть новые нарушения, и запускал сборку после каждой фиксации. - person dds; 18.02.2013
comment
На самом деле решение с плагином Checkstyle не подходило, потому что он дает сбой при каждой сборке после фиксации кода с нарушениями. - person dds; 29.03.2013

Вы проверили плагин Checkstyle, доступный для jenkins? Он будет генерировать отчеты для каждой фиксации, и вы сможете сравнить результаты для каждого изменения. Каждая фиксация запускает новую сборку, и в конце будет создан новый отчет. Шива Кумар

Я конечно проверил, но вопрос - как нам получить доступ к отчету Checkstyle из предыдущего билда?

Могу ли я также предложить плагины для статического анализа кода< /а>. Это покажет вам линию тренда проблем Checkstyle в виде удобного графика. Вы также можете использовать это с плагином CI Game, который будет начислять баллы за исправление проблем с контрольным стилем и вычитать баллы за возникновение дополнительных проблем с контрольным стилем.

Я обнаружил, что плагин CI Game работает очень хорошо, особенно если вы вовлекаете своих разработчиков в небольшое соревнование:

Мы кое-что добавим к конкурсу этого месяца. Как вы все знаете, первый приз - Cadillac Eldorado. Кто-нибудь хочет увидеть второй приз? (Поднимает приз) Второй приз - набор ножей для стейков. Третий приз — вы уволены.

Алек Болдуин в роли Блейка в фильме "Гленгарри Глен Росс"

Удивительно, как быстро решаются проблемы с Checkstyle, когда вы превращаете их в забавную игру.

person David W.    schedule 11.02.2013
comment
Я знаю об этих плагинах, они хороши, но наша основная цель — проверять новые коммиты на нарушения, а не исправлять старые нарушения. - person dds; 12.02.2013
comment
Все, что делает подключаемый модуль Checkstyle, — это анализирует результирующий XML-файл, созданный задачей CheckStyle. Вместо того, чтобы делать это в Jenkins, вам нужно поместить задачу Checkstyle в файл build.xml. Задача ant CheckStyle использует набор файлов, поэтому можно создать набор файлов на основе измененных файлов, а затем запустить задачу Checkstyle только для них. Тогда Дженкинс сделает то, что вы хотите. Вы можете использовать Дату. Мне придется немного поиграть с ним, чтобы понять это. Я добавлю свой ответ, если что-то выясню. - person David W.; 12.02.2013
comment
Кстати, мы используем Maven, а не ant. Но проблема в том, как сохранить результирующий XML-файл, созданный задачей CheckStyle, для последующего сравнения с ним. - person dds; 13.02.2013
comment
Я не уверен, как работает Maven с Checkstyle, но плагин Checketyle в Jenkins — это процесс после сборки с Jenkins. Jenkins не запускает Checkstyle — вы несете ответственность за то, чтобы ваш проект генерировал XML-файл Checkstyle. Что вы делаете, так это указываете в процедуре после сборки, что 1). Вы хотите создать анализ Checkstyle, и 2). где находится XML-файл Checkstyle, сгенерированный вашей сборкой. - person David W.; 13.02.2013
comment
Я только что посмотрел плагин Maven, и это одна из областей, где Maven... каков технический термин? ... о да ... отстой. С Maven все в порядке, пока вы следуете прямому и узкому пути. Однако, если вы хотите сделать что-то немного другое, например запустить Checkstyle для ограниченного подмножества файлов, у вас проблемы. В таких случаях я запускаю задачу Ant Maven, чтобы делать то, что мне нужно. Если вы еще этого не сделали, взгляните на плагин Jenkins Checkstyle и посмотрите, как он работает. - person David W.; 13.02.2013