Как установить SonarQube на Ubuntu 18.04

Как установить SonarQube на Ubuntu 18.04

Качество кода - основа основ. Отсутствие конроля качества приводит к загниванию кода, увеличению стоимости как самой разработки, так и поддержки. Один из инструментов, который может существенно упростить задачу контроля - 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 увидите результаты анализа:

Sonar Results

 

Далее дело за Вами - покрыть код тестами, посмотреть что за технический долг, что за запахи - сделать рефакторинг и т.д.

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

На этом на сегодня всё. Успехов!