Про управление качеством кода — Управление техническим долгом — Концепция Continuous Inspection и Управление качеством кода.
Использование сонара — Управляй качеством кода 1С с помощью SonarQube
Установка и настройка инфраструктуры
Установить SonarQube и плагины
Установить и настроить SonarScanner для дженкинса
Установить oscript и библиотеки
Создать репозиторий для дженкинсфайла
Указать параметры запуска конвейера
- Собирает ошибки с 3х анализаторов: АПК, EDT и BSL-LS и отправляет в Сонар.
- Используется единый дженкинсфайл для всех проектов. Если нужно улучшить конвейер — делается это в одном месте.
- Работает по выгрузке ГитКонвертора. А ГитКонвертор выгружает проект в формате EDT.
- Вырезает из списка ошибок все объекты на замке. Если конфигурация на поддержке и поменять только один модуль — будут показаны ошибки только по этому модулю.
- Переопределяет параметры ошибок. Можно понизить/повысить важность ошибок. И даже полностью пропустить.
- Параметры переопределения могут быть как едиными — лежать в репозитории рядом с дженкинсфайлом. Так и частными для каждого проекта.
- Можно вывести покрытие кода.
Разработчик помещает свои изменения доработки в хранилище. Через некоторое время получает уведомление о завершении проверок. Заходит в SonarQube и видит список замечаний по своему коду.
В это время внутри:
- ГитКонвертор получает все новые изменения и коммитит их в репозиторий.
- Вручную, по расписанию или по событию стартует конвейер. Первым шагом он получает и актуализирует дженкинсфайл.
- Инициализирует все нужные переменные, заполняет пустые параметры значениями по умолчанию и готовит каталоги. Выполняет оповещение о старте конвейера.
- Получает репозиторий с кодом в подкаталог “repo”.
- Выполняется выгрузка ошибок из АПК, EDT и BSL-LS в джсон-файлы.
- Джсон-файлы обрабатываются оскриптом — вырезаются файлы на поддержке, переопределяются данные ошибок.
- Если указана папка с файлами замеров, то они конвертируются в файл покрытия.
- По исходникам получается текущая версия конфигурации. Переопределяется джава. Собираются параметры для работы СонарСканера и запускается.
- После отработки сканера конвейер ставится на паузу и ждет ответа от сервера сонара. По ответу можно сломать сборку, если порог не пройден или просто сообщить статус проверки оповещением.
Установить ГитКонвертор
https://github.com/1C-Company/GitConverter
Он нужен для конвертации хранилища в гит-репозиторий. Когда SonarQube работает по гит-репозиторию — появляется информация о разработчике, который внес ошибку.
ГитКонвертор можно установить на тот же сервер, где будут располагаться и другие инструменты. Плюсы от совместного размещения — экономия на количестве серверов, все в одном месте, переиспользование инструментов. Из минусов — возможные конфликты за ресурсы, уменьшение надежности.
Установить SonarQube и плагины
Про установку хорошо написано в статье Управляй качеством кода 1С с помощью SonarQube
Сканер ставить не надо. Будет использоваться плагин дженкинса.
Комьюнити плагин для сонара доступен теперь и в маркете сонара.
Установить 1С:EDT
Если ГитКонвертор установлен на этом же сервере, то едт уже был установлен ранее. Второй раз можно не ставить.
Установить Дженкинс
Про установку хорошо написано в статье Переводим рутину ручного тестирования 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 и библиотеки
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.
В SCM — Git.
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_Id — ID Credentials для доступа к репозиторию.
rocket_channel — имя канала для отправки оповещений.
После указания всех параметров — Собрать.
Если упало на каком-то шаге. По логам определить и устранить проблему и еще раз нажать на “Собрать с параметрами”.
Если проверка АПК отработала и в конфигурации больше ничего не менялось, то для отладки и ускорения процесса можно перезапускать конвейер со снятой галкой ACC_check.
Из джобы можно перейти в проект сонара и посмотреть, что ошибки загружены.
Создание второго конвейера
Аналогично созданию конвейера нужно нажать на Создать Item, ввести имя, тыкнуть в Pipeline и внизу ввести имя существующего для копирования из него настроек.
В открывшемся окне джобы нужно поменять параметры на требуемые и запустить.
Расчет покрытия тестами
Адекватного способа рассчитать покрытие тестами в 1С на данный момент нет. Я костылю так:
Разворачиваю тестовую базу загрузкой из хранилища.
Захожу в конфигуратор. Из него запускаю менеджер тестирования под отладкой.
В менеджере тестирования подключаю тест-клиента под отладкой.
В конфигураторе включаю замеры.
Запускаю выполнение тестов.
Когда все тесты завершились, сохраняю все замеры в спец. папку, предварительно ее очистив. Эту спец. папку указываю в параметрах конвейера.
Лайк поставил, скрипты скачал!
Круто, Антон!
Плюсую!
Это вообще кто-нибудь использует? Ну вот по-честному, реально, хоть один живой пример известен?
(4) Мы в нашей компании используем именно этот инструментарий именно в этом виде.
(5) Ну это-то понятно. Сами для себя изобрели и сами мучаетесь. У вас что, миллиардный оборот, конфиги пилите уровня УХ, и сотни кодеров, что понадобились настолько адские ухищрения, как «конвейер», простихосспади, контроля кода? Его и у 1С-то нет)
(6) И с чего вы взяли, что мы мучаемся? И с чего вы взяли, что это настолько адские ухищрения? С чего вы взяли, что этого нет у самого 1С? Нравится писать говнокод, ну продолжайте писать, чо тут то токсичность выплескивать?
Да это просто праздник какой-то! (Карабас Барабас) Именины сердца!
(7) Да просто ни в одной компании я не видел даже просто аудита и контроля кода. Не то что автоматизации этого процесса. Ну то есть на практике не видел, на бумаге-то много чего было. Не окупается, и не работает толком, выглядит красиво и вкусно, а практического выхлопа ноль. А я много чего видел. В основном — жутковатого.
А что мучаетесь, так это очевидно, потому как нет технологии организации коллективной разработки, позволяющей эффективно, без тормозов и помех для процесса, это хотя бы мониторить. Продукт — полдела, нужна работающая концепция его применения и железобетонная воля руководства это применять, несмотря на порождаемые задержки и проблемы.
Вы на личности-то не переходите. Что есть говнокод — вопрос интересный, и не след полагать говнокодом всё, что не прошло некую верификацию. Насчёт 1С всё элементарно — я это знаю из первых рук, по крайней мере по состоянию на 2016 год. Да гляньте их поделки, сами поймёте)))
А что, качество запросов ваша система тоже проверяет? По заветам Рупасова?)
(9) Вам очень не повезло с работодателями.
Это используют. Не всегда в таком виде, иногда какие-то компоненты заменяют на другие.
После того, как втягиваешься — не понимаешь как это можно не использовать 🙂
Попробуйте потратить пару недель своего времени и разобраться. Сложно только по началу и от незнания процессов и инструментов.
(10) Процессы-то я знаю и теорию знаю. И время тратил, и разбирался. А вот раздолбайство и бардак таковы, что это просто нельзя использовать. Человеческий фактор и энтропия коллективных взаимодействий, искажения связей в больших системах итд — всё это сводит на нет любую красивую теорию. Это как эйджилы всякие использовать — натягивание совы на глобус.
Что касается «иногда какие-то компоненты» — через год попыток использования таких систем в 95% случаев всё сползает в прежний бардак, только «бухгалтерии прибавляется», как в том анекдоте. А дальше отдельно ритуальные телодвижения и отдельно грустная реальность.
(9) Мы используем code-review и SonarQube очень в этом помогает.
(9)
Возможно потому и не используют, что руками очень сложно-долго-дорого?
Очень круто!
(4) Используем, используем.
согласен с (9)
не буду отрицать, что кому-то подобный продукт полезен в качестве исключения, но то
это необходимо очень спорно.
даже если разобраться и использовать, все равно, я считаю, что выхлоп мал и есть более простые пути.
(16) Вhttps://infostart.ru/public/1096770/ я как раз писал кому это не надо, кому можно, а кому обязательно.
И очень интересно услышать про более простые пути в повышении качества кода, чем использование статических анализаторов. Про двойное чтение кода и просто писать без ошибок можно не рассказывать.
Удивляют меня те, кто выбрал профессию по автоматизации кому-то чего-то, но при этом против автоматизации своей деятельности
(16) А какие вы более простые пути используете?
(18) На смену удивлению приходит понимание бесполезности(иногда вредности) многих вещей когда опыт автоматизации велик.
будем философствовать с разрушителем легенд или вернемся к пиару вашей нетленки «без шуму и пыли»?
(19) мозги
(21) Эффект Да́ннинга — Крю́гера — метакогнитивное искажение, которое заключается в том, что люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации[1]. Это приводит к возникновению у них завышенных представлений о собственных способностях, в то время как действительно высококвалифицированные люди, наоборот, склонны занижать оценку своих способностей и страдать недостаточной уверенностью в своих силах, считая других более компетентными. Таким образом, менее компетентные люди в целом имеют более высокое мнение о собственных способностях, чем это свойственно людям компетентным (которые к тому же склонны предполагать, что окружающие оценивают их способности так же низко, как и они сами).
(21) Вот и поговорили. Код наверное сразу без ошибок и тех. долга пишется и в проде проблем не бывает)
(22) надеюсь вы это взяли из конспекта своих лекций.
в приличных вузах это излагают по предмету «инженерной психологии».
ну а по факту что?
невинное изложение субъективного мнения, идущего вразрез
хвалебного «одобрямс крута», вызывает у вас эмоциональные-мелочные потуги
закрасить собеседника в черные тона.
молодой человек, никто не умаляет вашего таланта и мощи нетленки, но
если вы не научитесь управлять эмоциями и видеть главное, то не все
хорошо будет «в датском королевстве».
смысл мною сказанного станет понятен спустя 10…20 лет, если
в то время хоть что-то будет иметь толику смысла.
Антон, а вот это можно поподробнее: «В менеджере тестирования подключаю тест-клиента под отладкой.» Тоже больной вопрос по расчету покрытия
(4) Мы сейчас разворачиваем у себя. И в продуктив выводим. И статический анализ и автотесты
(25) У меня вот так в джсоне для VA
Показать
но первое время можно и вручную в тест-клиенте разрешить отладку и подключить из конфигуратора
(27) Антон, давай вот вообще для полного дебила (ну то есть для меня)
1. Я запускаю конфигуратор, в нем в настроках ставлю запуск предприятия в режиме тест менеджера и запускаю
2. Соответственно предприятие в режиме тест менеджера, а дальше?
Я если отдельно запускаю тест-клиент, я в предметах отладки не вижу этот сеанс и не могу подключиться
(28) 3. На вкладке «Клиенты тестирования» нажимаешь на подключить клиента тестирования.
4. В открывшемся клиенте сервис — параметры — Отладка в текущем сеансе — Разрешена и вид отладки
5. В конфигураторе Отладка — подключение. Если клиент не подключился, то сверху будут сеансы, если подключился, то в нижней таблице будут и сеанс от менеджера и сеанс от клиента
Если запускать с указанием в доп параметрах «/DEBUG -http -attach /DEBUGGERURL»http://localhost:1560″», то эти шаги должны выполнится сами, но иногда отладка не подцепляется
(29) Теперь понял! Спасибо!
(16)
Какие?
(11) наш пайплайн
(19) Есть, например Booking практически не тестирует. Очень интересный подход изложен в статьеhttps://bronevichok.ru/blog/2015/04/26/engineering-at-booking.com.html
(33) Не увидел в статье, что они не пользуются статистическими анализаторами кода. Да, тестами не занимаются отдельно — это головная боль каждого конкретного разработчика, и они сами как могут тестируют. Но про использование/не использование стат.анализа ни слова.
(34) Да, не совсем корректный мой ответ. Просто из-за описанной сложности внедрения такого механизма сразу опускаются руки и ищутся альтернативные, или оправдывающие варианты. Для тестирования в некоторых случаях это можно придумать. А вот с остальным хочется такой конвейер, но сил не хватает на подъем всего этого. Ведь так много надо знать.
Механизм крутой. И я желаю сообществу oscript дальнейшего развития всего этого, чтобы снизить планку сложности вхождения в этот мир автоматизации.
Зачистка подзамочных ошибок делается скриптами (сканим все, потом выкидываем лишнее), или ключами запуска?
У меня не дженкинс и пока не нужен EDT, стоит качать?
(36) Замечания по объектам с замками вычищаются скриптом из джсонов вот тутhttps://github.com/Stepa86/jenkins-pipeline-1C-to-sonar/blob/master/Sonar/Jenkinsfile#L180
Внутри архива — скрипт по конвертации ошибок из EDT в джсон, понятный для плагина сонара, скрипт по вырезанию замечаний с замками и скрипт по получению покрытия. Если не понятно что это и зачем — лучше не качать