Jednostavni Jenkinsov cjevovod s maratonom i mesosom

1. Uvod

U ovom ćemo članku implementirati jednostavni cjevovod kontinuirane isporuke s Jenkinsom, Marathonom i Mesosom.

Prvo ćemo dati pregled tehnološkog niza i arhitekture na visokoj razini, s objašnjenjem kako sve odgovara. Nakon toga prijeći ćemo na praktični, korak po korak primjer.

Rezultat toga bit će potpuno automatizirani Jenkinsov cjevovod, koji će našu aplikaciju implementirati u naš Mesos klaster pomoću Marathona.

2. Pregled tehnološkog niza

Kada radimo s spremnicima i arhitekturama mikroservisa, suočavamo se s novim operativnim problemima koje ne bismo napravili s tradicionalnijim hrpama.

Na primjer, kada se postavljamo na klaster, moramo se baviti skaliranjem, preusmjeravanjem, umrežavanjem i još mnogo toga. Ovi teški, raspodijeljeni računalni problemi mogu se riješiti distribuiranim kernelima i planerom, poput Apache Mesosa i Marathona.

2.1. Mesos

Mesos, najjednostavnije rečeno, može se smatrati jedinstvenim poslužiteljem na kojem će se pokretati naše aplikacije. U stvarnosti imamo skup, ali upravo ga ta apstrakcija čini tako korisnim.

2.2. Maraton

Marathon je okvir koji se koristi za postavljanje naših aplikacija na Mesos, rješavajući za nas teške probleme (provjera zdravlja, automatsko skaliranje, preusmjeravanje, nadzor itd.).

3. Postavljanje i instalacija

Ovaj članak pretpostavlja da već imate Jenkins, Mesos i Marathon trčanje. Ako to nije slučaj, pogledajte službenu dokumentaciju svakog od njih kako biste saznali kako ih postaviti. Bez toga nećete moći implementirati nijedan od koraka u vodiču.

4. Naš cjevovod za dostavu

Stvorit ćemo sljedeći Jenkinsov cjevovod:

U ovom pristupu nema ništa posebno složeno - sinonim je za protok većine modernih CD cjevovoda. U našem slučaju, izgradnja će značiti kontejnerizaciju aplikacije, a postavljanje će značiti korištenje Marathona za planiranje na Mesos klasteru.

5. Testiranje i izgradnja naše aplikacije

Prvi korak je izgradnja i testiranje naše aplikacije. Da stvari budu jednostavne, aplikacija s kojom ćemo surađivati ​​je aplikacija Spring Boot. Zbog toga će naš nastali artefakt biti izvršna tegla. Neće imati nikakve vanjske ovisnosti osim JRE-a, što ga čini vrlo jednostavnim za izvršavanje.

5.1. Stvaranje našeg posla

Prvo što želimo učiniti je stvoriti svoj posao Jenkins. Odaberite lijevu stavku na lijevoj navigacijskoj traci, a zatim odaberite Stvori projekt slobodnog stila, nazvavši ga "marathon-mesos-demo:

5.2. Integriranje s Gitom

Dalje, konfigurirajmo ga da klonira spremište Github koje sadrži našu aplikaciju:

Radi jednostavnosti, naše je spremište javno, što znači da smo u mogućnosti klonirati preko https-a. Ako to nije bio slučaj i klonirali smo SSH, bio bi dodatni korak za postavljanje SSH korisnika i privatnog ključa, izvan opsega ovog članka.

5.3. Postavljanje okidača gradnje

Dalje, postavimo neke okidače gradnje kako bi naš posao svake minute ispitivao git za nove obveze:

5.4. Generiranje naše skripte za izgradnju

Sada možemo reći svom poslu da izvrši skriptu ljuske kad se izvrši. Kako radimo s jednostavnim projektom Spring Boot Maven, sve što trebamo je pokrenuti naredbu “mvn čista instalacija“. Ovo će pokrenuti sve testove i izgraditi našu izvršnu jar:

5.5. Izgradnja našeg projekta

Sada smo postavili početak našeg cjevovoda, pokrenimo ga ručno klikom na "Izgradi sada" na poslu. Nakon što je posao završen, možemo potvrditi da je prošao tako što je označen plavom bojom.

6. Sadržaj naše prijave

Krenimo na sljedeću fazu našeg cjevovoda, a to je pakiranje i objavljivanje naše aplikacije s Dockerom. Moramo koristiti Docker jer kontejneri upravo upravljaju maratonom. To nije nerazumno jer se u spremniku može pokretati gotovo sve. Alatu poput Marathona lakše je raditi s apstrakcijom koju im daju.

6.1. Stvaranje datoteke Docker

Prvo, stvorimo Dockerfile u korijenu projekta. U osnovi, Dockerfile je datoteka koja sadrži upute Docker Deamonu o tome kako izgraditi sliku:

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

Slika koju gradimo je jednostavna - sadrži samo izvršnu jar i naredbu ljuske koja će je izvršiti kad se spremnik pokrene. Također moramo biti sigurni da izlažemo port koji će naša aplikacija preslušati, u ovom slučaju ‘8082’.

6.2. Objavljivanje slike

Sad kad smo u mogućnosti izgraditi svoju sliku, stvorimo jednostavnu bash skriptu koja je gradi i objavljuje u našem privatnom spremištu Docker Hub-a i stavimo u korijen našeg projekta:

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

Možda ćete trebati gurnuti svoju sliku u javni registar dockera ili u vaš privatni.

The $ BUILD_NUMBER varijablu okoline naseljava Jenkins, povećavajući se svakom gradnjom. Iako je pomalo lomljiv, to je brzi način za povećanje broja verzija svake verzije. The $ DOCKER_PASSWORD je također naseljen Jenkinsom, au ovom ćemo slučaju koristiti dodatak EnvInject kako bismo ga zaštitili u tajnosti.

Iako bismo ovu skriptu mogli pohraniti izravno u Jenkins, bolja je praksa da ostane u kontroli verzija, jer se tada može verzionirati i revidirati zajedno s ostatkom našeg projekta.

6.3. Izgradnja i izdavaštvo na Jenkinsu

Sada izmijenimo naš Jenkinsov posao tako da pokreće "Dockerise.sh" nakon izrade staklenke:

A onda, pokrenimo svoj posao kako bismo ponovno potvrdili, potvrđujući da sve funkcionira tako što postaje plavo.

7. Primena naše slike

Naš je cjevovod gotovo završen. Postoji samo još jedna faza, a to je korištenje Marathona za postavljanje naše aplikacije na naš Mesos klaster.

Jenkins dolazi s dodatkom "Deploy with Marathon". Ovo djeluje kao omot oko API-ja Marathon, što ga čini lakšim nego što bi to bilo slučaj prilikom rada s tradicionalnim skriptiranjem ljuske. Možete ga instalirati putem upravitelja dodataka.

7.1. Stvaranje našeg maratona.Json datoteka

Prije nego što možemo upotrijebiti dodatak Marathon, moramo stvoriti datoteku "marathon.json" i pohraniti je u korijen našeg projekta. To je zato što dodatak ovisi o njemu.

Ova datoteka: "marathon.json" sadrži definiciju aplikacije Mesos. Ovo je opis dugotrajne usluge (aplikacije) koju želimo pokrenuti. U konačnici, dodatak Jenkins Marathon POSTAVIT će sadržaj datoteke na Maraton / v2 / apps krajnja točka. Marathon će zauzvrat zakazati definiranu aplikaciju za pokretanje na Mesosu:

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

Ovo je najjednostavnija konfiguracija koju možemo dati za spremničku aplikaciju.

Vlasništvo: "portMappings”Mora biti ispravno postavljen kako bi naša aplikacija bila dostupna od našeg Mesos slave-a. To u osnovi znači mapiranje luke spremnika 8082, na slučajni priključak na hostu (mesos slave) kako bismo mogli razgovarati s našom aplikacijom iz vanjskog svijeta. Nakon postavljanja naše aplikacije, Marathon će nam reći što je ta luka koristila.

7.2. Dodavanje koraka gradnje postavljanja maratona

Dodajmo u svoj posao radnju postavljanja maratona nakon izgradnje:

Primijetite da dodatku kažemo gdje trči Marathon, u ovom slučaju ‘localhost: 8081’. Također mu kažemo sliku koju želimo primijeniti. To je ono čime se prazno polje "slika" u našoj datoteci zamjenjuje.

Sad smo stvorili završnu fazu našeg cjevovoda, pokrenimo još jednom svoj posao i potvrdimo da još uvijek prolazi, ovaj put s dodatnim korakom u kojem šalje našu prijavu na Marathon.

7.3. Provjera našeg raspoređivanja u maratonu

Sada je postavljen, pogledajmo u korisničkom sučelju za maraton:

Kao što vidimo, naša je aplikacija sada prikazana u korisničkom sučelju. Da bismo mu pristupili, samo trebamo provjeriti kojem su hostu i priključku dodijeljeni:

U ovom je slučaju slučajno dodijeljen priključak 31143 na localhostu, koji će se interno preslikati na priključak 8082 u našem spremniku kako je konfigurirano u definiciji aplikacije. Tada možemo posjetiti ovaj URL u našem pregledniku kako bismo potvrdili da se aplikacija pravilno poslužuje.

8. Zaključak

U ovom smo članku stvorili jednostavan cjevovod kontinuirane isporuke koristeći Jenkins, Marathon i Mesos. Kad god pritisnemo promjenu koda, ona će se pokrenuti u okruženju nekoliko minuta kasnije.

Kasniji članci iz ove serije obrađivat će naprednije maratonske teme, poput provjere zdravstvenog stanja aplikacija, skaliranja, preusmjeravanja. Mogu biti obuhvaćeni i drugi slučajevi upotrebe Mesosa, poput skupne obrade.

Izvorni kod za našu aplikaciju dostupan je na više od GitHub; ovo je Maven projekt koji bi trebao biti u mogućnosti pokrenuti se kakav jest.


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