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, kodlardan gelen kötü kokuları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.