Programovanie

Čo je Jenkins? Vysvetlil server CI

Jenkins ponúka jednoduchý spôsob nastavenia prostredia nepretržitej integrácie alebo nepretržitého doručovania (CI / CD) pre takmer ľubovoľnú kombináciu jazykov a úložísk zdrojových kódov pomocou plynovodov, ako aj automatizáciu ďalších rutinných vývojových úloh. Aj keď Jenkins nevylučuje potrebu vytvárať skripty pre jednotlivé kroky, poskytuje vám rýchlejší a robustnejší spôsob integrácie celého vášho reťazca nástrojov na zostavovanie, testovanie a nasadenie, ako si môžete ľahko vytvoriť sami.

"Nerozbíjaj nočné stavanie!" je zásadným pravidlom v obchodoch na vývoj softvéru, ktoré každé ráno pre svojich testerov uverejňujú čerstvo vytvorenú dennú verziu produktu. Pred Jenkinsom bolo najlepším riešením, ako sa vývojár vyhnúť prerušeniu nočnej zostavy, vybudovanie a dôkladné a úspešné testovanie na lokálnom počítači pred zadaním kódu. To však znamenalo testovať zmeny jednotlivo, bez každý deň sa zaviaže. Neexistovala pevná záruka, že nočné staviteľstvo prežije záväzok človeka.

Jenkins - pôvodne Hudson - bola priamou reakciou na toto obmedzenie.

Hudson a Jenkins

V roku 2004 bol Kohsuke Kawaguchi vývojárom Java v spoločnosti Sun. Kawagučiho unavovalo rozbíjanie buildov vo svojej vývojovej práci a chcel nájsť spôsob, ako pred zadaním kódu do úložiska zistiť, či bude kód fungovať. Kawaguchi teda postavil automatizačný server v a pre Javu, aby to umožnil, nazvaný Hudson. Hudson sa stal populárnym v spoločnosti Sun a rozšíril sa do ďalších spoločností ako open source.

Rýchly posun vpred do roku 2011 a spor medzi spoločnosťou Oracle (ktorá získala spoločnosť Sun) a nezávislou komunitou open source Hudsonovcov vyústil do zmeny názvu Jenkins. V roku 2014 sa Kawaguchi stal technickým riaditeľom spoločnosti CloudBees, ktorá ponúka produkty na kontinuálne doručovanie založené na Jenkinsovej.

Obidve vidlice naďalej existovali, aj keď Jenkins bol oveľa aktívnejší. Dnes je projekt Jenkins stále aktívny. Webová stránka Hudson bola zatvorená 31. januára 2020.

V marci 2019 spustila nadácia Linux Foundation spolu so spoločnosťami CloudBees, Google a mnohými ďalšími spoločnosťami novú nadáciu s otvoreným softvérom s názvom Continuous Delivery Foundation (CDF). Jenkinsoví prispievatelia sa rozhodli, že ich projekt by sa mal pripojiť k tejto novej nadácii. Kawaguchi v tom čase napísal, že pre používateľov sa nič významné nezmení.

V januári 2020 Kawaguchi oznámil, že prechádza na svoj nový startup, Launchable. Povedal tiež, že by mal oficiálne odstúpiť od Jenkinsa, hoci zostane vo Výbore pre technický dohľad nadácie Continuous Delivery Foundation a svoju úlohu v CloudBees zmení na poradcu.

Súvisiace video: Ako rýchlejšie dodať kód pomocou CI / CD

Jenkinsova automatizácia

Dnes je Jenkins popredným automatizačným serverom typu open-source s približne 1 600 doplnkami na podporu automatizácie všetkých druhov vývojových úloh. Problém, ktorý sa Kawaguchi pôvodne snažil vyriešiť, je nepretržitá integrácia a nepretržité doručovanie kódu Java (t. J. Vytváranie projektov, vykonávanie testov, analýza statického kódu a nasadzovanie) iba jedným z mnohých procesov, ktoré ľudia automatizujú pomocou Jenkinsa. Týchto 1600 doplnkov pokrýva päť oblastí: platformy, používateľské rozhranie, správa, správa zdrojových kódov a najčastejšie správa zostáv.

Ako Jenkins funguje

Jenkins sa distribuuje ako archív WAR a ako inštalačné balíčky pre hlavné operačné systémy, ako balík Homebrew, ako obraz Dockeru a ako zdrojový kód. Zdrojový kód je väčšinou Java s niekoľkými súbormi Groovy, Ruby a Antlr.

Môžete spustiť samostatnú vojnu Jenkins WAR alebo ako servlet na aplikačnom serveri Java, napríklad Tomcat. V obidvoch prípadoch vytvára webové používateľské rozhranie a prijíma volania do svojho rozhrania REST API.

Pri prvom spustení aplikácie Jenkins sa vytvorí administratívny používateľ s dlhým náhodným heslom, ktoré môžete vložiť na svoju pôvodnú webovú stránku a odomknúť tak inštaláciu.

Doplnky Jenkins

Po nainštalovaní vám Jenkins umožňuje prijať predvolený zoznam doplnkov alebo zvoliť vlastné doplnky.

Keď si vyberiete svoju pôvodnú sadu doplnkov, kliknite na tlačidlo Inštalovať a Jenkins ich pridá.

Hlavná obrazovka Jenkins zobrazuje aktuálny front zostavenia a stav vykonávateľa a ponúka odkazy na vytváranie nových položiek (úloh), správu používateľov, prezeranie histórie zostavenia, správu Jenkinsa, prezeranie vašich vlastných zobrazení a správu vašich prihlasovacích údajov.

Nová položka Jenkins môže byť ktorýkoľvek zo šiestich typov úloh plus priečinok na usporiadanie položiek.

Na stránke Správa Jenkinsa môžete robiť 18 vecí, vrátane možnosti otvoriť rozhranie príkazového riadku. V tomto okamihu by sme sa však mali pozrieť na kanály, ktoré sú vylepšenými pracovnými tokmi, ktoré sú zvyčajne definované skriptmi.

Jenkinsove potrubia

Po nakonfigurovaní Jenkinsa je čas vytvoriť niekoľko projektov, ktoré pre vás Jenkins môže vytvoriť. Zatiaľ čo vy môcť pomocou webového používateľského rozhrania môžete vytvárať skripty, aktuálnym osvedčeným postupom je vytvoriť skript pre kanál s názvom Jenkinsfile, a skontrolujte to vo svojom úložisku. Screenshot nižšie zobrazuje konfiguračný webový formulár pre viacvetvový kanál.

Ako vidíte, zdrojmi vetiev pre tento druh potrubia v mojej základnej inštalácii Jenkins môžu byť úložiská Git alebo Subversion, vrátane GitHub. Ak potrebujete iné druhy úložísk alebo rôzne služby online úložiska, stačí pridať príslušné doplnky a reštartovať Jenkins. Snažil som sa, ale nemohol som myslieť na systém na správu zdrojového kódu (SCM), ktorý ešte nemá uvedený doplnok Jenkins.

Jenkinsove kanály môžu byť deklaratívne alebo skriptované. A deklaratívny pipeline, jednoduchší z týchto dvoch, používa syntax kompatibilnú s Groovy - a ak chcete, môžete súbor spustiť #! groovy nasmerovať editor kódu správnym smerom. Deklaratívny kanál začína a potrubie blok, definuje agent, a definuje etapy ktoré zahŕňajú spustiteľné súbory krokov, ako v trojstupňovom príklade uvedenom nižšie.

potrubie {

agent akýkoľvek

etapy {

etapa („Budovať“) {

kroky {

ozvena „Budova ..“

            }

        }

etapa („Test“) {

kroky {

ozvena „Testovanie ..“

            }

        }

fáza („Nasadiť“) {

kroky {

ozvena „Nasadzuje sa ....“

            }

        }

    }

}

potrubie je povinný vonkajší blok na vyvolanie doplnku Jenkins pipeline. agent definuje, kam chcete spustiť plynovod. akýkoľvek hovorí, že na spustenie plynovodu alebo fázy použije ľubovoľného dostupného agenta. Konkrétnejší agent môže vyhlásiť, že kontajner má byť použitý, napríklad:

agent {

docker {

obrázok „maven: 3-alpské“

štítok „môj-definovaný-štítok“

args „-v / tmp: / tmp“

    }

}

etapy obsahovať postupnosť jednej alebo viacerých smerníc. V príklade vyššie sú tieto tri fázy zostavenie, testovanie a nasadenie.

krokov urobte skutočnú prácu. V príklade vyššie sú kroky iba vytlačené správy. Užitočnejší krok zostavenia môže vyzerať takto:

potrubie {

agent akýkoľvek

etapy {

etapa („Budovať“) {

kroky {

urob '

archiveArtifacts artifacts: ‘** / target / *. jar’, fingerprint: true

            }

        }

    }

}

Tu sa dovolávame urobiť z shellu a potom archivovať všetky vyprodukované súbory JAR do archívu Jenkins.

The príspevok časť definuje akcie, ktoré sa vykonajú na konci spustenia alebo fázy ropovodu. V sekcii s príspevkami môžete použiť niekoľko blokov post-condition: vždy, zmenil, zlyhanie, úspech, nestabilnýa potratený.

Napríklad súbor Jenkinsfile nižšie vždy spustí JUnit po testovacej fáze, ale pošle e-mail iba v prípade, že zlyhá kanál.

potrubie {

agent akýkoľvek

etapy {

etapa („Test“) {

kroky {

skontroluj

            }

        }

    }

príspevok {

vždy {

junit ‘** / target / *. xml‘

        }

zlyhanie {

pošlite na e-mail: [email protected], predmet: „Potrubie zlyhalo :(“

        }

    }

}

Deklaratívny kanál dokáže vyjadriť väčšinu toho, čo potrebujete na definovanie kanálov, a je oveľa jednoduchšie sa ho naučiť ako skriptovaná syntax kanála, ktorou je Groovy DSL. Skriptovaný kanál je v skutočnosti plnohodnotným programovacím prostredím.

Pre porovnanie, nasledujúce dva súbory Jenkins sú úplne rovnocenné.

Deklaratívny plynovod

potrubie {

agent {docker ‘node: 6.3’}

etapy {

etapa („stavať“) {

kroky {

sh ‘npm —verzia’

            }

        }

    }

Skriptovaný kanál

uzol (ukotviteľný panel) {

pokladňa scm

etapa („Budovať“) {

docker.image („uzol: 6.3“). inside {

sh ‘npm —verzia’

        }

    }

}

Modrý oceán, grafické rozhranie Jenkins

Ak chcete najnovšie a najlepšie používateľské rozhranie Jenkins, môžete použiť doplnok Blue Ocean, ktorý poskytuje užívateľovi grafický zážitok. Môžete pridať doplnok Blue Ocean do svojej existujúcej inštalácie Jenkins alebo spustiť kontajner Jenkins / Blue Ocean Docker. S nainštalovaným Blue Ocean bude mať vaše hlavné menu Jenkins ďalšiu ikonu:

Ak chcete, môžete otvoriť priamo Blue Ocean. Nachádza sa v priečinku / blue na serveri Jenkins. Tvorba plynovodu v Modrom oceáne je trochu grafickejšia ako v obyčajnom Jenkinsovi:

Jenkins Docker

Ako som už spomínal, Jenkins sa distribuuje aj ako Dockerov obraz. Tento proces nie je oveľa viac: Po výbere typu SCM poskytnete adresu URL a poverenia, potom vytvoríte kanál z jedného úložiska alebo skenujete všetky úložiská v organizácii. Každá pobočka so súborom Jenkinsfile dostane kanál.

Tu spúšťam obraz Blue Ocean Docker, ktorý je dodávaný s niekoľkými nainštalovanými doplnkami služby Git, ako je predvolený zoznam poskytovateľov SCM:

Po spustení niektorých potrubí zobrazí doplnok Blue Ocean ich stav, ako je uvedené vyššie. Jednotlivé fázy môžete priblížiť a zobraziť tak fázy a kroky:

Môžete tiež priblížiť vetvy (hore) a aktivity (dole):

Prečo používať Jenkins?

Doplnok Jenkins Pipeline, ktorý sme používali, podporuje prípad použitia všeobecnej nepretržitej integrácie / nepretržitého doručovania (CICD), čo je pre Jenkins pravdepodobne najbežnejšie použitie. Pre niektoré ďalšie prípady použitia existujú špeciálne dôvody.

Projekty Java boli pre Jenkinsov pôvodný raison d’être. Už sme videli, že Jenkins podporuje budovanie s Mavenom; funguje tiež s programami Ant, Gradle, JUnit, Nexus a Artifactory.

Android používa akýsi druh Java, ale predstavuje problém testovania na širokej škále zariadení s Androidom. Doplnok emulátora Android vám umožňuje vytvárať a testovať na toľkých emulovaných zariadeniach, koľko ich chcete definovať. Doplnok Google Play Publisher umožňuje odosielať zostavy do alfa kanála v Google Play na vydanie alebo ďalšie testovanie na skutočných zariadeniach.

Ukázal som príklady, keď sme zadali kontajner Docker ako agenta pre potrubie a kde sme spustili Jenkins a Blue Ocean v kontajneri Docker. Kontajnery Docker sú v prostredí Jenkins veľmi užitočné na zlepšenie rýchlosti, škálovateľnosti a konzistencie.

Pre Jenkins a GitHub existujú dva hlavné prípady použitia. Jedným z nich je integrácia zostavenia, ktorá môže obsahovať háčik služby na spustenie Jenkinsa pri každom potvrdení vášho úložiska GitHub. Druhým je použitie autentifikácie GitHub na riadenie prístupu k Jenkinsovi cez OAuth.

Jenkins podporuje okrem Javy aj mnoho ďalších jazykov. Pre jazyk C / C ++ existujú doplnky, ktoré umožňujú zaznamenávať chyby a varovania z konzoly, generovať skripty na vytváranie pomocou nástroja CMake, spúšťať testy jednotiek a vykonávať statickú analýzu kódu. Jenkins má množstvo integrácií s nástrojmi PHP.

Aj keď kód Python nie je potrebné vytvárať (pokiaľ nepoužívate napríklad Cython alebo nevytvárate koliesko Pythonu na inštaláciu), je užitočné, že sa Jenkins integruje s nástrojmi na testovanie a vykazovanie Pythonu, ako sú Nose2 a Pytest, a kvalitou kódu nástroje ako Pylint. Podobne sa Jenkins integruje s nástrojmi Ruby, ako sú Rake, Cucumber, Brakeman a CI :: Reporter.

Jenkins pre CI / CD

Celkovo Jenkins ponúka jednoduchý spôsob nastavenia prostredia CI / CD pre takmer akúkoľvek kombináciu jazykov a úložísk zdrojových kódov pomocou plynovodov, ako aj automatizáciu množstva ďalších rutinných vývojových úloh. Aj keď Jenkins nevylučuje potrebu vytvárať skripty pre jednotlivé kroky, poskytuje vám rýchlejší a robustnejší spôsob integrácie celého vášho reťazca nástrojov na zostavovanie, testovanie a nasadenie, ako by ste si mohli ľahko zostaviť sami.

$config[zx-auto] not found$config[zx-overlay] not found