Як встановити 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

 

Створюємо файл конфігурації для сайту:

$ 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

 

Далі справа за Вами - покрити код тестами, подивитися що за технічний борг, що за запахи - зробити рефакторинг і т.д.

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

На цьому на сьогодні все. Успіхів!