Конвейер проверки качества кода













Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

Про управление качеством кода — Управление техническим долгом — Концепция Continuous Inspection и Управление качеством кода.

Использование сонара — Управляй качеством кода 1С с помощью SonarQube

Что умеет

Как работает

Установка и настройка инфраструктуры

    Установить ГитКонвертор

    Установить SonarQube и плагины

    Установить 1С:EDT

    Установить Дженкинс

    Установить и настроить SonarScanner для дженкинса

    Создать каталог инструментов

    Установить oscript и библиотеки

    Установить и настроить АПК

    Создать репозиторий для дженкинсфайла

    Настроить оповещения

Добавление проекта к проверке

    Настроить ГитКонвертор

    Настроить АПК

    Создание первого конвейера

    Указать параметры запуска конвейера

    Создание второго конвейера

    Расчет покрытия тестами

 

Что умеет

 

  • Собирает ошибки с 3х анализаторов: АПК, EDT и BSL-LS и отправляет в Сонар.
  • Используется единый дженкинсфайл для всех проектов. Если нужно улучшить конвейер — делается это в одном месте.
  • Работает по выгрузке ГитКонвертора. А ГитКонвертор выгружает проект в формате EDT.
  • Вырезает из списка ошибок все объекты на замке. Если конфигурация на поддержке и поменять только один модуль — будут показаны ошибки только по этому модулю.
  • Переопределяет параметры ошибок. Можно понизить/повысить важность ошибок. И даже полностью пропустить.
  • Параметры переопределения могут быть как едиными — лежать в репозитории рядом с дженкинсфайлом. Так и частными для каждого проекта.
  • Можно вывести покрытие кода.

Как работает

 

Разработчик помещает свои изменения доработки в хранилище. Через некоторое время получает уведомление о завершении проверок. Заходит в SonarQube и видит список замечаний по своему коду.

В это время внутри:

  • ГитКонвертор получает все новые изменения и коммитит их в репозиторий.
  • Вручную, по расписанию или по событию стартует конвейер. Первым шагом он получает и актуализирует дженкинсфайл.
  • Инициализирует все нужные переменные, заполняет пустые параметры значениями по умолчанию и готовит каталоги. Выполняет оповещение о старте конвейера.
  • Получает репозиторий с кодом в подкаталог “repo”.
  • Выполняется выгрузка ошибок из АПК, EDT и BSL-LS в джсон-файлы.
  • Джсон-файлы обрабатываются оскриптом — вырезаются файлы на поддержке, переопределяются данные ошибок.
  • Если указана папка с файлами замеров, то они конвертируются в файл покрытия.
  • По исходникам получается текущая версия конфигурации. Переопределяется джава. Собираются параметры для работы СонарСканера и запускается.
  • После отработки сканера конвейер ставится на паузу и ждет ответа от сервера сонара. По ответу можно сломать сборку, если порог не пройден или просто сообщить статус проверки оповещением.

Установка и настройка инфраструктуры

Установить ГитКонвертор

 

https://github.com/1C-Company/GitConverter

Он нужен для конвертации хранилища в гит-репозиторий. Когда SonarQube работает по гит-репозиторию — появляется информация о разработчике, который внес ошибку.

ГитКонвертор можно установить на тот же сервер, где будут располагаться и другие инструменты. Плюсы от совместного размещения — экономия на количестве серверов, все в одном месте, переиспользование инструментов. Из минусов — возможные конфликты за ресурсы, уменьшение надежности.

Установить SonarQube и плагины

 

Про установку хорошо написано в статье Управляй качеством кода 1С с помощью SonarQube

Сканер ставить не надо. Будет использоваться плагин дженкинса.

Комьюнити плагин для сонара доступен теперь и в маркете сонара.

Установить 1С:EDT

 

https://edt.1c.ru/

Если ГитКонвертор установлен на этом же сервере, то едт уже был установлен ранее. Второй раз можно не ставить.

Установить Дженкинс

 

Про установку хорошо написано в статье Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD. Именно из-за этой статьи я решил сделать единый дженкинсфайл для проверки качества кода. И в ней же узнал как это сделать.

Слейв ноду нужно обязательно настроить. АПК отказывается корректно работать, если дженкинс запущен как сервис.

Установить и настроить SonarScanner для дженкинса

 

SonarScanner for Jenkins” — https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-jenkins/

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

В конфигурации системы:

В конфигурации глобальных инструментов:

Имя сервера “Sonar” и имя сканера “SonarQube Scanner” используются в дженкинсфайле, поэтому их лучше не менять. Или поменять и в дженкинсфайле.

Создать каталог инструментов

 

На сервере создать папку “C:/Sonar/”. Не обязательно именно этот путь, но далее буду оперировать именно им.

Скачать последний релиз обработки с https://github.com/otymko/acc-export/releases. Положить по адресу "C:/Sonar/bin/acc-export.epf".

Скачать последний релиз BSL-LS c https://github.com/1c-syntax/bsl-language-server/releases.

Положить по адресу "C:/Sonar/bin/bsl-language-server.jar".

Скачать 11 JDK https://jdk.java.net/archive/. Положить по адресу “C:/Sonar/jdk”. Полный путь к java выглядит вот так "C:/Sonar/jdk/bin/java.exe". Прописывать в переменные среды не надо, а то будет конфликт с 8ой джавой для едт.

Установить oscript и библиотеки

 

http://oscript.io/

choco install onescript-cli

Скачать и распаковать архив из приложенных файлов и запустить install.bat. Будут установлены приложения vanessa-runner, perf-measurements-to-cover, stebi и библиотека v8metadata-reader.

Установить и настроить АПК

 

https://releases.1c.ru/project/ACC

Установить нужно в каталог “C:/Sonar/ACC” и создать пользователя “Admin” без пароля.

Создать репозиторий для дженкинсфайла

 

Форкнуть или скопировать репозиторий https://github.com/Stepa86/jenkins-pipeline-1C-to-sonar. Донастроить под себя при необходимости. Адрес репозитория с дженкинсфайлом понадобится позднее.

Настроить оповещения

 

В моем дженкинсфайле используется плагин “RocketChat Notifier” для отправки оповещений в рокет.чат. Если вы не используете в работе рокет.чат, то нужно самостоятельно найти и скачать подходящий вам плагин и заменить в дженкинсфайле строки “rocketSend” на вызов своего плагина.

Добавление проекта к проверке

Настроить ГитКонвертор

 

Настроить и запустить конвертацию хранилища по инструкции от ГитКонвертора.

Для работы скрипта по вырезанию файлов на поддержке нужна информация о поддержке. Поэтому в настройках нужно снять флаг “Удалять конфигурации поставщиков”.

После снятия флага начнет выгружаться информация о поддержке и cf-файлы конфигураций, cf-файлы нужно добавить в “.gitignore”.

Значения в зеленых полях потребуются в дальнейшем.

Обязательно каталог выгрузки в репозиторий должен быть на латинице. Если там кириллица — Дженкинс очень непредсказуемо себя ведет.

Настроить АПК

 

Запуск проверки АПК ищет конфигурацию по наименованию и использует ее.

Создать новую конфигурацию.

В наименование указать “Каталог выгрузки в репозитории” из ГитКонвертора.

В “Путь к источнику проверки” указать “Адрес хранилища”. Заполнить пользователя и его пароль для доступа к хранилища.

Важно, чтобы пользователи хранилища для ГитКонвертора и АПК были разными. Их никто не должен больше использовать. Иначе это приведет к конфликтам получения изменений из хранилища.

Дальше нужно настроить список проверяемых требований (выбрать все, например) и исключений, проверить подключение к базе после записи и закрыть АПК.

Стоит запустить полную проверку вручную из АПК, чтобы убедится в работоспособности.

Создание первого конвейера

 

Перейти в веб-интерфейс Дженкинса. По умолчанию это http://localhost:8080

Слева сверху “Создать Item”.

Имя Item’а — произвольное. Лишь бы было понятно что это. Лучше латиницей и без пробелов.

Тыкнуть на Pipline и нажать Ок внизу.

Откроется конфигурация джоба.

Перейти к разделу Pipline.

 

В Definition выбрать Pipline script from SCM.

В SCMGit.

Repository URL — адрес репозитория с дженкинсфайлом. В моем случае это https://github.com/Stepa86/jenkins-pipeline-1C-to-sonar.git

В Credentials добавить/выбрать параметры доступа к этому репозиторию.

Стоит сразу создать Credentials для доступа к репозиторию с исходниками конфигурации и скопировать его ID. Он понадобится чуть позднее.

В Script Path — путь к дженкинсфайлу в репозитории. В моем случае это “Sonar/Jenkinsfile”.

Сохранить. И в окне джоба слева нажать на “Собрать сейчас”.

Если все настроено верно, то отработает первый шаг — получение дженкинсфайла, а потом сразу все упадет.

Указать параметры запуска конвейера

 

Обновить страницу джоба. Слева сверху кнопка “Собрать сейчас” превратится в “Собрать с параметрами”. Нажать на нее. Откроется окно ввода параметров.

 

PROJECT_NAME — ключ проекта. Именно под этим именем будет создан проект в сонаре. Именно по нему выполняется поиск конфигурации в АПК. Сюда вписываем наименование конфигурации АПК. Она же — Каталог выгрузки в репозитории”.

git_repo_urlадрес репозитория git из ГитКонвертора.

git_repo_branchимя ветки в репозитории.

sonar_catalog — каталог инструментов C:/Sonar/

PROPERTIES_CATALOG — каталог в проекте с переопределенными настройками.

ACC_check — Запуск проверки АПК перед выгрузкой ошибок.

ACC_recreateProject — Пересоздание конфигурации в АПК. Сбрасывает кэш проверки. АПК работает дольше, но все данные переполучаются заново. Актуально, когда ошибка исправлена, а АПК этого исправления “не увидела” из-за кэша.

STEBI_SETTINGS — путь к джсон файлу с переопределением ошибок. Может быть как общим из репозитория с дженкинсфайлом, так и частным для проекта.

jenkinsAgent — имя ноды на которой нужно запускать проверку. Критично к регистру.

EDT_VERSION — версия едт, которую нужно использовать.

perf_catalog — каталог с файлами замера производительности .pff. По ним создается файл с данными покрытия.

git_credentials_IdID Credentials для доступа к репозиторию.

rocket_channel — имя канала для отправки оповещений.

После указания всех параметров — Собрать.

Если упало на каком-то шаге. По логам определить и устранить проблему и еще раз нажать на “Собрать с параметрами”.

Если проверка АПК отработала и в конфигурации больше ничего не менялось, то для отладки и ускорения процесса можно перезапускать конвейер со снятой галкой ACC_check.

Из джобы можно перейти в проект сонара и посмотреть, что ошибки загружены.

Создание второго конвейера

 

Аналогично созданию конвейера нужно нажать на Создать Item, ввести имя, тыкнуть в Pipeline и внизу ввести имя существующего для копирования из него настроек.

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

Расчет покрытия тестами

 

Адекватного способа рассчитать покрытие тестами в 1С на данный момент нет. Я костылю так:

Разворачиваю тестовую базу загрузкой из хранилища.

Захожу в конфигуратор. Из него запускаю менеджер тестирования под отладкой.

В менеджере тестирования подключаю тест-клиента под отладкой.

В конфигураторе включаю замеры.

Запускаю выполнение тестов.

Когда все тесты завершились, сохраняю все замеры в спец. папку, предварительно ее очистив. Эту спец. папку указываю в параметрах конвейера.

 

37 Comments

  1. vlad.frost

    Лайк поставил, скрипты скачал!

    Reply
  2. BlizD

    Круто, Антон!

    Reply
  3. Pr-Mex

    Плюсую!

    Reply
  4. Yashazz

    Это вообще кто-нибудь использует? Ну вот по-честному, реально, хоть один живой пример известен?

    Reply
  5. Stepa86

    (4) Мы в нашей компании используем именно этот инструментарий именно в этом виде.

    Reply
  6. Yashazz

    (5) Ну это-то понятно. Сами для себя изобрели и сами мучаетесь. У вас что, миллиардный оборот, конфиги пилите уровня УХ, и сотни кодеров, что понадобились настолько адские ухищрения, как «конвейер», простихосспади, контроля кода? Его и у 1С-то нет)

    Reply
  7. Stepa86

    (6) И с чего вы взяли, что мы мучаемся? И с чего вы взяли, что это настолько адские ухищрения? С чего вы взяли, что этого нет у самого 1С? Нравится писать говнокод, ну продолжайте писать, чо тут то токсичность выплескивать?

    Reply
  8. o.nikolaev

    Да это просто праздник какой-то! (Карабас Барабас) Именины сердца!

    Reply
  9. Yashazz

    (7) Да просто ни в одной компании я не видел даже просто аудита и контроля кода. Не то что автоматизации этого процесса. Ну то есть на практике не видел, на бумаге-то много чего было. Не окупается, и не работает толком, выглядит красиво и вкусно, а практического выхлопа ноль. А я много чего видел. В основном — жутковатого.

    А что мучаетесь, так это очевидно, потому как нет технологии организации коллективной разработки, позволяющей эффективно, без тормозов и помех для процесса, это хотя бы мониторить. Продукт — полдела, нужна работающая концепция его применения и железобетонная воля руководства это применять, несмотря на порождаемые задержки и проблемы.

    Вы на личности-то не переходите. Что есть говнокод — вопрос интересный, и не след полагать говнокодом всё, что не прошло некую верификацию. Насчёт 1С всё элементарно — я это знаю из первых рук, по крайней мере по состоянию на 2016 год. Да гляньте их поделки, сами поймёте)))

    А что, качество запросов ваша система тоже проверяет? По заветам Рупасова?)

    Reply
  10. zeegin

    (9) Вам очень не повезло с работодателями.

    Это используют. Не всегда в таком виде, иногда какие-то компоненты заменяют на другие.

    После того, как втягиваешься — не понимаешь как это можно не использовать 🙂

    Попробуйте потратить пару недель своего времени и разобраться. Сложно только по началу и от незнания процессов и инструментов.

    Reply
  11. Yashazz

    (10) Процессы-то я знаю и теорию знаю. И время тратил, и разбирался. А вот раздолбайство и бардак таковы, что это просто нельзя использовать. Человеческий фактор и энтропия коллективных взаимодействий, искажения связей в больших системах итд — всё это сводит на нет любую красивую теорию. Это как эйджилы всякие использовать — натягивание совы на глобус.

    Что касается «иногда какие-то компоненты» — через год попыток использования таких систем в 95% случаев всё сползает в прежний бардак, только «бухгалтерии прибавляется», как в том анекдоте. А дальше отдельно ритуальные телодвижения и отдельно грустная реальность.

    Reply
  12. olegtymko

    (9) Мы используем code-review и SonarQube очень в этом помогает.

    Reply
  13. JohnyDeath

    (9)

    Да просто ни в одной компании я не видел даже просто аудита и контроля кода. Не то что автоматизации этого процесса.

    Возможно потому и не используют, что руками очень сложно-долго-дорого?

    Reply
  14. JohnyDeath

    Очень круто!

    Reply
  15. kuzyara

    (4) Используем, используем.

    Reply
  16. VmvLer

    согласен с (9)

    не буду отрицать, что кому-то подобный продукт полезен в качестве исключения, но то

    это необходимо очень спорно.

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

    Reply
  17. Stepa86

    (16) В https://infostart.ru/public/1096770/ я как раз писал кому это не надо, кому можно, а кому обязательно.

    И очень интересно услышать про более простые пути в повышении качества кода, чем использование статических анализаторов. Про двойное чтение кода и просто писать без ошибок можно не рассказывать.

    Reply
  18. Stepa86

    Удивляют меня те, кто выбрал профессию по автоматизации кому-то чего-то, но при этом против автоматизации своей деятельности

    Reply
  19. olegtymko

    (16) А какие вы более простые пути используете?

    Reply
  20. VmvLer

    (18) На смену удивлению приходит понимание бесполезности(иногда вредности) многих вещей когда опыт автоматизации велик.

    будем философствовать с разрушителем легенд или вернемся к пиару вашей нетленки «без шуму и пыли»?

    Reply
  21. VmvLer

    (19) мозги

    Reply
  22. Stepa86

    (21) Эффект Да́ннинга — Крю́гера — метакогнитивное искажение, которое заключается в том, что люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации[1]. Это приводит к возникновению у них завышенных представлений о собственных способностях, в то время как действительно высококвалифицированные люди, наоборот, склонны занижать оценку своих способностей и страдать недостаточной уверенностью в своих силах, считая других более компетентными. Таким образом, менее компетентные люди в целом имеют более высокое мнение о собственных способностях, чем это свойственно людям компетентным (которые к тому же склонны предполагать, что окружающие оценивают их способности так же низко, как и они сами).

    Reply
  23. olegtymko

    (21) Вот и поговорили. Код наверное сразу без ошибок и тех. долга пишется и в проде проблем не бывает)

    Reply
  24. VmvLer

    (22) надеюсь вы это взяли из конспекта своих лекций.

    в приличных вузах это излагают по предмету «инженерной психологии».

    ну а по факту что?

    невинное изложение субъективного мнения, идущего вразрез

    хвалебного «одобрямс крута», вызывает у вас эмоциональные-мелочные потуги

    закрасить собеседника в черные тона.

    молодой человек, никто не умаляет вашего таланта и мощи нетленки, но

    если вы не научитесь управлять эмоциями и видеть главное, то не все

    хорошо будет «в датском королевстве».

    смысл мною сказанного станет понятен спустя 10…20 лет, если

    в то время хоть что-то будет иметь толику смысла.

    Reply
  25. stepan96

    Антон, а вот это можно поподробнее: «В менеджере тестирования подключаю тест-клиента под отладкой.» Тоже больной вопрос по расчету покрытия

    Reply
  26. stepan96

    (4) Мы сейчас разворачиваем у себя. И в продуктив выводим. И статический анализ и автотесты

    Reply
  27. Stepa86

    (25) У меня вот так в джсоне для VA

    «КлиентыТестирования»: [
    {
    «Имя»: «Этот клиент»,
    «ПутьКИнфобазе»: «/FC:/Bases/test»,
    «ДопПараметры»: «/DEBUG -http -attach /DEBUGGERURL»http://localhost:1560″»,
    «ТипКлиента»: «Тонкий»,
    «ИмяКомпьютера»: «localhost»,
    «ПортЗапускаТестКлиента»: «1538»,
    «АктивизироватьСтроку»: «Истина»
    }
    ]
    

    Показать

    но первое время можно и вручную в тест-клиенте разрешить отладку и подключить из конфигуратора

    Reply
  28. stepan96

    (27) Антон, давай вот вообще для полного дебила (ну то есть для меня)

    1. Я запускаю конфигуратор, в нем в настроках ставлю запуск предприятия в режиме тест менеджера и запускаю

    2. Соответственно предприятие в режиме тест менеджера, а дальше?

    Я если отдельно запускаю тест-клиент, я в предметах отладки не вижу этот сеанс и не могу подключиться

    Reply
  29. Stepa86

    (28) 3. На вкладке «Клиенты тестирования» нажимаешь на подключить клиента тестирования.

    4. В открывшемся клиенте сервис — параметры — Отладка в текущем сеансе — Разрешена и вид отладки

    5. В конфигураторе Отладка — подключение. Если клиент не подключился, то сверху будут сеансы, если подключился, то в нижней таблице будут и сеанс от менеджера и сеанс от клиента

    Если запускать с указанием в доп параметрах «/DEBUG -http -attach /DEBUGGERURL»http://localhost:1560″», то эти шаги должны выполнится сами, но иногда отладка не подцепляется

    Reply
  30. stepan96

    (29) Теперь понял! Спасибо!

    Reply
  31. JohnyDeath

    (16)

    и есть более простые пути.

    Какие?

    Reply
  32. kuzyara

    (11) наш пайплайн

    Reply
  33. Soloist

    (19) Есть, например Booking практически не тестирует. Очень интересный подход изложен в статье https://bronevichok.ru/blog/2015/04/26/engineering-at-booking.com.html

    Reply
  34. Stepa86

    (33) Не увидел в статье, что они не пользуются статистическими анализаторами кода. Да, тестами не занимаются отдельно — это головная боль каждого конкретного разработчика, и они сами как могут тестируют. Но про использование/не использование стат.анализа ни слова.

    Reply
  35. Soloist

    (34) Да, не совсем корректный мой ответ. Просто из-за описанной сложности внедрения такого механизма сразу опускаются руки и ищутся альтернативные, или оправдывающие варианты. Для тестирования в некоторых случаях это можно придумать. А вот с остальным хочется такой конвейер, но сил не хватает на подъем всего этого. Ведь так много надо знать.

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

    Reply
  36. Ndochp

    Зачистка подзамочных ошибок делается скриптами (сканим все, потом выкидываем лишнее), или ключами запуска?

    У меня не дженкинс и пока не нужен EDT, стоит качать?

    Reply
  37. Stepa86

    (36) Замечания по объектам с замками вычищаются скриптом из джсонов вот тут https://github.com/Stepa86/jenkins-pipeline-1C-to-sonar/blob/master/Sonar/Jenkinsfile#L180

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *