Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

SonarQube — analiza jakości kodu i wykrywanie błędów

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

Code review przez ludzi nie wyłapuje wszystkiego — SQL injection w obiekcie DAO, brakujące null-checke, zduplikowane bloki kodu kopiowane między modułami. SonarQube automatyzuje tę walidację, skanując każdy pull request i blokując merge, gdy jakość kodu nie spełnia zdefiniowanych progów. Ten artykuł pokazuje instalację SonarQube Community Edition przez Docker, konfigurację projektu, integrację z GitHub Actions i Jenkins oraz definiowanie własnych Quality Gates.

Instalacja SonarQube przez Docker Compose

SonarQube wymaga PostgreSQL — wbudowany H2 jest tylko do testów. Konfiguracja vm.max_map_count to wymóg Elasticsearch wbudowanego w SonarQube.

# Wymagane na hoście (Elasticsearch)
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf

# docker-compose.yml
version: "3.9"
services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    restart: unless-stopped
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar_pass
    ports:
      - "9000:9000"
    volumes:
      - sonar_data:/opt/sonarqube/data
      - sonar_extensions:/opt/sonarqube/extensions
      - sonar_logs:/opt/sonarqube/logs
    ulimits:
      nofile:
        soft: 131072
        hard: 131072

  db:
    image: postgres:15-alpine
    container_name: sonar-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar_pass
      POSTGRES_DB: sonar
    volumes:
      - sonar_db:/var/lib/postgresql/data

volumes:
  sonar_data:
  sonar_extensions:
  sonar_logs:
  sonar_db:

# docker compose up -d
# UI: http://twoj-ip:9000 (login: admin / admin — zmien od razu!)

Konfiguracja projektu — sonar-project.properties

Każdy projekt wymaga pliku sonar-project.properties w root repozytorium. Alternatywnie parametry można przekazać przez CLI (-Dsonar.projectKey=...). Poniższy przykład dla projektu PHP z testami PHPUnit i TypeScript.

# sonar-project.properties
sonar.projectKey=myproject
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.host.url=https://sonar.example.com

# Katalogi z kodem (przecinkowe)
sonar.sources=src,app
sonar.tests=tests,test

# Wyklucz pliki vendor i node_modules
sonar.exclusions=vendor/**,node_modules/**,*.min.js

# PHP — raport pokrycia (PHPUnit → Clover XML)
sonar.php.coverage.reportPaths=coverage/clover.xml

# JavaScript/TypeScript — LCOV
sonar.javascript.lcov.reportPaths=coverage/lcov.info

# Kodowanie
sonar.sourceEncoding=UTF-8

Integracja z GitHub Actions

SonarQube może analizować każdy PR i raportować wynik bezpośrednio w GitHub. Wymaga tokenu projektu SonarQube w GitHub Secrets oraz dekoracji PR (opcja w ustawieniach projektu SonarQube).

# .github/workflows/sonar.yml
name: SonarQube Analysis

on:
  push:
    branches: [ main, develop ]
  pull_request:
    types: [ opened, synchronize ]

jobs:
  sonar:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0   # Wazne! SonarQube potrzebuje pelnej historii git

      - name: Generate coverage report
        run: |
          composer install --prefer-dist
          ./vendor/bin/phpunit --coverage-clover coverage/clover.xml

      - name: SonarQube Scan
        uses: SonarSource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
          SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

      - name: SonarQube Quality Gate check
        uses: SonarSource/sonarqube-quality-gate-action@master
        timeout-minutes: 5
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

Integracja z Jenkins

# Jenkinsfile (Declarative Pipeline)
pipeline {
  agent any

  environment {
    SONAR_TOKEN = credentials('sonar-token')
  }

  stages {
    stage('Tests') {
      steps {
        sh './vendor/bin/phpunit --coverage-clover coverage/clover.xml'
      }
    }

    stage('SonarQube Analysis') {
      steps {
        withSonarQubeEnv('SonarQube') {
          sh '''
            sonar-scanner \
              -Dsonar.projectKey=myproject \
              -Dsonar.sources=src \
              -Dsonar.php.coverage.reportPaths=coverage/clover.xml
          '''
        }
      }
    }

    stage('Quality Gate') {
      steps {
        timeout(time: 5, unit: 'MINUTES') {
          waitForQualityGate abortPipeline: true
        }
      }
    }
  }
}

Quality Gates i profile reguł

Quality Gate to warunki, które musi spełnić analiza. Domyślny Sonar way sprawdza nowy kod (dodany w bieżącym PR/commicie). Możesz tworzyć własne Quality Gates dostosowane do projektu.

Metryka Domyślny próg (Sonar way) Przykład własnego progu
Coverage on new code ≥ 80% ≥ 70% (złagodzony)
Duplicated Lines on new code ≤ 3% ≤ 5%
New Security Vulnerabilities 0 (High/Critical) 0 (All severities)
New Bugs (Blocker/Critical) 0 0
Maintainability Rating A B (złagodzony)

Profile reguł (Quality Profiles) definiują zestaw reguł aktywnych dla danego języka. SonarQube ma wbudowane profile dla PHP, Java, JS/TS i innych. Możesz dziedziczyć z Sonar way i wyłączać reguły, które generują fałszywe alarmy w Twoim projekcie. Profile możesz przypisać do konkretnego projektu lub ustawić jako domyślny dla języka.

Najczęstsze pytania

Co to jest SonarQube i do czego służy? +
SonarQube to platforma do statycznej analizy kodu (SAST) — skanuje kod źródłowy i wykrywa błędy (bugs), podatności bezpieczeństwa (vulnerabilities), zapach kodu (code smells), duplikaty i brakujące testy. Obsługuje ponad 30 języków: Java, PHP, JavaScript/TypeScript, Python, C#, Go i inne. SonarQube Community Edition (dawniej Developer) jest darmowy i open-source.
Jakie są wymagania sprzętowe SonarQube? +
SonarQube Community wymaga minimum 2 GB RAM tylko dla procesu (zalecane 4+ GB), Java 17+, Elasticsearch (wbudowany) i bazy PostgreSQL. Nie działa na SQLite. Typowe małe wdrożenie to VPS z 4 GB RAM i 20 GB dysku SSD. JVM Elasticsearch jest najbardziej pamięciochłonną częścią — nie uruchamiaj SonarQube na VPS z 1 GB RAM.
Czym różni się SonarQube od SonarCloud? +
SonarCloud to SaaS hostowany przez SonarSource — zero infrastruktury, integracja w 5 minut z GitHub/GitLab/Bitbucket, bezpłatny dla projektów open-source. SonarQube Community to self-hosted — pełna kontrola nad danymi (RODO), działanie offline, integracja z prywatnym Gitea/GitLab. SonarCloud jest tańszy w eksploatacji (brak VPS), ale SonarQube daje więcej kontroli i nie wysyła kodu do zewnętrznego serwisu.
Co to jest Quality Gate w SonarQube? +
Quality Gate to zestaw warunków, które musi spełnić analiza kodu, aby oznaczona była jako PASSED. Domyślny Sonar Way sprawdza: Coverage na nowym kodzie ≥ 80%, Duplicated Lines ≤ 3%, zero nowych podatności High/Critical, zero nowych bugs blokujących. Jeśli Quality Gate FAILED, CI/CD pipeline może zostać zatrzymany — to mechanizm ochrony jakości.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.