Jednoduchý Jenkins Pipeline s Marathon a Mesos

1. Úvod

V tomto článku budeme implementovať jednoduchý plynovod Continuous Delivery s programami Jenkins, Marathon a Mesos.

Najskôr poskytneme prehľad na vysokej úrovni o technologickom zásobníku a architektúre s vysvetlením, ako všetko do seba zapadá. Potom prejdeme k praktickému príkladu krok za krokom.

Výsledkom bude plne automatizovaný Jenkinsov kanál, ktorý nasadí našu aplikáciu do nášho klastra Mesos pomocou Marathonu.

2. Prehľad zásobníka technológií

Pri práci s kontajnermi a architektúrami mikroslužieb čelíme novým prevádzkovým problémom, ktoré by sme s tradičnejšími zásobníkmi neurobili.

Napríklad pri nasadení do klastra sa musíme vyrovnať so škálovaním, zlyhaním, sieťami a ďalšími. Tieto ťažké problémy s distribuovaným výpočtom je možné vyriešiť pomocou distribuovaných jadier a plánovačov, ako sú Apache Mesos a Marathon.

2.1. Mesos

Zjednodušene možno Mesos považovať za jediný server, na ktorom budú spustené naše aplikácie. V skutočnosti máme zhluk, ale práve táto abstrakcia ho robí tak užitočným.

2.2. Maratón

Marathon je rámec, ktorý sa používa na nasadenie našich aplikácií do systému Mesos a na riešenie našich problémov (kontrola zdravia, automatické škálovanie, prepnutie po zlyhaní, monitorovanie atď.).

3. Inštalácia a inštalácia

Tento článok predpokladá, že už máte bežať Jenkins, Mesos a Marathon. Ak to tak nie je, prečítajte si v oficiálnej dokumentácii každého z nich a zistite, ako ich nastaviť. Bez toho nebudete môcť vykonať žiadny z krokov v sprievodcovi.

4. Naše doručovacie potrubie

Budeme vytvárať nasledujúci Jenkinsov kanál:

Na tomto prístupe nie je nič zvlášť zložité - je synonymom pre tok najmodernejších potrubí CD. V našom prípade bude stavba znamenať kontajnerizáciu aplikácie a nasadenie bude znamenať použitie programu Marathon na jeho naplánovanie na klastri Mesos.

5. Testovanie a vytváranie našej aplikácie

Prvým krokom je zostavenie a otestovanie našej aplikácie. Aby sme to zjednodušili, aplikácia, s ktorou budeme pracovať, je aplikácia Spring Boot. Z tohto dôvodu bude náš výsledný artefakt spustiteľný súbor jar. Nebude mať iné externé závislosti ako JRE, čo je veľmi jednoduché pri jeho vykonávaní.

5.1. Vytvorenie našej práce

Prvá vec, ktorú chceme urobiť, je vytvoriť našu Jenkinsovu prácu. Na ľavom navigačnom paneli vyberte možnosť „Nová položka“ a potom vyberte vytvorenie projektu voľného štýlu a pomenujte ho.marathon-mesos-demo:

5.2. Integrácia s Gitom

Ďalej ho nakonfigurujme na klonovanie úložiska Github obsahujúceho našu aplikáciu:

Z dôvodu jednoduchosti je naše úložisko verejné, čo znamená, že sme schopní klonovať cez https. Keby to tak nebolo a klonovali by sme SSH, došlo by k ďalšiemu kroku, ktorý by nad rámec tohto článku nastavil používateľa a súkromný kľúč SSH.

5.3. Nastavenie spúšťačov zostavy

Ďalej nastavíme niekoľko spúšťačov zostavenia, aby naša práca každú minútu zisťovala, či sú k dispozícii nové potvrdenia:

5.4. Generuje sa náš zostavovací skript

Teraz môžeme povedať našej úlohe, aby vykonala shell skript, keď je spustený. Pretože pracujeme s jednoduchým projektom Spring Boot Maven, musíme spustiť príkaz „mvn čistá inštalácia„. Spustia sa všetky testy a vytvorí sa náš spustiteľný súbor jar:

5.5. Budovanie nášho projektu

Teraz sme nastavili začiatok nášho kanálu, spustíme ho ručne kliknutím na položku „Vytvoriť teraz“ v úlohe. Po dokončení úlohy môžeme označiť ako modrú farbu potvrdenie, že prešla.

6. Kontajnerovanie našej aplikácie

Prejdime k ďalšej fáze nášho ropovodu, ktorým je balenie a zverejnenie našej aplikácie spolu s Dockerom. Musíme použiť Docker, pretože kontajnery sú konkrétne to, čo spravuje Marathon. To nie je nerozumné, pretože v kontajneri môže bežať skutočne všetko. Pre nástroj ako Marathon je jednoduchšie pracovať s abstrakciou, ktorú poskytujú.

6.1. Vytváranie Dockerfile

Najskôr si vytvoríme Dockerfile v koreňovom adresári projektu. Dockerfile je v podstate súbor obsahujúci pokyny pre Docker Deamon, ako vytvoriť obraz:

FROM openjdk: 8-jre-alpine ADD target / mesos-marathon-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8082 ENTRYPOINT ["java", "- jar", "/ app.jar"]

Obrázok, ktorý vytvárame, je jednoduchý - obsahuje iba spustiteľný súbor jar a príkaz shell, ktorý ho vykoná pri spustení kontajnera. Musíme sa tiež uistiť, že vystavujeme port, na ktorom bude naša aplikácia počúvať, v tomto prípade „8082“.

6.2. Zverejnenie obrázka

Teraz, keď sme schopní vytvoriť náš obraz, vytvorme jednoduchý bash skript, ktorý ho vytvorí a zverejní v našom súkromnom úložisku Docker Hub a vložíme ho do koreňového adresára projektu:

#! / usr / bin / env bash set -e docker login -u baeldung -p $ DOCKER_PASSWORD docker build -t baeldung / mesos-marathon-demo: $ BUILD_NUMBER. docker push baeldung / mesos-marathon-demo: $ BUILD_NUMBER 

Možno budete musieť poslať svoj obrázok do verejného doku alebo do svojho súkromného doku.

The $ BUILD_NUMBER Premenná prostredia je vyplnená Jenkinsom, pričom sa zvyšuje s každou zostavou. Aj keď je mierne krehký, je to rýchly spôsob, ako dosiahnuť, aby sa pri každom zostavení zvýšil počet verzií. The $ DOCKER_PASSWORD je tiež osídlený Jenkinsom a v tomto prípade využijeme doplnok EnvInject, aby sme ho uchovali v tajnosti.

Aj keď sme mohli tento skript uložiť priamo do Jenkinsa, je lepšou praxou zostať v riadení verzií, pretože potom môže byť verzovaný a kontrolovaný spolu so zvyškom nášho projektu.

6.3. Budovanie a publikovanie na serveri Jenkins

Teraz poďme upraviť našu úlohu Jenkins tak, aby po vytvorení pohára spustila súbor „Dockerise.sh“:

A potom spustíme našu prácu a znova potvrdíme, že všetko funguje tým, že sa zmení na modro.

7. Nasadenie nášho obrazu

Náš plynovod je takmer dokončený. Existuje ešte len jedna etapa, ktorou je použitie Marathon na nasadenie našej aplikácie do nášho klastra Mesos.

Jenkins je dodávaný s doplnkom „Deploy with Marathon“. Funguje to ako obal okolo Marathon API, takže je to jednoduchšie, ako by to bolo pri práci s tradičným skriptom shell. Môžete si ho nainštalovať prostredníctvom správcu doplnkov.

7.1. Vytváranie nášho súboru Marathon.Json

Predtým, ako budeme môcť používať doplnok Marathon, musíme vytvoriť súbor „marathon.json“ a uložiť ho do koreňového adresára projektu. Je to preto, že doplnok je na ňom závislý.

Tento súbor: „marathon.json“ obsahuje definíciu aplikácie Mesos. Toto je popis dlhodobej služby (aplikácie), ktorú chceme spustiť. Zásuvný modul Jenkins Marathon nakoniec POSTE obsah súboru do Maratónu / v2 / aplikácie koncový bod. Marathon potom naplánuje spustenie definovanej aplikácie na Mesos:

{"id": "mesos-marathon-demo", "container": {"type": "DOCKER", "docker": {"image": "", "network": "BRIDGE", "portMappings": [{"containerPort": 8082, "hostPort": 0}]}}}

Toto je najjednoduchšia konfigurácia, ktorú môžeme poskytnúť pre kontajnerovú aplikáciu.

Vlastníctvo: "portMappings„Je potrebné správne nastaviť, aby bola naša aplikácia prístupná od nášho otroka Mesos. V podstate to znamená zmapovať prístav kontajnera 8082, na náhodný port hostiteľa (mesos slave), aby sme mohli hovoriť s našou aplikáciou z vonkajšieho sveta. Po nasadení našej aplikácie nám Marathon povie, čo tento port používal.

7.2. Pridanie kroku zostavenia nasadenia v maratóne

Pridajme do našej práce akciu Post Marathon Deployment:

Všimnite si, že informujeme doplnok, kde beží Marathon, v tomto prípade ‘localhost: 8081’. Hovoríme tomu aj obraz, ktorý chceme nasadiť. Týmto sa nahradí prázdne pole „obrázok“ v našom súbore.

Teraz sme vytvorili poslednú fázu nášho ropovodu, poďme ešte raz spustiť našu prácu a potvrdiť, že stále prechádza, tentokrát s ďalším krokom, v ktorom odošle našu aplikáciu na Marathon.

7.3. Overuje sa naše nasadenie v maratóne

Teraz je nasadený, poďme sa pozrieť na užívateľské rozhranie Marathon:

Ako vidíme, naša aplikácia sa teraz zobrazuje v používateľskom rozhraní. Aby sme k nej mali prístup, stačí skontrolovať, akému hostiteľovi a portu je priradený:

V tomto prípade bol náhodne pridelený port 31143 na localhost, ktorý sa interne namapuje na port 8082 v našom kontajneri, ako je nakonfigurovaný v definícii aplikácie. Potom môžeme túto adresu URL navštíviť v našom prehliadači a potvrdiť, že sa aplikácia poskytuje správne.

8. Záver

V tomto článku sme vytvorili jednoduchý plynovod Continuous Delivery pomocou Jenkins, Marathon a Mesos. Kedykoľvek stlačíme zmenu nášho kódu, spustí sa v prostredí o niekoľko minút neskôr.

Neskoršie články v tejto sérii sa budú venovať pokročilejším témam maratónu, ako je kontrola stavu aplikácií, zmena mierky, prepnutie po zlyhaní. Zahrnuté môžu byť aj ďalšie prípady použitia produktu Mesos, napríklad dávkové spracovanie.

Zdrojový kód našej aplikácie je k dispozícii na stránkach GitHub; toto je projekt Maven, ktorý by mal byť schopný bežať tak, ako je.


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