
Как установить SonarQube на Ubuntu 18.04
26.01.2020 23:16 | Другое
Качество кода - основа основ. Отсутствие конроля качества приводит к загниванию кода, увеличению стоимости как самой разработки, так и поддержки. Один из инструментов, который может существенно упростить задачу контроля - SonarQube. Сегодня рассмотрим установку сонара на Ubuntu 18.04.
Подготовка
Для использования SonarQube нам понадобятся Java и PostgreSQL. Если они не установлены на Вашем компьютере - ставим. Java:
$ sudo apt update && apt-get upgrade
$ sudo apt install default-jre
// проверяем всё ли в порядке
$ java --version
// должны увидеть что-то наподобие этого (версия может оличаться)
openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Ubuntu-0ubuntu1.118.04, mixed mode, sharing)
PostgreSQL:
$ sudo apt install postgresql postgresql-contrib
// проверяем
$ psql --version
// должны увидеть (возможно, версия будет другой)
psql (PostgreSQL) 12.1 (Ubuntu 12.1-1.pgdg18.04+1)
Создадим в postgres пользователя с именем sonarqube, а также одноименную базу данных:
// переключаемся на пользователя postgres
$ sudo su postgres
// создаём нового пользователя
$ createuser sonarqube
// заходим в shell postgresql
$ psql
// изменяем пароль (можете использовать любой другой)
ALTER USER sonarqube WITH ENCRYPTED password 'sonarqube';
// создаём базу данных
CREATE DATABASE sonarqube OWNER sonarqube;
// выходим з postgresql
\q
Чтобы вернуться к "своему" пользователю, воспользуйтесь комбинацией клавиш Ctrl+D
.
SonarQube является Java-приложением, которое будет работать как сервис. Мы не хотим запускать сервисы от имени root, а потому создадим другого системного юзера специально для запуска сонара:
$ sudo adduser --system --no-create-home --group --disabled-login sonarqube
и создадим директории для сонара и сканера:
$ sudo mkdir /opt/sonarqube
$ sudo mkdir /opt/sonarscanner
Установка SonarQube
Скачиваем SonarQube Community Edition. По умолчанию архив с инсталяцией будет сохранён в директорию ~/Downloads
, перенесём его с созданную ранее папку:
$ sudo mv sonarqube-8.1.0.31237.zip /opt/sonarqube
*в вашем случае версия сонара может отличаться.
Перейдём в соответствующую директорию, распакуем и удалим архив:
$ cd /opt/sonarqube
$ sudo unzip sonarqube-8.1.0.31237.zip
$ sudo rm sonarqube-8.1.0.31237.zip
Изменим права на папку:
$ sudo chown -R sonarqube:sonarqube /opt/sonarqube
Изменим конфиги сонара, для чего откроем файл:
$ sudo nano /opt/sonarqube/sonarqube-8.1.0.31237/conf/sonar.properties
и поменяем следующие настройки:
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
sonar.web.javaAdditionalOpts=-server
sonar.web.host=127.0.0.1
Сохраняем и закрываем.
Конфигурируем SonarQube для запуска как сервиса, т.е. он будет автоматически запускаться при ребуте системы. Создаём файл сервиса:
$ sudo nano /etc/systemd/system/sonarqube.service
и вставляем в этот файл следующий контент:
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/sonarqube/sonarqube-8.1.0.31237/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-8.1.0.31237/bin/linux-x86-64/sonar.sh stop
User=sonarqube
Group=sonarqube
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
сохраняем и закрываем.
Запускаем и проверяем статус:
$ sudo service sonarqube start
$ service sonarqube status
Конфигурируем SonarQube дла автоматического запуска при загрузке системы:
$ sudo systemctl enable sonarqube
После предыдущего шага сонару понадобится некоторое время для полной инифиализации. Проверить, стартовал ли сервер можно командой:
$ curl http://127.0.0.1:9000
Решение проблем с запуском
Если на предыдущем шаге получаете ошибку:
curl: (7) Failed to connect to 127.0.0.1 port 9000: Connection refused
посмотрите логи сонара:
$ less /opt/sonarqube/sonarqube-8.1.0.31237/logs/sonar.log
// или только последние строки
$ tail -f /opt/sonarqube/sonarqube-8.1.0.31237/logs/sonar.log
Вполне вероятно, что увидите следующее:
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Эта проблема описана в доках (посмотрите раздел Platform notes -> Linux
). Убедитесь, чо в секции Service файла /etc/systemd/system/sonarqube.service
есть следующие параметры:
LimitNOFILE=65536
LimitNPROC=4096
Также откройте файл /etc/sysctl.conf
и добавьте следующую строку:
vm.max_map_count=262144
Сохранитесь, закройте файл и затем запустите:
$ sudo sysctl -p
$ sudo service sonarqube restart
Затем добавим хост, открыв файл:
$ sudo nano /etc/hosts
и добавляем:
127.0.0.1 sonarqube.local
Cоздаём файл конфига для сайта:
$ sudo nano /etc/nginx/sites-enabled/sonarqube
и вставляем следующее содержимое:
server {
listen 80;
server_name sonarqube.local;
location / {
proxy_pass http://127.0.0.1:9000;
}
}
Убедимся, что нет ошибки и перезапускаем nginx:
$ sudo nginx -t
$ sudo service nginx restart
Теперь SonarQube должен быть доступен по адресу sonarqube.local
!
SonarQube Scanner
Качаем sonarscanner (для cli) отсюда.
Переносим архив в нужную директорию:
$ sudo mv ~/Downloads/sonar-scanner-cli-4.2.0.1873-linux.zip /opt/sonarscanner/
Переходим в директорию сканера, разархивируем и удалим архив:
$ sudo unzip sonar-scanner-cli-4.2.0.1873-linux.zip
$ sudo rm sonar-scanner-cli-4.2.0.1873-linux.zip
Изменим настройки хоста. Открываем
$ sudo nano /opt/sonarscanner/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
и устанавливаем значение url:
sonar.host.url=http://sonarqube.local
Если sonar-scanner неисполняемый, то надо изменить права:
$ sudo chmod +x sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner
Добавим символическую ссылку, чтобы вызывать сканер без полного пути:
$ sudo ln -s /opt/sonarscanner/sonar-scanner-4.2.0.1873-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner
Сканер готов к работе!
Как использовать в проектах
В корне проекта создайте файл sonar-project.properties
и добавьте в него следующее содержимое (пример для laravel):
# must be unique in a given SonarQube instance
sonar.projectKey=some-key:my-project
# --- optional properties ---
# defaults to project key
sonar.projectName=My Project
# defaults to 'not provided'
sonar.projectVersion=1.0
# Language
# We've commented this out, because we want to analyse both PHP and Javascript
#sonar.language=php
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=app,database,resources,routes
# Here, you can exclude all the directories that you don't want to analyse.
sonar.exclusions=bootstrap/**,config/**,node_modules/**,public/**,storage/**,tests/**,vendor/**,
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.tests=tests
*вместо some-key
и My Project
используйте любые свои значения
Откройте sonarqube.local
и добавьте свой проект. После добавления названия и ключа, сонар сгенерирует команду подобную этой:
sonar-scanner -Dsonar.projectKey=lajor -Dsonar.sources=. -Dsonar.host.url=http://sonarqube.local -Dsonar.login=bb99586f4f3217335d8d0c5d48abde5ca2185588
Скопируйте её и запустите из корня проекта в теримнале. Вуаля! На странице проекта в sonarqube увидите результаты анализа:
Далее дело за Вами - покрыть код тестами, посмотреть что за технический долг, что за запахи - сделать рефакторинг и т.д.
Не вижу смысла пересказывать доки сонара, просто порекомендую внимательно ознакомиться с ними, чтобы использовать этот инструмент максимально эффективно.
На этом на сегодня всё. Успехов!