Egyszerű Jenkins csővezeték a Marathonnal és a Mesos-szal
1. Bemutatkozás
Ebben a cikkben egy egyszerű Folyamatos szállítás vezetéket fogunk megvalósítani Jenkins, Marathon és Mesos segítségével.
Először magas szintű áttekintést adunk a technológiai veremről és az architektúráról, magyarázatot adva arra, hogy minden összeillik. Ezt követően gyakorlati, lépésről lépésre haladunk.
Ennek eredménye egy teljesen automatizált Jenkins-vezeték lesz, amely a Marathon segítségével telepíti alkalmazásunkat a Mesos-klaszterünkbe.
2. A Technology Stack áttekintése
Konténerekkel és mikroszolgáltatási architektúrákkal történő munkavégzés során új működési problémákkal kell szembenéznünk, amelyeket hagyományosabb halmokkal nem tettünk volna meg.
Például egy fürtbe történő telepítéskor foglalkoznunk kell a méretezéssel, a feladatátvételsel, a hálózatépítéssel és egyebekkel. Ezeket a nehéz, elosztott számítási problémákat elosztott kernelekkel és ütemezőkkel lehet megoldani, mint például az Apache Mesos és a Marathon.
2.1. Mesos
A Mesos a legegyszerűbben fogalmazva egyetlen szerverként tekinthető, ahol az alkalmazásaink futni fognak. A valóságban van egy klaszterünk, de ez az absztrakció teszi oly hasznosá.
2.2. Maraton
A Marathon az a keretrendszer, amely az alkalmazásaink Mesos telepítésére szolgál, megoldva a számunkra nehéz problémákat (állapotfelmérés, automatikus méretezés, feladatátvétel, monitorozás stb.).
3. Beállítás és telepítés
Ez a cikk feltételezi, hogy már fut a Jenkins, a Mesos és a Marathon. Ha nem ez a helyzet, olvassa el mindegyikük hivatalos dokumentációját, hogy megtudja, hogyan állíthatja be őket. Enélkül nem tudja végrehajtani az útmutató egyik lépését sem.
4. Szállítási csővezetékünk
A következő Jenkins-vezetéket fogjuk létrehozni:
Ebben a megközelítésben nincs semmi különösebben összetett - ez a legtöbb modern CD-csővezeték áramlásának szinonimája. Esetünkben az építkezés az alkalmazás konténerbe helyezését jelenti, a telepítés pedig a Marathon használatát jelenti egy Mesos-klaszter ütemezéséhez.
5. Alkalmazásunk tesztelése és kiépítése
Az első lépés az alkalmazásunk felépítése és tesztelése. A dolgok egyszerűsége érdekében az alkalmazás, amellyel dolgozni fogunk, egy Spring Boot alkalmazás. Emiatt a keletkező tárgyunk egy futtatható jar lesz. A JRE-n kívül semmi más külső függőséggel nem rendelkezik, így a végrehajtása nagyon egyszerű.
5.1. Munkánk megteremtése
Az első dolog, amit meg akarunk tenni, a Jenkins-munkahely létrehozása. Válasszuk az „Új elem” elemet a bal oldali navigációs sávban, majd válasszuk ki a freestyle projekt létrehozása nevetmarathon-mesos-demo“:
5.2. Integrálás a Gittel
Ezután állítsuk be az alkalmazásunkat tartalmazó Github-tár klónozására:
Az egyszerűség kedvéért az adattárunk nyilvános, ami azt jelenti, hogy képesek vagyunk klónozni a https-t. Ha nem ez lenne a helyzet, és klónoznánk az SSH-t, akkor további lépés lenne egy SSH-felhasználó és a magánkulcs beállítására, túl a cikk keretein.
5.3. Build-kiváltók beállítása
Ezután állítsunk be néhány építési indítót, hogy munkánk percenként megvizsgálja az új elkötelezettségeket:
5.4. A Build szkript létrehozása
Most elmondhatjuk a munkánknak, hogy futtasson egy shell parancsfájlt. Mivel egy egyszerű Spring Boot Maven projekttel dolgozunk, csak annyit kell tennünk, hogy futtatjuk a “mvn tiszta telepítés“. Ez lefuttatja az összes tesztet, és felépíti a futtatható jarunkat:
5.5. Projektünk építése
Most beállítottuk a csővezeték elejét, indítsuk el manuálisan a „Build Now” gombra kattintva a munkán. Miután a munka befejeződött, megerősíthetjük, hogy elhaladt, ha kékként jelöljük.
6. Alkalmazásunk tárolása
Térjünk át a vezetékünk következő szakaszára, amely az alkalmazásunk csomagolása és közzététele a Dockernél. A Dockert kell használnunk, mivel a konténerek kifejezetten a Marathon kezeli. Ez nem ésszerűtlen, mivel gyakorlatilag bármi futtatható egy tárolóban. Egy olyan eszköz, mint a Marathon, könnyebben dolgozik az ezek által biztosított absztrakcióval.
6.1. A Dockerfájl létrehozása
Először hozzunk létre egy Docker fájlt a projektgyökérben. Lényegében a Dockerfile egy fájl, amely utasításokat tartalmaz a Docker Deamon számára a kép felépítéséről:
FROM openjdk: 8-jre-alpesi ADD target / mesos-marathon-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8082 ENTRYPOINT ["java", "- jar", "/ app.jar"]
Az általunk készített kép egyszerű - csak egy futtatható jar és egy shell parancs tartalmaz, amely végrehajtja, amikor a tároló elindul. Arra is ügyelnünk kell, hogy kitesszük-e azt a portot, amelyet alkalmazásunk hallgatni fog, jelen esetben a „8082” -t.
6.2. A kép közzététele
Most, hogy képesek vagyunk elkészíteni a képünket, hozzunk létre egy egyszerű bash szkriptet, amely felépíti és közzéteszi a privát Docker Hub adattárunkban, és tegyük a projektgyökérbe:
#! / 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
Előfordulhat, hogy a képet a nyilvános vagy a privát dokkoló-nyilvántartásba kell továbbítania.
A $ BUILD_NUMBER környezeti változót Jenkins tölti be, minden építéssel növekszik. Bár kissé törékeny, ez egy gyors módja annak, hogy az egyes építmények növeljék a verziószámot. A $ DOCKER_PASSWORD Jenkins is lakja, és ebben az esetben az EnvInject plugint használjuk annak titkosítása érdekében.
Bár ezt a szkriptet közvetlenül a Jenkins-ben tárolhatnánk, jobb gyakorlat, ha továbbra is a verzióvezérlésben marad, mivel ezután a projekt többi részével együtt verzióba állítható és ellenőrizhető.
6.3. Építés és kiadás a Jenkins-en
Most módosítsuk a Jenkins munkánkat, hogy a „Dockerise.sh” futtassa az edény felépítése után:
És akkor folytassuk a munkánkat, hogy újra megerősítsük, megerősítve, hogy minden működik, mire kékre vált.
7. Képünk telepítése
A vezetékünk majdnem kész. Már csak egy szakasz van, vagyis a Marathon segítségével telepíthetjük alkalmazásunkat a Mesos klaszterünkbe.
Jenkins „Deploy with Marathon” pluginnal érkezik. Ez burkolóként működik a Marathon API körül, megkönnyítve, mint a hagyományos shell parancsfájlok használatakor. Telepítheti a plugin manager segítségével.
7.1. Marathon.Json fájlunk létrehozása
A Marathon beépülő modul használata előtt létre kell hoznunk egy „marathon.json” fájlt, amelyet a projekt gyökérkönyvtárában kell tárolni. A bővítmény ugyanis ettől függ.
Ez a fájl: „marathon.json” egy Mesos alkalmazásdefiníciót tartalmaz. Ez egy régóta futó szolgáltatás (alkalmazás) leírása, amelyet futtatni akarunk. Végül a Jenkins Marathon plugin POSTOLJA a fájl tartalmát a Marathon-ra / v2 / apps végpont. A Marathon ezt követően ütemezi a meghatározott alkalmazást a Mesoson való futtatásra:
{"id": "mesos-marathon-demo", "container": {"type": "DOCKER", "docker": {"image": "", "network": "BRIDGE", "portMappings": [{"containerPort": 8082, "hostPort": 0}]}}}
Ez a legegyszerűbb konfiguráció, amelyet megadhatunk egy konténeres alkalmazáshoz.
A tulajdon: "portMappings”Helyesen kell beállítani annak érdekében, hogy alkalmazásunkat Mesos-rabszolgánktól elérhetővé tegyük. Alapvetően azt jelenti, hogy feltérképezi a konténer portját 8082, egy véletlenszerű portra a gazdagépen (mesos slave), így beszélhetünk az alkalmazásunkkal a külvilágtól. Alkalmazásunk telepítése után a Marathon elmondja, mit használt az a port.
7.2. Hozzáadhat egy maratoni bevezetési lépést
Vegyünk fel egy Marathon Deployment utómunkálatot a munkánkba:
Figyelje meg, hogy a pluginnak elmondjuk, hol fut a Marathon, ebben az esetben a „localhost: 8081”. Azt a képet is elmondjuk neki, amelyet be akarunk telepíteni. Ez az, amit a fájlunk üres "kép" mezőjére cserélünk.
Most elkészítettük csővezetékünk utolsó szakaszát, futtassuk még egyszer a munkánkat és erősítsük meg, hogy ez még mindig múlik, ezúttal azzal a további lépéssel, amikor elküldi a pályázatunkat a Marathonhoz.
7.3. A maratoni telepítésünk ellenőrzése
Most telepítették, nézzük meg a Marathon felhasználói felületét:
Mint láthatjuk, alkalmazásunk mostantól megjelenik a felhasználói felületen. Ahhoz, hogy hozzáférjünk hozzá, csak ellenőriznünk kell, hogy milyen gazdagépet és portot rendeltek hozzá:
Ebben az esetben véletlenszerűen lett kiosztva a localhost 31143-as portja, amely belsőleg hozzárendeli a tárolónkban található 8082-es portot az alkalmazásdefinícióban konfigurálva. Ezután a böngészőnkben meglátogathatjuk ezt az URL-t, hogy megerősítsük az alkalmazás megfelelő kiszolgálását.
8. Következtetés
Ebben a cikkben létrehoztunk egy egyszerű Folyamatos szállítás csővezetéket Jenkins, Marathon és Mesos felhasználásával. Amikor módosítunk egy kódot, néhány perc múlva egy környezetben fut.
A sorozat későbbi cikkei olyan fejlettebb maratoni témákkal foglalkoznak, mint például az alkalmazások állapotának ellenőrzése, méretezés, feladatátvétel. A Mesos egyéb felhasználási eseteire, például a kötegelt feldolgozásra is vonatkozhat.
Alkalmazásunk forráskódja a GitHub-on keresztül elérhető; ez egy Maven projekt, amelyet képesnek kell lennie a jelenlegi állapotban történő futtatásra.