
IT Systems Integration Consultant
Jenkins je jedným z nástrojov CI/CD, ktoré sú v dnešnom svete vývoja softvéru nevyhnutné pre rýchlosť, spoľahlivosť a konzistentnosť nasadzovania aplikácií. Firmy si už nemôžu dovoliť čakať týždne či mesiace na nové verzie. Používatelia očakávajú neustále zlepšenia a nové funkcie, konkurencia nespí. Práve tu prichádzajú na rad koncepty kontinuálnej integrácie (CI – Continuous Integration) a kontinuálneho dododávania (CD – Continuous Delivery/Continuous Deployment).
V článku sa dozvieš:
Jenkins patrí medzi najznámejšie open-source nástroje, ktoré tieto procesy automatizujú. Ide o server napísaný v Jave, ktorý zvládne riadiť celý cyklus vývoja aplikácie – od stiahnutia kódu z repozitára, cez jeho zostavenie a testovanie, až po nasadenie do testovacieho alebo produkčného prostredia. Jeho sila spočíva v mimoriadnej flexibilite, možnosti rozšírenia a silnej komunite. Vďaka tomu sa stal štandardom pre CI/CD po celom svete.
Pred nástupom CI/CD sa kód často spájal len raz za niekoľko dní či týždňov, čo viedlo k chybám a k tzv. „integračnému peklu“. Dnes vývojári svoje zmeny integrujú niekoľkokrát denne a Jenkins vďaka automatizovaným testom okamžite overí, či novinky nenarušili existujúcu funkcionalitu. Umožňuje tak rýchle nasadzovanie nových verzií bez výpadkov služieb
…Jenkins v praxi nájdeš nielen vo veľkých slovenských IT firmách, ale aj v menších startupoch? Vo svete ho používajú spoločnosti ako Netflix, LinkedIn či eBay.
Príbeh Jenkinsu sa začal v roku 2004, keď japonský inžinier Kohsuke Kawaguchi pracoval v Sun Microsystems. Pri vývoji Java aplikácií ho frustrovalo, že chyby sa odhaľovali neskoro, často po zlúčení väčšieho balíka zmien. Opravy v tejto fáze boli náročné a drahé, preto vytvoril nástroj, ktorý automaticky zostavil a otestoval aplikáciu pri každom pridaní kódu do repozitára.
Vznikol Hudson, open-source projekt, ktorý si rýchlo získal obľubu vďaka jednoduchosti a flexibilite. Po akvizícii Sun Microsystems firmou Oracle v roku 2010 však nastal spor o vlastníctvo značky. Komunita odmietla úplnú kontrolu zo strany Oracle, a tak vznikol fork s názvom Jenkins.
V roku 2011 bol Jenkins oficiálne spustený ako samostatný open-source projekt pod správou komunity a dnes patrí pod Continuous Delivery Foundation (CDF) v rámci Linux Foundation. Postupne získal podporu pre cloud, Docker, Kubernetes a pribudol aj projekt Jenkins X určený pre cloud-native aplikácie.
Na Slovensku sa Jenkins objavil už okolo roku 2013, najmä v bankovom a telekomunikačnom sektore, kde pomáhal automatizovať testovanie a nasadzovanie. V menších firmách a startupoch bol obľúbený pre nulovú licenčnú cenu a vysokú prispôsobiteľnosť.
Kľúčovou inováciou bol prístup pipeline as code, kde sa procesy definujú v súbore Jenkinsfile priamo v repozitári, čo umožnilo jednoduchšie verzovanie a auditovanie CI/CD procesov. Ďalším míľnikom bolo rozšírenie pluginového ekosystému – z niekoľkých desiatok na viac ako 1 900 pluginov, ktoré pokrývajú všetky oblasti vývoja od integrácie so systémami správy kódu až po vizualizáciu metrík.
Architektúra Jenkinsu je navrhnutá tak, aby bola modulárna, škálovateľná a prispôsobiteľná potrebám rôznych projektov – od malých tímov až po rozsiahle enterprise nasadenia. Je založená na modeli klient-server, kde hlavnú úlohu zohráva centrálny komponent Jenkins Controller (v minulosti nazývaný Master) a k nemu pripojené Jenkins Agenty (predtým Slaves).
Hoci ide o pomerne starú architektúru, jej flexibilita a otvorenosť umožnili Jenkinsu držať krok s modernými požiadavkami na CI/CD. V tejto časti si rozoberieme jednotlivé komponenty a ich funkciu.
Jenkins Controller je srdcom celej inštalácie. Je to serverová aplikácia napísaná v Jave, ktorá riadi celý chod systému. Controller má viacero zodpovedností:
V menších projektoch môže controller vykonávať aj samotné buildy a testy, ale vo väčšine prípadov sa na túto prácu používajú agenty, aby controller nebol preťažený.
Agenty sú stroje alebo kontajnery, ktoré reálne vykonávajú prácu, kompilujú kód, spúšťajú testy, pripravujú artefakty. Agenty môžu byť:
Komunikácia medzi controllerom a agentmi môže prebiehať cez SSH, JNLP (Java Network Launch Protocol) alebo iné protokoly. Táto flexibilita umožňuje spájať on-premise servery, cloudové zdroje aj hybridné riešenia.
Node v kontexte Jenkinsu znamená akýkoľvek stroj, ktorý môže vykonávať úlohy – či už ide o controller alebo agent. Každý node má svoju konfiguráciu, špecifické prostredie, dostupné nástroje a hardvérové parametre. Napríklad môžeš mať Node s Windows Serverom na testovanie .NET aplikácií a Node s Ubuntu pre Java projekty.
Job je základná jednotka práce v Jenkinsi. Každý job definuje:
Jobs sa dajú spúšťať manuálne, podľa časového plánu (cron), na základe zmien v SCM alebo ako súčasť pipeline.
Pipeline v Jenkins predstavuje definovaný pracovný tok (workflow) pre CI/CD proces. Je zapísaná v súbore Jenkinsfile priamo v repozitári projektu, čo umožňuje verzovanie a tímovú spoluprácu. Pipeline môže byť:
Príklad deklaratívnej pipeline:
pipeline {
agent any
stages {
stage('Build') {
steps { echo 'Kompilujem kód...' }
}
stage('Test') {
steps { echo 'Spúšťam testy...' }
}
stage('Deploy') {
steps { echo 'Nasadzujem aplikáciu...' }
}
}
}
Artefakty, ktoré po dokončení buildu môžu vzniknúť – napríklad .jar súbor, Docker image alebo statická webová stránka. Jenkins umožňuje tieto artefakty ukladať lokálne, archivovať alebo publikovať na externé servery (napr. Nexus, Artifactory, AWS S3).
Pluginy Jenkinsu sa počítajú na vyše 1900. Pridávajú integrácie a nové funkcie. Existujú pluginy pre prácu s Gitem, Dockerom, Kubernetes, Slackom, SonarQube a mnohými ďalšími nástrojmi.
Výhodou je, že si môžeš Jenkins postaviť „na mieru“ – vyberieš si len tie pluginy, ktoré potrebuješ. Nevýhodou je, že neaktuálne alebo konfliktné pluginy môžu spôsobiť problémy so stabilitou.
Adresár JENKINS_HOME je úložiskom všetkých konfigurácií, histórie jobov, artefaktov a nastavení pluginov. Tento adresár je kľúčový pri migráciách, zálohovaní alebo disaster recovery.
Bezpečnosť v Jenkinsi sa riadi dvoma hlavnými mechanizmami:
Jenkins v kombinácii s Dockerom a Kubernetes je v slovenskom prostredí je bežná kombinácia. Controller beží ako samostatný VM alebo kontajner a buildy prebiehajú na dynamicky vytváraných agentoch v Kubernetes clustri. To umožňuje efektívne využívať zdroje a škálovať buildy podľa potreby, napríklad pri vydaní novej verzie aplikácie.
Pipeline v Jenkinsi predstavuje jadro automatizácie, na ktorom stojí väčšina jeho využitia. Je to definovaný sled krokov (stages a steps), ktoré opisujú, ako sa má aplikácia vybudovať, otestovať a nasadiť.
Moderný prístup k CI/CD považuje pipeline za „proces ako kód“, teda jej konfigurácia je uložená v texte a verzovaná spolu so zdrojovým kódom projektu.
Jenkinsfile je obyčajný textový súbor uložený v koreňovom adresári projektu. Tento súbor popisuje pipeline pomocou špeciálnej syntaxe (Groovy DSL).
Medzi jeho výhody patria:
Existujú dva hlavné typy pipeline – deklaratívna a skriptovaná.
Príklad:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
Príklad:
node {
stage('Build') {
sh 'mvn clean package'
}
stage('Test') {
if (env.BRANCH_NAME == 'main') {
sh 'mvn test'
}
}
stage('Deploy') {
sh './deploy.sh'
}
}
Predstavme si, že máme Java Spring Boot aplikáciu v GitHub repozitári.
Pipeline by mohla vyzerať takto:
Jenkins pipeline sa bežne integruje s:
Slovenské e-commerce spoločnosti často používajú Jenkins pipeline na:
Najlepšie praktiky pri tvorbe pipeline
1. Drž pipeline v Gite – nikdy nekonfiguruj pipeline iba cez UI.
2. Používaj deklaratívnu syntax – jednoduchšia údržba.
3. Rozdeľuj pipeline na malé stages – lepšie sa debugujú chyby.
4. Používaj caching – zrýchlenie buildov.
5. Testuj pipeline lokálne – napríklad pomocou Jenkinsfile Runner.
Jenkins je multiplatformový, takže ho môžeš nainštalovať na Windows, Linux aj macOS. Vyžaduje Java 11 alebo novšia (odporúča sa OpenJDK alebo Oracle JDK).
Kroky inštalácie v skratke:
1. Stiahnutie
2.Inštalácia na Linux
wget -q -O – https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add –
sudo sh -c ‚echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list‘
sudo apt update
sudo apt install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
3. Inštalácia na Windows
4. Prvý prístup
5. Nasadenie na server alebo cloud
Ak chceš rýchle testovanie, spusti Jenkins v Dockeri príkazom: docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
Rozsiahly ekosystém pluginov je jednou z najsilnejších stránok Jenkinsu. Samotný Jenkins je síce plne funkčný už po základnej inštalácii, no skutočnú silu získava práve vďaka pluginom, ktoré rozširujú jeho schopnosti o integrácie, nové funkcie a vizualizácie. Pluginy umožňujú prepojiť Jenkins s prakticky akýmkoľvek nástrojom, ktorý sa v modernom vývoji softvéru používa.
Pluginy sú samostatné moduly napísané v Jave, ktoré pridávajú do Jenkinsu nové možnosti. Môžu napríklad:
…každý plugin má svoj vlastný životný cyklus? Môže byť inštalovaný, aktualizovaný alebo odinštalovaný bez toho, aby bolo nutné meniť základnú inštaláciu Jenkinsu.
V Jenkinsovom webovom rozhraní nájdeme sekciu Manage Jenkins > Manage Plugins, kde je možné:
Pre veľké organizácie je bežné, že majú interný „whitelist“ schválených pluginov, aby minimalizovali riziko zraniteľností alebo nekompatibility.
Podľa štatistík Jenkins komunity patria medzi najpoužívanejšie:
Aby bolo jednoduchšie orientovať sa v tisícoch pluginov, môžeme ich rozdeliť do kategórií:
Aj keď pluginy prinášajú obrovskú pridanú hodnotu, sú aj zdrojom možných rizík. Každý plugin môže obsahovať chyby alebo bezpečnostné diery, preto:
V minulosti sa vyskytli prípady, keď zastaraný alebo málo udržiavaný plugin spôsobil únik dát alebo umožnil vzdialené spustenie kódu na Jenkins serveri.
Mnohé slovenské firmy, napríklad z oblasti fintech alebo telekomunikácií, využívajú kombináciu Git, Maven, SonarQube a Kubernetes pluginov. Vďaka nim dokážu:
Komunita pracuje na modernizácii pluginového ekosystému, najmä na:
…niektoré nové cloudové distribúcie Jenkinsu už umožňujú inštaláciu pluginov priamo cez API alebo CLI, čo je vhodné pre automatizované infraštruktúrne skripty?
Jenkins sa vďaka svojej flexibilite a otvorenosti používa v širokej škále odvetví. Od malých startupov až po korporácie s tisíckami zamestnancov dokáže automatizovať procesy, ktoré by inak vyžadovali manuálne zásahy, čím skracuje čas nasadenia nových funkcií a zvyšuje kvalitu dodávaného softvéru.
Netflix
Netflix využíva Jenkins na riadenie svojich CI/CD pipeline pre stovky mikroservisov. Každá zmena kódu je automaticky otestovaná, zabalená do kontajnera a nasadená do Kubernetes clusterov. Jenkins je tu úzko prepojený s vlastným open-source nástrojom Spinnaker, ktorý riadi proces nasadzovania do rôznych prostredí. Výhodou tohto riešenia je, že nové funkcie môžu byť nasadené do produkcie v priebehu niekoľkých minút, pričom sa minimalizuje riziko výpadkov.
Fintech sektor
Slovenské fintech startupy často používajú Jenkins v kombinácii s GitLabom alebo GitHubom. Typický scenár je, že pri každom pushi do repozitára sa automaticky spustí pipeline, ktorá zahŕňa:
Vďaka tomu môžu vývojári nasadzovať nové verzie niekoľkokrát denne bez potreby manuálneho zásahu administrátora.
Telekomunikačné firmy
V telekomunikačných spoločnostiach sa Jenkins často používa na automatizáciu testov pre sieťové služby a API. Napríklad pri zmene v systéme správy SIM kariet Jenkins spustí sadu testov, ktoré overia, že všetky funkcie fungujú rovnako pre rôzne typy zariadení a sietí. Ak niektorý test zlyhá, nasadenie sa zastaví a vývojári dostanú okamžité upozornenie.
E-commerce platformy
Slovenské e-shopy využívajú Jenkins na automatické nasadzovanie aktualizácií webových aplikácií. Pri úprave front-end kódu sa spustí pipeline, ktorá zahŕňa build, optimalizáciu obrázkov, kontrolu rýchlosti načítania a nasadenie na produkciu mimo špičky návštevnosti.
Jenkins ako centrálny nástroj CI/CD spracúva citlivé dáta a má prístup k zdrojovým kódom, serverom aj cloudovým službám. Ak dôjde k jeho narušeniu, útočník môže ovplyvniť celý proces vývoja a nasadzovania. Preto je bezpečnosť jednou z jeho kľúčových oblastí.
Bezpečnosť sa začína kontrolou prístupu na úrovni servera, kde Jenkins beží. Odporúča sa princíp najmenších práv a minimalizácia počtu administrátorov. V samotnom Jenkinsi sú dva hlavné mechanizmy:
Jenkins podporuje internú databázu používateľov, LDAP, OAuth či jednotné prihlasovanie. Vhodné je zapnúť dvojfaktorovú autentifikáciu. Práva možno nastaviť pomocou Matrix-based security alebo Role-based strategy, aby bežní používatelia nemohli meniť kritické nastavenia.
Citlivé údaje ako API kľúče či heslá sa spravujú pomocou Credentials Binding Plugin, ktorý zabezpečí, že sa neobjavia v logoch. Je dôležité ich pravidelne meniť a odstraňovať nepoužívané.
Pluginy rozširujú funkcie Jenkinsu, ale môžu obsahovať zraniteľnosti. Odporúča sa inštalovať len tie z oficiálneho repozitára, pravidelne ich aktualizovať a nepoužívané odstraňovať.
Všetka komunikácia medzi serverom, agentmi a používateľmi má byť šifrovaná pomocou HTTPS, SSH alebo zabezpečeného JNLP. V citlivých prostrediach je vhodná aj izolácia siete alebo VPN.
Logy a monitorovanie pomáhajú odhaľovať incidenty. Integrácia s nástrojmi ako ELK Stack alebo Splunk zvyšuje prehľad o prevádzke.
Správna kombinácia týchto opatrení umožní využívať Jenkins bezpečne a spoľahlivo aj v prostrediach s vysokými požiadavkami na ochranu dát.
Jenkins patrí medzi najpopulárnejšie CI/CD nástroje, a to najmä vďaka svojej flexibilite a otvorenosti. Každá organizácia však musí zvážiť jeho silné aj slabé stránky.
Jenkins sa hodí pre tímy, ktoré potrebujú flexibilný nástroj s bohatými možnosťami integrácie a neprekáža im investícia do jeho konfigurácie a údržby. V prostrediach, kde je potrebná vysoká miera prispôsobenia a kontrola nad celým CI/CD procesom, môže byť Jenkins ideálnym riešením.
Jenkins si udržiava silnú pozíciu na trhu množstva CI/CD riešení, no má konkurenciu, ktorá ponúka odlišný prístup k automatizácii.
GitLab CI/CD je natívnou súčasťou platformy GitLab. Výhodou je plynulá integrácia so správou repozitárov, issue trackingom a správou projektov. Pipelines sa definujú v súbore .gitlab-ci.yml, čo umožňuje jednoduchú verziu konfigurácie. Oproti Jenkinsu má menej pluginov, ale v základnej inštalácii ponúka veľa funkcií bez nutnosti dodatočných modulov. Pre menšie tímy môže byť GitLab CI/CD rýchlejším riešením, no Jenkins ostáva flexibilnejší pri komplexných integráciách.
CircleCI je cloudovo orientované riešenie so silným dôrazom na rýchlosť a škálovanie. Podporuje kontajnerové buildy a dynamické prideľovanie zdrojov. Je menej náročný na údržbu, keďže veľa správy zabezpečuje poskytovateľ. Nevýhodou je menšia možnosť prispôsobenia a závislosť od poskytovateľa, čo môže byť problém v prostrediach s prísnymi bezpečnostnými požiadavkami. Jenkins ponúka väčšiu kontrolu, najmä pri self-hosted nasadení.
Bamboo od Atlassianu ponúka natívnu integráciu s Jirou a Bitbucketom, čo je výhodné pre tímy už pracujúce v ekosystéme Atlassian. Oproti Jenkinsu má prehľadnejšie UI a menej manuálnej konfigurácie. Nevýhodou sú licenčné poplatky a menšia komunita. Jenkins má výhodu v otvorenosti a bezplatnej dostupnosti.
TeamCity od JetBrains je komerčné riešenie s bohatou funkcionalitou a užívateľsky prívetivým rozhraním. Má silnú podporu pre viaceré jazyky a frameworky, ale licenčné náklady môžu byť vysoké. Jenkins poskytuje podobnú funkcionalitu zadarmo, hoci s väčšou náročnosťou na konfiguráciu.
Jenkins sa dá opísať aj jednou vetou, ktorá by znela takto: je to starý dobrý pracant, ktorý zvládne všetko od jednoduchého buildu až po komplexné CI/CD pipeline s desiatkami krokov. A robí to zadarmo.
Jeho najväčšou devízou je sloboda – vďaka tisíckam pluginov a otvorenému kódu si ho prispôsobíš presne tak, ako potrebuješ. Či už si startup, ktorý chce rýchlo testovať nápady, alebo veľká firma s rozsiahlymi procesmi, Jenkins ti dokáže poslúžiť.
Nie je to však nástroj pre tých, ktorí chcú všetko hneď bez nastavovania. Potrebuje trochu starostlivosti, pravidelnú údržbu a ochotu ponoriť sa do konfigurácie. Ak ti však ide o maximálnu kontrolu, otvorenosť a možnosť integrovať prakticky čokoľvek, Jenkins je stále stávka na istotu.
Súvisiace články