SonarQube ile Statik Kod Analizi

SonarQube ile Statik Kod Analizi

Mükemmel bir dünyada başlamak için sorunsuz bir kod yazardık. Kesinlikle mükemmel bir dünyada yaşamıyoruz ve hatasız kod bir hayaldir, ancak kodumuzu analiz ediyorsak ve ortaya çıkan sorunları düzeltmek için emek harcıyorsak, daha etkili kod yazmaya devam edebiliriz. Yazımda bu bağlamda karşımıza çıkan SonarQube aracını anlatmak istedim.

SonarQube, Java, C #, JavaScript, TypeScript, C / C ++, COBOL ve daha fazlası dahil olmak üzere 25+ programlama dilinde hataların, kod kokularının ve güvenlik açıklarının tespit edilmesi için statik kod analiziyle otomatik incelemeler yapan açık kaynak platformdur. Statik kod analizi elle de yapılabilmesine rağmen, büyük miktarda kodla uğraşırken çok zaman alabilir. Birbirlerinin çalışmalarını gözden geçirmek için büyük bir geliştirici ekibine erişiminiz olsa bile, sonuçlar hata ve yanlış pozitiflere karşı çok daha eğilimli olacaktır.

SonarQube bu aşamada ekiplere zaman kazandırmasıyla beraber, daha güvenilir analizler sunuyor. Kaynak kod analizi tamamlandığında, yazılımın tüm güvenlik kusurlarını, kod stili ihlallerini, bağımlılık grafiklerini, blokların, işlevlerin, sınıfların, dosyaların karmaşıklığının yanı sıra kontrol ve veri akışını da analiz olarak detaylı bir şekilde gösteriyor. Jenkins, Azure DevOps, TeamCity, Bamboo gibi sürekli entegrasyon motorlarıyla da kolayca entegre olabiliyor.

 

SonarQube kurulumu

Kurulum için 3 GB veya daha fazla belleğe sahip bir Ubuntu 18.04 sunucu gerekiyor.

 

1. Yüklemeye Hazırlık

SonarQube hizmet olarak çalışacak bir Java uygulaması olduğundan ve hizmetleri root kullanıcı olarak çalıştırmak istemediğiniz için , özellikle SonarQube hizmetlerini çalıştırmak için başka bir sistem kullanıcısı oluşturuyoruz.

sudo adduser --system --no-create-home --group --disabled-login sonarqube

Ardından kurulacağı dizini oluşturuyoruz.

sudo mkdir /opt/sonarqube

SonarQube sürümleri sıkıştırılmış bir biçimde paketlenir, bu yüzden unzip paketini yüklüyoruz.

sudo apt-get install unzip

Sistemimizde Java kurulu değilse Java yüklüyoruz.

sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt install openjdk-8-jdk
java -version

Son olarak bir de PostgreSQL yüklememiz gerekiyor.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
sudo apt update
sudo apt install postgresql postgresql-contrib

PostgreSQL kurulumunu yaptıktan sonra SonarQube için veritabanı ve kullanıcı oluşturuyoruz.

su - postgres
createuser sonar
psql
ALTER USER sonarqube WITH ENCRYPTED PASSWORD 'db_password';
CREATE DATABASE sonarqube OWNER sonarqube;
\q

2. İndirme ve Yükleme

SonarQube indirme sayfasından bağlantıyı aldıktan sonra dosyayı indiriyoruz.

cd /opt/sonarqube
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip
sudo unzip sonarqube-7.5.zip
sudo rm sonarqube-7.5.zip

Son olarak, SonarQube kullanıcısının bu dosyalara sahip olması ve bu dizindeki dosyaları okuyabilmesi ve yazabilmesi için izinleri güncelliyoruz.

sudo chown -R sonarqube:sonarqube /opt/sonarqube

3. SonarQube Sunucusunu Yapılandırma

Yapılandırma dosyasında birkaç şeyi düzenlemeniz gerekir. Öncelikle sunucunun veritabanı bağlantısı için kullanacağı kullanıcı adını ve parolayı belirtmemiz gerekir. Ayrıca SonarQube’a PostgreSQL’i arka uç veritabanımız için kullanmasını söylemeliyiz. SonarQube’a sunucu modunda çalışmasını söyleyeceğiz, bu da performans artışı sağlayacak. Ayrıca SonarQube’a yalnızca yerel ağ adresini dinlemesini söyleyeceğiz, çünkü reverse (ters) proxy kullanacağız.

sudo vim sonarqube-7.5/conf/sonar.properties

## Edit file
sonar.jdbc.username=sonarqube
sonar.jdbc.password=db_password
sonar.web.javaAdditionalOpts=-server
sonar.web.host=127.0.0.1
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube

Sonra, kullanacağı systemd bir başlatmanın ardından otomatik olarak başlayacaktır, böylece bir hizmet olarak çalışacak şekilde aracımızı yapılandırmak için bir servis yaratıyoruz.

sudo vim /etc/systemd/system/sonarqube.service

## Edit file

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

ExecStart=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh stop

User=sonarqube
Group=sonarqube
Restart=always

[Install]
WantedBy=multi-user.target

Sonrasında servisi başlatmamız gerekiyor.

sudo service sonarqube 
start service sonarqube 
status sudo systemctl enable sonarqube

Bu noktada, sunucunun tamamen başlatılması birkaç dakika sürecektir. Sunucunun HTTP portunu sorgulayarak başlatılıp başlatılmadığını kontrol edebilirsiniz.

curl http://127.0.0.1:9000

4. Reverse Proxy Yapılandırma

Öncelikle nginx kurulu değilse kurulumunu yapmamız gerekiyor.

sudo apt install nginx

Ardından nginx dosyasını yapılandırıyoruz.

sudo vim /etc/nginx/sites-available/sonarqube
###
server {
listen 80;
server_name sonarqube.example.com;

location / {
proxy_pass http://127.0.0.1:9000;
}
}

Yapılandırma dosyasında hata olup olmadığını kontrol ediyoruz.

sudo nginx -t

Hata almıyorsak nginx’i yeniden başlatıyoruz.

sudo service nginx restart

Tarayıcıda http://sonarqube.example.com adresini test ediyoruz. Kullanıcı adı ve parola öntanımlı olarak admin /admin şeklinde geliyor.

 

5. Kod Tarayıcıyı Ayarlama

Öncelikle scanner için dosya oluşturup, indiriyoruz.

sudo mkdir /opt/sonarscanner
cd /opt/sonarscanner
sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip
sudo unzip sonar-scanner-cli-3.2.0.1227-linux.zip
sudo rm sonar-scanner-cli-3.2.0.1227-linux.zip

Sonrasında sonar yapılandırma dosyasında düzenlemeler yapmamız gerekiyor.

sudo vim sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties

#----- Default SonarQube server
sonar.host.url=http://sonarqube.example.com

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
sonar.web.host=0.0.0.0
sonar.projectKey=project-key:running_project_name
sonar.projectName=Hello World
sonar.projectVersion=1.0
sonar.sources=running_project_path

Statik kod analizi yapmak istediğimiz projenin olduğu dizinde aşağıdaki satırı çalıştırmamız gerekiyor.

sonar-scanner -D sonar.login=your_token_here

Analiz bittiğinde SonarQube dashboard üzerinde verileri görebilirsiniz.

Neslişah Gamze Hayırlıoğlu
Yorum Yok

Yorum Yaz

Yorum
İsim
E-Posta
Website