Článek přečtěte do 5 min.

Cílem tohoto projektu bylo vytvořit robustní a integrované prostředí pro nepřetržité sledování kvality kódu a metrik výkonu. K dosažení tohoto cíle byla na AlmaLinux nainstalována SonarQube, open-source platforma pro nepřetržitou kontrolu kvality kódu. Po nastavení byl SonarQube hladce integrován se Zabbix, open-source distribuovaným monitorovacím řešením podnikové třídy, aby bylo možné dynamické monitorování různých projektů. Cílem této integrace bylo poskytnout týmu v Zen Networks přehled klíčových metrik, jako jsou chyby, zranitelnosti a pachy kódu pro probíhající projekty v reálném čase.

Instalace SonarQube na AlmaLinux

1. Předinstalační požadavky:

  • Provedli podrobnou kontrolu, aby zajistili, že server splňuje minimální hardwarové požadavky pro efektivní provoz SonarQube.
  • Byly nainstalovány a nakonfigurovány nezbytné závislosti, včetně sady Java Development Kit (JDK) a podporovaného databázového systému.

2. Kroky instalace SonarQube:

  • Server SonarQube byl stažen z oficiálních stránek.
  • Podle osvědčených postupů byl vytvořen vyhrazený uživatelský účet SonarQube pro provozování služby.
  • Služba SonarQube byla nakonfigurována tak, aby se spouštěla ​​při spouštění, čímž byla zajištěna vysoká dostupnost.

3. Konfigurace:

  • Soubor sonar.properties byl pečlivě upraven tak, aby se SonarQube připojil k vybrané databázi a optimalizoval se výkon a zabezpečení.
  • Nastavení sítě bylo upraveno tak, aby umožnilo SonarQube běžet na požadovaném portu (9000) a bylo dostupné z pracovních stanic vývojáře.
  • Byly nainstalovány další pluginy pro rozšíření funkčnosti SonarQube a pro podporu jazyků používaných v našich projektech.

Nastavení projektu v SonarQube

Po úspěšné instalaci a konfiguraci SonarQube na serveru AlmaLinux další fáze zahrnovala nastavení projektů pro analýzu kódu. Bylo vytvořeno pět testovacích projektů, které demonstrovaly schopnosti SonarQube a sloužily jako základ pro hodnocení kvality.

Tvorba testovacích projektů:

  • Vytvořili sérii pěti odlišných projektů, jmenovitě app-java, backup-code, erp-app, test-app a web-app, každý nakonfigurovaný v SonarQube.
  • Projekty byly nakonfigurovány tak, aby posuzovaly různé aspekty kvality kódu, včetně spolehlivosti, zabezpečení a udržovatelnosti.
  • Umožnili automatické skenování kódu, abychom identifikovali chyby, zranitelnosti a pachy kódu v každém projektu.

Analýza a metriky:

  • Každý projekt prošel důkladnou analýzou s výsledky naznačujícími různé úrovně chyb a zranitelností spolu s pachy kódu.
  • Metriky, jako je pokrytí a duplikace, byly nakonfigurovány tak, aby byly monitorovány, ačkoli počáteční testovací běhy odrážely 0,0% pokrytí, což naznačuje rozsah pro další integraci CI/CD.
  • Projekt testovací aplikace zejména ukázal značný počet chyb a značný počet pachů kódu, což zvýraznilo oblasti pro okamžité zlepšení.

Stav brány kvality:

  • Všechny projekty byly nastaveny podle předem definovaných kvalitativních bran, aby bylo zajištěno, že splňují standardy organizace pro kvalitu kódu.
  • Navzdory tomu, že některé projekty měly chyby a zápach kódu, všechny projekty prošly branami kvality, což naznačuje, že byly identifikovány nekritické problémy, které by se měly průběžně řešit.

Integrace se Zabbixem

Integrace SonarQube se Zabbixem byla zaměřena na využití robustních monitorovacích schopností Zabbix k bedlivému sledování zdravotního stavu projektů z hlediska kvality kódu.

Vytvoření šablony Zabbix:

Tým vytvořil šablonu Zabbix věnovanou propojení s rozhraním SonarQube API a navrženou tak, aby automaticky objevovala projekty SonarQube a jejich klíčové metriky. Pro integraci Zabbix s SonarQube API a umožnění automatického zjišťování projektů a klíčových metrik byla použita následující volání a konfigurace API:

Ověření:

  • Příklad volání API k ověření:
curl -u token: "http://sonarqube_ip/api/authentication/validate"

Objevování projektu:

  • Příklad volání API pro seznam projektů:
curl -u token: "http://sonarqube_ip/api/projects/search"

Načítání metrik:

  • Příklad volání API pro získání metrik projektu:
curl -u token: "http://sonarqube_ip/api/measures/component?component=project_key&metricKeys=bugs,vulnerabilities,code_smells"

Konfigurace šablony Zabbix:

  • Byla vytvořena přizpůsobená šablona Zabbix pro rozhraní s rozhraním SonarQube API. Šablona obsahuje pravidla zjišťování, prototypy položek a kroky předběžného zpracování pro extrakci relevantních metrik.
    • Příklad pravidla zjišťování a prototypu položky v šabloně Zabbix:
sonarqube_project_discovery
HTTP_AGENT
sonarqube.project.discovery
1h
3d

{#PROJECTNAME}: Metrics
HTTP_AGENT
sonarqube.project.metrics['{#PROJECTNAME}']
5m
{$PROTO}://{HOST.IP}:{$PORT}/api/measures/component?
component={#PROJECTNAME}&metricKeys=bugs,vulnerabilities,
code_smells,ncloc,complexity,violations
Authorization Basic YOUR_BASE64_ENCODED_TOKEN

Kromě toho tým nastavil položky v rámci Zabbix, aby sledoval počet chyb, zranitelností a pachů kódu, jak je uvedeno na řídicím panelu SonarQube. Také nakonfigurovali spouštěče v rámci Zabbix, aby upozornily tým, když bylo dosaženo určitých prahových hodnot, což usnadňuje rychlou akci k udržení kvality kódu.

Automatizace a dynamické monitorování:

Umožnili dynamické zjišťování projektů v SonarQube, což umožnilo automaticky detekovat a monitorovat nové projekty bez ručního zásahu. Aby umožnili dynamické zjišťování projektů v SonarQube a zajistili, že budou automaticky detekovány a monitorovány Zabbixem, implementovali následující konfigurace:

  • Konfigurace SonarQube:
    • Webhooky: Nakonfigurované webhooky SonarQube, které upozorní Zabbix vždy, když je vytvořen nebo aktualizován nový projekt.
    • Značky projektu: Používalo se konzistentní značkování pro projekty SonarQube pro usnadnění snadné identifikace v Zabbix.
  • Konfigurace Zabbix:
    • Pravidla zjišťování: Vytvořená pravidla zjišťování v Zabbix, která se pravidelně dotazují na SonarQube API, aby zkontrolovali nové projekty.
    • Low-Level Discovery (LLD): Implementováno LLD v Zabbix pro automatizaci vytváření položek, spouštěčů a grafů pro každý nový projekt SonarQube.
    • Zavedli také datový tok mezi SonarQube a Zabbix, aby zajistili, že se aktualizace v metrikách kvality kódu projeví v reálném čase na řídicím panelu Zabbix.

Ověření a testování:

  • Provedli řadu testů, aby se ujistili, že integrace funguje správně.
  • Tým ověřil, že metriky hlášené v SonarQube odpovídají metrikám zobrazeným v Zabbix, což potvrzuje přesnost a spolehlivost nastavení monitorování.

Díky aktivnímu sledování projektů a metrik se pozornost přesunula na efektivní prezentaci dat. V Zabbix byl vytvořen vlastní řídicí panel, který agreguje a zobrazuje informace shromážděné ze SonarQube.

Design a rozvržení:

Vytvořili uživatelsky přívětivý dashboard, který poskytuje rychlý přehled o stavu všech projektů.

  • Řídicí panel byl uspořádán tak, aby na první pohled zobrazoval metriky, jako je počet chyb, zranitelnosti, pachy kódu a stav brány kvality každého projektu.
  • Zvláštní pozornost byla věnována vizuální hierarchii a rozvržení, což zajistilo, že nejdůležitější metriky byly okamžitě viditelné.

Vlastní widgety a vizualizace:

Widgety byly přizpůsobeny pro každou klíčovou metriku, aby se zlepšila čitelnost a okamžité pochopení stavů projektu.
Vizuální indikátory, jako jsou barevně označené stavové ikony a indikátory průběhu, byly začleněny, aby poskytly jasnou vizuální představu o stavu každého projektu.

Reprezentace dat v reálném čase:

W nakonfiguroval řídicí panel tak, aby se obnovoval v pravidelných intervalech a poskytoval vývojovému týmu aktualizace v reálném čase.
Zajištěno, aby byla vždy k dispozici nejaktuálnější data, což umožnilo proaktivní přístup k zajištění kvality a zdraví kódu.

Výsledky a výhody

Integrace SonarQube se Zabbixem a vytvoření specializovaného dashboardu přineslo významné výhody pro vývojové pracovní postupy a projektové řízení.

Vylepšené sledování kvality kódu:

  • Monitorování metrik kvality kódu v reálném čase umožnilo rychlejší identifikaci a řešení problémů.
  • Vývojáři obdrželi okamžitou zpětnou vazbu o kvalitě svého kódu a podporovali kulturu kvality na prvním místě ve vývojovém procesu.

Vylepšená viditelnost:

  • Ovládací panel Zabbix poskytoval centralizovaný pohled na zdravotní stav všech projektů a zlepšoval viditelnost pro vývojáře i management.
  • Kritické problémy lze identifikovat na první pohled, což umožňuje stanovení priorit a přidělování zdrojů pro řešení nejnaléhavějších problémů.

Zjednodušený pracovní postup:

  • Automatizované zjišťování a monitorování projektů snižuje manuální režii a umožňuje vývojářům soustředit se spíše na kódování než na vytváření sestav.
  • Upozornění a oznámení od Zabbix zajistily, že žádné kritické problémy nezůstanou bez povšimnutí.

Podpora při rozhodování:

  • Shromážděná data a trendy viditelné na řídicím panelu podporovaly informované rozhodování o zlepšení kvality kódu a technickém řízení dluhu.
  • Schopnost sledovat historická data umožnila týmu měřit dopad implementovaných změn v průběhu času.

Proaktivní správa problémů:

  • Včasná detekce chyb a zranitelností umožnila týmu řešit problémy dříve, než eskalují, čímž se snížila možná rizika pro harmonogram a kvalitu projektů.
  • Stavy Quality Gate pomohly udržet konzistentní standard kvality kódu ve všech projektech.

Zvláštní poděkování patří týmu Zen Networks (Oumaima Naami, Karim Chadil a Fayçal Noushi) za jejich práci na tomto projektu.

Zdroj: Zabbix