А АThursday, 12 September 2024

Cканер кода SonarQube

Всем привет.

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

Сегодня будет представлен инструмент для повышения качества кода, выводящий этот процесс на новый уровень - SonarQube. Вы узнаете:

  • что такое SonarQube;
  • как установить этот инструмент на локальный компьютер;
  • как сканировать файлы проекта;
  • как провести анализ проекта в SonarQube.

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


Что такое SonarQube?

SonarQube - это платформа с открытым исходным кодом, разработанная SonarSource, для непрерывной оценки качества кода путем статического анализа.

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

Завершив сканирование кода, о чем будет рассказано далее, SonarQube формирует отчет, который можно посмотреть в GUI через браузер. Все обнаруженные проблемы представляют собой “интерактивные тикеты”, позволяющие писать к ним комментарии, делегировать их другим пользователям, открывать или закрывать и т. д.


К подробному описанию проблемы сразу же прилагается соответствующий код.



SonarQube также объясняет суть проблемы при нажатии на соответствующую ссылку “Why is this an issue?” .


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

SonarQube предоставляет систематизированный отчет о качестве кода, безопасности и общий Quality Gate Status, т. е. логическое значение, свидетельствующее о готовности приложения для отправки в продакшн. Если вы добавите так называемый Sonar-scan в конвейер, то отчет будет обновляться с каждым коммитом или пул реквестом. Кроме того, он поддерживает контроль версий, каждая из которых фиксирует конкретный коммит или слияние веток в проекте.

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

По моему мнению, именно в возможности совместной работы состоит самое существенное преимущество SonarQube перед такими инструментами, как ESLint, используя который, “разработчик решает проблему собственными силами”.

Установка SonarQube (открытая версия для сообщества)

Установка сервера SonarQube (приложение Java) не представляет сложности. Вы можете:

  • скачать ZIP-файл и распаковать его локально 
  • запустить SonarQube в Docker-контейнере.

Правда, я честно перед этим прошел все настройки полной установки сервера, но в конце концов сервер SonarQube так и не поднялся потому что не поднялся Elastic которому что-то там не предоставила Java. Я решил второй раз не бегать и использовать самый простой способ - запустить Docker-контейнер. Убедитесь, что Docker у вас уже локально установлен. Ok, тогда запускаем поледовательно:

sudo docker volume create --name sonarqube_data

sudo docker volume create --name sonarqube_logs

sudo docker volume create --name sonarqube_extensions

sudo docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest

sudo docker run -d --name sonarqube -p 9000:9000 -v sonarqube_data:/opt/sonarqube/data -v sonarqube_extensions:/opt/sonarqube/extensions -v sonarqube_logs:/opt/sonarqube/logs sonarqube

sudo docker container start sonarqube

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


Как только Docker выполнит поставленную задачу, установка завершена, и инструмент готов к использованию. В браузере откройте GUI, перейдя по ссылке http://192.168.1.71:9000. У вас будет свой IP-адрес.

Создание нового проекта особо описывать не буду так как шаги могут меняться в рамках очередной версии GUI SonarQube. Обычно вам следует авторизоваться с помощью предустановленных учетных данных (admin:admin) и создать новый проект. Назвние проекта вам будет как ключ, а токен для работы SonarQube вы можете сгенерировать позже.

Первое сканирование проекта

На этом этапе просканируем код с помощью такого инструмента CLI, как sonar-scanner. Сделать это можно разными способами, подробное описание которых предоставлено на соответствующей странице документации.

Мне также красиво хотелось выполнить сканировнаие через Docker, например:

sudo docker run --rm -v ${YOUR_CACHE_DIR}:/opt/sonar-scanner/.sonar/cache -v ${YOUR_REPO}:/usr/src -e SONAR_HOST_URL="http://${SONARQUBE_URL}" sonarsource/sonar-scanner-cli

Но не сложилось з запуском контейнера сканера, поєтому я предпочел скачать исполняемый файл для Linux. В корневом каталоге проекта создайте файл sonar-project.properties со следующим содержимым:

sonar.projectKey=My_Project_01

sonar.sources=components,pages,styles,typings

sonar.sourceEncoding=UTF-8

Первая строка кода содержит ключ, полученный при создании проекта SonarQube в GUI.

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

sudo ./sonar-scanner \

  -Dsonar.projectKey=My_Project_01 \

  -Dsonar.sources=. \

  -Dsonar.host.url=http://192.168.1.71:9000 \

  -Dsonar.token=sqp_7e02605cc38fc1438f4de88bc983f22ce27377b4

Работа сканера занимает до минуты в зависимости от количества файлов попадающих под сканирование (определяет строка sonar.sources), после чего в GUI в браузере вы сможете изучить отчет. Если проект содержит высоко качественный код, то результаты будут представлены в следующем виде:


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

При настройке и применении SonarQube также следует знать следующее:

Тестовое покрытие - SonarQube сообщит, если код не покрыт тестами, на что, надеюсь, вы и рассчитываете. Однако если вы не тестируете код, то в рамках определенных проектов эта деталь быстро начнет досаждать. Можно отключить вычисление покрытия кода для определенных файлов или каталогов, установив глобальное значение для параметра sonar.coverage.exclusions в файле sonar-project.properties или в GUI под Project Settings > General Settings > Analysis Scope. Значение **/*.* позволит отключить его полностью.

SonarLint - Если вы хотите сразу выявлять потенциальные проблемы в процессе написания кода (аналогично ESLint) и перед его отправкой, используйте инструмент SonarLint. Его можно настроить на взаимодействие с проектом в SonarQube для согласованного управления. Оба они гармонично сосуществуют друг с другом. SonarLint доступен для таких IDE, как Eclipse, IntelliJ и Visual Studio Code.

Токен проекта - Проверьте, чтобы конфиденциальные токены, аналогичные созданному для проекта в SonarQube, не являлись частью базы кода. Вообще, не следует отправлять конфиденциальные значения в репозитории.

Показатели качества - Именно на них основываются отчеты SonarQube. Это набор критериев, в соответствии с которыми выявляются проблемы при сканировании кода. Такие перечни показателей предустановлены для разных языков программирования, и SonarQube грамотно определяет, какой из них по умолчанию применить в проекте. В GUI можно изменить эти показатели в “Quality Profiles.”

Заключение

Как видите, проще простого настроить SonarQube и поэкспериментировать с ним. Без особого труда вы также разберетесь в принципах составления отчетов и в работе GUI. Так что нет ничего, что помешало бы вам начать его использовать. Вам доступна быстро настраиваемая открытая версия для сообщества, благодаря которой вы получаете высококачественный код. Этот инструмент отлично подходит для командного взаимодействия, поскольку позволяет всем участникам совместно работать над качеством кода в проектах. SonarQube можно интегрировать в конвейеры и веб-сайты, например GitHub, а GitLab поддерживает его по умолчанию.


No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное