Статьи

Сканирование SonarQube за 15 минут

Прошло уже много времени с тех пор, как я видел обновленное руководство по SonarQube здесь, на DZone, поэтому я подумал, что пойду через руководство по началу работы для вас. Я предполагаю, что вы работаете в одном из распространенных дистрибутивов Linux (большая часть этого учебника работает и для Windows, но есть некоторые незначительные изменения. Например, файл конфигурации в Windows имеет расширение .bat).

Если этот учебник слишком много работы, вы можете перейти к SonarCloud. SonarCloud — это онлайн-версия SonarQube и бесплатна для проектов с открытым исходным кодом.

Это не предназначено для углубленной оценки SonarQube. Вы можете сделать это для себя после того, как запустите его. В частности, в конце этой статьи я покажу всего несколько скриншотов простого сканирования. Они только намекают на богатство информации, особенно на детализацию, которую предоставляет графический интерфейс SonarQube.

Как примечание: я никоим образом не связан с SonarSource. Я просто хотел изучить функциональность SonarQube.

Шаг 1: Установите Docker

Загрузите Docker здесь, если вы его еще не используете, и установите его. По моему мнению, контейнеры Docker — лучший способ протестировать новые инструменты с минимальными усилиями.

Шаг 2. Установите сообщество SonarQube и запустите его.

Вы можете сделать это, выполнив следующие 2 команды:

docker pull sonarqube 
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

Теперь вы можете перейти по адресу http: // localhost: 9000 и посмотреть на веб-интерфейс SonarQube.

Легко, правда?

Войти с помощью: admin / admin. Обратите внимание на предупреждение красным. Этот образ Docker опирается на встроенную базу данных H2, которая не будет обрабатывать производственную среду. Если вы хотите запустить более производственный контейнер и понимаете, как работает docker-compose, вы можете найти рецепт добавления PostgreSQL в качестве хранилища данных здесь.

Когда вы загрузите веб-страницу SonarQube, вы увидите экран учебника. Идите вперед и сгенерируйте токен. Я назвал мой «my-stinky-php-files». Очень оригинально. Скопируйте этот токен в буфер обмена. Мы будем использовать это позже.

Большинство всех использует SonarQube для анализа файлов Java. Это слишком просто. Для обучения давайте выберем другой язык. Выберите «Другое». Выберите свою ОС. В моем случае я использую Debian Stretch, поэтому я выберу «Linux». Мой уникальный ключ проекта будет «my-stinky-php-files». У меня их слишком много. Так как мы не запускаем этот экземпляр в конвейере, и так как мы будем сканировать некоторый код PHP, мы загрузим сканер CLI. Разархивируйте его в папку: /opt/sonar-scanner-3.1.0.1141-linux.

Вы можете проверить плагины во время загрузки необходимого программного обеспечения для сопутствующего сканера. Обратите внимание, что вы можете увидеть ссылки на SonarQube Runner. Runner — это просто старое название для сканера .

С этого момента мы будем работать в среде Linux. Сканеры доступны для 64-битных версий Windows, MacOS, Linux и Any *. Кроме того, вы можете загрузить и установить несколько сканеров SonarQube в зависимости от того, какой язык (языки) вы хотите проанализировать или как вы хотите запускать экземпляры сканера. К ним относятся сканеры для MSBuild, Maven, Gradle, Ant и Jenkins.

Теперь перейдите в каталог sonar-scanner / conf. Для меня это путь «/opt/sonar-scanner-3.1.0.1141-linux/conf». Там не так много для настройки. Если вы не изменили порты прослушивания Docker, вам нужно только удалить знак # в начале строки sonar.host.url.

 #----- Default SonarQube server
#sonar.host.://localhost:9000 

Затем добавьте каталог Sonar Scanner / bin в свой путь:

 export \ PATH=$PATH:/opt/sonar-scanner-3.1.0.1141-linux/bin 

Если вы хотите добавить этот PATH навсегда, внесите изменения в файл ~ / .profile. Если вы этого не сделаете, вы позже столкнетесь с проблемами — проблемами в том смысле, что оболочка не сможет найти сканер-сканер. Вы можете проверить, что все прошло правильно, открыв новую оболочку (или загрузив свой .profile, если вы выбрали этот маршрут) и выполнив команду  sonar-scanner -h (в Windows это команда   sonar-scanner.bat -h). Вы увидите некоторые варианты использования.

И последнее, на что следует обратить внимание при запуске сообщества SonarQube Насколько я знаю, нет возможности создавать отчеты в формате PDF или XML. Вы должны заплатить за эту функциональность.

Шаг 3: Начнем сканирование

Посмотрим, насколько уродливым ** мой код на самом деле.

Когда вы используете SonarQube, к сожалению, вы просто не можете нажать кнопку и отправить ее, чтобы счастливо сканировать любое программное обеспечение, которое вы оцениваете. Вам нужно немного поработать с командной строкой, чтобы все заработало. К счастью, SonarQube предоставляет стандартную платформу сканирования, которая поможет вам начать работу. Тем не менее, для большинства ваших конкретных проектов вы, скорее всего, настроите эту структуру, чтобы соответствовать проекту. Например, вы можете ввести другие каталоги, указать определенный набор двоичных файлов Java и т. Д.

В этом уроке мы рассмотрим простой код, который предоставляет нам Sonar.

/opt/sonar-scanner/bin/sonar-scanner \

  -Dsonar.projectKey= my-stinky-php-files \

  -Dsonar.sources=. \

  -Dsonar.host.://localhost:9000 \

  -Dsonar.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Давайте разберем эту команду.

Во-первых, для Linux-системы команда «\» (space-backslash) указывает, что команда продолжается в несколько строк.

 /opt/sonar-scanner/bin/sonar-scanner \  инициирует процесс сканирования (если его нет в переменной $ PATH, вы получите сообщение о том, что файл не найден)

 -Dsonar.-stinky-php-files  это токен, который описывает набор файлов, которые мы сканируем. Это имя должно быть уникальным в данном экземпляре SonarQube

 -Dsonar.sources=. \  расположение на диске файлов, которые мы будем сканировать. Если вы не сканируете из папки, содержащей ваши файлы, укажите абсолютный путь к этому местоположению. Замените «\» на «/» в Windows.

 -Dsonar.host.://localhost:9000 \  это URI и порт нашего веб-интерфейса SonarQube

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

Если вы намереваетесь запустить сканирование в другом проекте, или вам пришлось перезагрузить свой экземпляр докера SonarQube, или если вы просто забыли свой токен, перейдите в веб-интерфейс: нажмите на вкладку администрирования . Оттуда щелкните раскрывающийся список безопасности и выберите « Пользователи». Если это ваша первая установка, то вы увидите пользователя с правами администратора. Справа от легенды групп вы увидите легенду токена . Нажмите на это, чтобы сгенерировать новый токен.

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

Шаг 4: Теперь для Pretty Stuff

Если вы проделали это до сих пор, вы увидите, что какой-то текст проходит мимо, и, в зависимости от количества сканируемых файлов, сканирование может занять от нескольких секунд до нескольких минут. Если по каким — то причинам вы не можете получить на веб — интерфейс, убедитесь , что контейнер SonarQube работает путем ввода:   docker ps .

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

CONTAINER ID     IMAGE   COMMAND    CREATED   STATUS    PORTS            NAMES
576c9e4cb65d sonarqube " ./bin/run.sh" 10 hours ago Up 10 hours 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp sonarqube

Когда вы видите «АНАЛИЗ УСПЕШНЫЙ», вы можете вернуться к веб-интерфейсу.

Это основной экран результатов SonarQube. В этом случае я провел анализ двух разных пакетов кода — Java / XML и PHP / JavaScript. Так как код является частным, я отредактировал имена в этом и следующих скриншотах. На этом домашнем экране не так много деталей, поэтому давайте взглянем на некоторые другие экраны, которые показывают более действенные детали.

Визуализация обзора кода. Чем ближе цвет пузыря к красному, тем серьезнее ошибки. Размер пузыря указывает на объем ошибки, а вертикальная позиция каждого пузыря отражает предполагаемое время устранения ошибок. Маленькие зеленые пузырьки на нижнем краю лучше всего подходят. Хмммм … Не очень хорошо для этого кода.

На этой диаграмме показано высокоуровневое представление определения «ремонтопригодности» SonarSource. В настоящее время SonarQube измеряет девять основных показателей. Определения для этих метрик можно найти здесь.

Размер и цвет пузырьков являются отражением долгосрочных рисков, связанных с запахом кода. Чем ближе цвет пузыря к красному, тем выше соотношение технического долга. Размер пузырька указывает на объем запаха кода, а вертикальное положение каждого пузырька отражает приблизительное время устранения запахов кода. Маленькие зеленые пузырьки на нижнем краю лучше всего подходят. Эта диаграмма объясняет, почему прилагательное «вонючий» подходит для этого кода.

Этот «Обзор надежности» является основным показателем качества ворот. Это общая мера безопасности, а также того, действительно ли измеренный код работает так, как того хочет разработчик.

SonarSource определяет ворота качества как средство обеспечения политики качества в ваших усилиях по кодированию.

Это ответ на один вопрос: могу ли я доставить свой проект в производство сегодня или нет?

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

Шаг 5: Вывод

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

Пожалуйста, дайте мне знать, если вы нашли этот быстрый старт полезным. Если я допустил какие-либо ошибки или не был понятен, пожалуйста, дайте мне знать.

** К сожалению, это производственный код.