
Як встановити 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
Створюємо файл конфігурації для сайту:
$ 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 побачите результати аналізу:
Далі справа за Вами - покрити код тестами, подивитися що за технічний борг, що за запахи - зробити рефакторинг і т.д.
Не бачу сенсу переказувати доки сонара, просто порекомендую уважно ознайомитися з ними, щоб використовувати цей інструмент максимально ефективно.
На цьому на сьогодні все. Успіхів!