Programovanie

Nepretržitá integrácia s Jenkinsom

Keď sa pozrieme späť na to, ako bol softvér zostavený a nasadený ešte pred 15 rokmi, zdá sa prekvapujúce, že naše aplikácie skutočne fungovali. V tých dňoch životný cyklus vývoja softvéru spočíval v spúšťaní zostavení na lokálnom počítači, ručnom kopírovaní artefaktov na oddychový server a ručnom testovaní každej aplikácie prostredníctvom viacerých iterácií. Keď bol vývojársky tím spokojný s zostavením, aplikáciu sme manuálne nasadili do výroby. Najdôslednejšou vecou na tomto štýle vývoja bola nekonzistentnosť - v postupe, aj vo výsledkoch.

Pred viac ako desiatimi rokmi začali agilní vývojári prijímať a podporovať testom riadený vývoj a nepretržitú integráciu (CI). Pomocou týchto techník sme mohli automaticky vytvoriť zdrojový kód, kedykoľvek ho vývojár skontroloval v zdrojovom úložisku, a vykonaním vyčerpávajúcej jednotky testovacej sady zaistiť správne fungovanie aplikácie. Mnoho vývojových pracovníkov zameraných na testovanie tiež začalo robiť testovanie integrácie a testovanie výkonu v sekundárnom procese CI.

Vďaka nepretržitej integrácii sme mohli rýchlejšie odhaliť chyby a vydať kód oveľa rýchlejšie, ako sme to urobili v minulých rokoch. Nie je prehnané tvrdiť, že CI skrotila „zostavovaciu“ stránku cyklu budovania a nasadenia. V dnešnej dobe mnoho vývojových tímov prešlo od CI na CD, čo znamená buď nepretržité doručovanie, alebo nepretržité nasadenie. Nech už je označenie akékoľvek, CD je proces, ktorý posúva softvér od registrácie kódu k fázovým alebo dokonca produkčným nasadeniam.

Táto splátka vo výške Projekty Java s otvoreným zdrojom predstavuje nepretržitú integráciu s Jenkinsom, popredným automatizačným serverom pre CI / CD. Začneme prehľadom procesov CI a CD, potom nastavíme webový projekt Java pomocou programov Maven a Jenkins. Dozviete sa, ako zostaviť a otestovať projekt v Jenkinsovi s JUnit, ako aj ako riešiť zlyhania zostavenia. Nainštalujete a spustíte tiež niekoľko populárnych doplnkov Jenkins na testovanie a vykazovanie analýzy statického kódu.

Úvod do CI / CD

V procese nepretržitej integrácie je možné kód, ktorý bol zaevidovaný do úložiska zdrojových kódov, automaticky vydať, vytvoriť, otestovať rôznymi spôsobmi a publikovať v úložisku. Aby fungovala nepretržitá integrácia, potrebujete server CI, ako je Jenkins, ktorý dokáže sledovať vaše úložisko zdrojového kódu, či neobsahuje nové zmeny, a odpovedať konfigurovateľnými spôsobmi.

Vezmime si ako príklad aplikáciu Java postavenú pomocou nástroja Maven. Pri zisťovaní zmien kódu môže váš server CI odpovedať vykonaním a mvn čistá inštalácia. V typickej konfigurácii zostavy Maven by vykonal novú sadu testov jednotiek ako súčasť príkazu build. Počas vytvárania zdrojového kódu mohol server vykonať ľubovoľný počet ďalších akcií:

  • Po úspešnom absolvovaní kódu jednotky zlúčte svoju vetvu funkcií späť do hlavnej alebo hlavnej vetvy.
  • Vykonajte statickú analýzu kódu, napríklad pokrytie kódu, zložitosť kódu, kontroly bežných chýb atď.
  • Zverejnite svoje artefakty zostavenia v úložisku, napríklad Artifactory alebo Sonatype Nexus
  • Nasaďte svoju aplikáciu do testovacieho prostredia integrácie
  • Vykonajte integračné testy
  • Nasaďte svoju aplikáciu do prostredia na testovanie výkonu
  • Vykonajte záťažový test s vašou aplikáciou
  • Nasaďte svoju aplikáciu do testovacieho prostredia na prijatie používateľov (UAT).
  • Nasaďte svoju aplikáciu do výroby

Tieto kroky predstavujú všetky typy aktivít, ktoré môžete vykonávať ako súčasť procesu CI / CD. CI zvyčajne zahŕňa fázy budovania a testovania životného cyklu vývoja, zatiaľ čo CD rozširuje tento proces na nasadenie artefaktu zostavenia na server na testovanie. V niektorých prostrediach vedie disk CD až do výroby.

Nepretržitá integrácia sa zvyčajne vykonáva pomocou nástroja ako Jenkins, Bamboo alebo TeamCity, ktorý zorganizuje vaše kroky zostavenia do integračného kanálu. Jenkins je pravdepodobne najpopulárnejším produktom CI / CD a dobre sa spája s Dockerom.

Stiahnite a nainštalujte Jenkins

Jenkins je server s nepretržitou integráciou a ďalšie. Skladá sa z automatizačného modulu a ekosystému doplnkov, ktorý podporuje nepretržitú integráciu, automatické testovanie a nepretržité doručovanie. Dodávací kanál si prispôsobíte podľa svojej potreby.

Existuje mnoho spôsobov, ako spustiť Jenkins:

  1. Stiahnite si súbor WAR a nainštalujte ho na servletový kontajner vo vašom lokálnom počítači.
  2. Nainštalujte virtuálny stroj do verejného cloudu, ako je AWS, a hostte tam Jenkinsa.
  3. Využite cloudového poskytovateľa Jenkins, napríklad CloudBees.
  4. Nastavte Jenkinsa v testovacej inštalácii pomocou Dockeru.

Ukážem vám, ako nastaviť lokálnu inštaláciu aj testovaciu inštaláciu Dockeru.

Stiahnite si a nainštalujte lokálne Jenkins

Začnite stiahnutím Jenkinsa a výberom vydania Dlhodobá podpora (LTS) z domovskej stránky Jenkins. Pretože používam Mac, inštalácia automaticky stiahla a pkg spis, ktorý umiestnil a jenkins.war v mojom Aplikácia / Jenkins priečinok. Súbor WAR je možné nasadiť do ľubovoľného kontajnera servletu.

Budete tiež chcieť stiahnuť a nainštalovať Apache Tomcat. Od tohto písania je najaktuálnejšia verzia Tomcatu 8.5.4, ale mali by ste byť schopní spustiť akúkoľvek najnovšiu verziu. Stiahnite si PSČ alebo tar.gz súbor a dekomprimujte ho na pevný disk. Skopírujte súbor jenkins.war do Tomcat webové aplikácie priečinok a potom spustite priečinok bin / startup.sh alebo bin / startup.bat spis. Jeho spustenie môžete otestovať otvorením prehľadávača na: // localhost: 8080.

Ak chcete spustiť Jenkins, otvorte prehliadač na adrese URL: // localhost: 8080 / jenkins.

Mali by ste dostať obrazovku, ktorá vyzerá ako obrázok 1.

Steven Haines

Ďalej Jenkins vytvorí heslo pre správu a zapíše ich do Tomcatovho hesla denníky / catalina.out súbor protokolu a do nasledujúceho domovského adresára: .jenkins / secrets / initialAdminPassword. Získajte heslo, zadajte ho do prvku formulára Správa hesla (zobrazený na obrázku 1) a stlačte ďalej. Zobrazí sa výzva na inštaláciu navrhovaných doplnkov alebo výber doplnkov, ktoré chcete nainštalovať. Zatiaľ odporúčam nainštalovať navrhované doplnky.

Teraz sa zobrazí výzva na vytvorenie používateľa správcu. Zadajte informácie o používateľovi správcu a stlačte Uložiť a dokončiť. Nakoniec kliknite Začnite používať Jenkins. Teraz uvidíte domovskú stránku Jenkins, ako je to znázornené na obrázku 2.

Steven Haines

Nakonfigurujte ukážkovú aplikáciu pomocou Mavenu

Predtým, ako budeme môcť pomocou Jenkinsa zostaviť webový projekt Java pomocou Mavenu, musíme nastaviť obe tieto technológie. Pod kapotou Jenkins skontroluje zdrojový kód z úložiska zdrojového kódu do miestneho adresára a vykoná vami určené ciele Maven. Aby to fungovalo, musíte si nainštalovať jednu alebo viac verzií Mavenu, povedať Jenkinsovi, kde sú nainštalované, a nakonfigurovať verziu Mavenu, ktorú má Jenkins používať pri zostavovaní aplikácie.

Na paneli Jenkins kliknite na ikonu Spravujte Jenkinsa a vyber si Globálna konfigurácia nástroja. Prvá vec, ktorú urobíme, je konfigurácia JDK. V sekcii JDK kliknite na ikonu Pridajte JDK, pomenujte ho (moje je „JDK8“) a ponechajte predvolené nastavenie Nainštalujte z java.sun.com skontrolované. Prijmite licenčnú zmluvu Oracle a potom kliknite na odkaz „Zadajte svoje používateľské meno / heslo“. Zadajte svoje užívateľské meno a heslo pre Oracle a stlačte Zavrieť. Zobrazí sa vám obrazovka podobná obrázku 3.

Steven Haines

Kliknite Podať žiadosť Ak chcete svoju prácu uložiť, prejdite nadol do časti Maven a kliknite na ikonu Pridajte Maven. Zadajte názov pre Maven (moje je „Maven 3.3.9“), nechajte začiarknuté možnosti „Automaticky inštalovať“ a „Inštalovať z Apache“. Kliknite Uložiť keď budete pripravení. Mala by sa vám zobraziť obrazovka podobná obrázku 4.

Steven Haines

Git je predkonfigurovaný s Jenkinsom, takže by ste teraz mali mať nainštalované všetky nástroje, ktoré potrebujete na kontrolu a zostavenie projektu Java z Gitu s Mavenom.

Nainštalujte Jenkins do kontajnera Docker

Ak nechcete inštalovať Jenkins na miestny počítač, máte možnosť ho spustiť v kontajneri Docker. Oficiálny obraz Jenkins Docker vám umožní spustiť a otestovať inštaláciu Jenkins bez toho, aby ste ju skutočne nakonfigurovali na lokálnom počítači.

Inštaluje sa Docker

V mojom úvode do aplikácie Docker nájdete príručku pre začiatočníkov v aplikácii Docker vrátane pokynov na inštaláciu a nastavenie.

Za predpokladu, že vo svojom vývojovom prostredí už máte nastavenie Dockeru, môžete Jenkins spustiť z príkazového riadku Dockeru:

 docker run -p 8080: 8080 -p 50000: 50000 -v / your / home / jenkins: / var / jenkins_home -d jenkins 

Tento príkaz hovorí Dockeru, aby spustil najnovšie vydanie servera Jenkins s nasledujúcimi možnosťami:

  • -p 8080: 8080: Mapuje port 8080 na kontajneri Docker na port 8080 na hostiteľovi Docker, aby ste sa mohli pripojiť k webovej aplikácii Jenkins na porte 8080.
  • -p 50000: 50000: Mapuje port 50000 na kontajneri Docker na port 50000 na hostiteľovi Docker. Jenkins tento port interne používa na to, aby umožnil vykonávacím procesorom otrokov pripojiť sa k hlavnému serveru Jenkins.
  • -v / váš / domov / jenkins: / var / jenkins_home: Mapuje úložisko dát Jenkins do vášho miestneho adresára, aby ste mohli reštartovať svoj kontajner Docker bez straty údajov.
  • -d: Umožňuje vám spustiť kontajner Docker v odpojenom režime alebo ako proces démona.

Nasledujúci text zobrazuje výstup na spustenie týchto príkazov:

 $ docker run -p 8000: 8080 -v / Users / shaines / jenkins /: / var / jenkins_home -d jenkins cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53 

Pretože prevádzkujeme náš kontajner Docker v odpojenom režime, musíme postupovať podľa protokolov, ktoré vydáva Jenkins. Môžete tak urobiť pomocou docker logs -f príkaz. Stačí zadať prvých niekoľko šestnástkových čísel ID kontajnera, v tomto prípade cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker logs -f cc1 Spustené z: /usr/share/jenkins/jenkins.war webový koreň: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... ***************** ********************************************* ***** ************************************************* ****** ******************************************** ****************** Je potrebné počiatočné nastavenie Jenkins. Bol vytvorený používateľ admin a bolo vygenerované heslo. Na pokračovanie v inštalácii použite nasledujúce heslo: 205be6fe69c447dd933a3c9ce7420496 Toto nájdete tiež na adrese: / var / jenkins_home / secrets / initialAdminPassword ************************ *************************************** ************* ************************************************ ************************************************* ********* 

Nastavte Jenkins CI pre webovú aplikáciu Java

Ďalej nastavíme jednoduchú úlohu webovej aplikácie Java v Jenkins. Pretože pre tento tutoriál nie je aplikácia dôležitá, použijeme moju jednoduchú príkladnú aplikáciu Hello, World Servlet, ktorú som hostil na GitHub.

Aby ste mohli otestovať Jenkinsa, musíte byť schopní vykonať zmeny v úložisku zdrojového kódu, takže by ste si ho mali vytvoriť už teraz. Na domovskej stránke Jenkins kliknite na Vytvorte nové pracovné miesta a zadajte názov vášho projektu. Zobrazí sa výzva na výber typu projektu, ako je to znázornené na obrázku 5.

Steven Haines

Pre tento projekt zvolíme typ projektu Freestyle, mali by ste si však uvedomiť svoje možnosti:

  • Freestyle projekt: Tento najbežnejší typ projektu vám umožňuje monitorovať úložisko zdrojových kódov a používať akýkoľvek zostavovací systém, napríklad Maven a Ant.
  • Potrubie: Tento typ projektu zvoľte pre komplikované projekty s pohyblivými časťami, ktoré musíte koordinovať naprieč viacerými podriadenými zostaveniami.
  • Externá úloha: Toto použite na konfiguráciu automatizovanej externej úlohy, ktorú chcete sledovať v Jenkins ako súčasť vášho zostavenia.
  • Projekt s viacerými konfiguráciami: Toto je typ úlohy pre projekty, ktoré vyžadujú inú konfiguráciu pre rôzne prostredia, ako je výroba, rozmiestnenie a test.
  • Priečinok: Ak máte zložité zostavenie, možno budete chcieť usporiadať veci do priečinkov, z ktorých každý má svoj vlastný odlišný priestor názvov.
  • Multi-branch pipeline: automaticky vytvorí skupinu pipeline projektov na základe vetiev kódu, ktoré sú definované vo vašom zdrojovom kóde

Zadajte názov projektu, v tomto prípade „hello-world-servlet“, a zvoľte „OK“. Ďalej vyberte Projekt GitHub, potom zadajte adresu URL GitHub vášho projektu: //github.com/ligado/hello-world-servlet.

V časti Správa zdrojového kódu vyberte Git a zadajte rovnakú adresu URL projektu.

V sekcii Build Triggers zvoľte Vytvorte, keď sa zmena presunie na GitHub takže Jenkins vytvorí váš kód kedykoľvek, keď vykonáte zmenu na GitHub.

V sekcii Budovanie pridajte nový krok zostavenia, zvoľte Vyvolajte Mavenove ciele najvyššej úrovne, vyberte inštanciu Maven, ktorú ste nakonfigurovali predtým (napríklad „Maven 3.3.9“), a zadajte čistá inštalácia v poli gólov. Akcie po vytvorení nechajte zatiaľ prázdne. Keď skončíte, stlačte Uložiť.

Po návrate na informačný panel by sa vám mala zobraziť obrazovka podobná obrázku 6.

Steven Haines

Konfiguráciu otestujete stlačením klávesu Stavať teraz tlačidlo vedľa projektu hello-world-servlet. Úspešné vykonanie zostavenia by ste mali vidieť v histórii zostavenia na ľavej strane stránky projektu, ktorá je zobrazená na obrázku 7.

Steven Haines

Ak chcete zistiť, čo sa presne stalo, kliknite na zostavu a potom na ikonu Výstup konzoly, ktorý vám ukáže všetky kroky, ktoré Jenkins vykonal, a ich výsledky. Výstup konzoly je uvedený nižšie.

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