Maqaalkan, waxaan rabaa inaan ka hadlo waayo-aragnimadayda abuurista jawi waxbarasho oo lagu tijaabinayo adeegyada yaryar. Markii aan bartay qalab kasta oo cusub, waxaan had iyo jeer doonayay inaan isku dayo ma aha oo kaliya mashiinka maxalliga ah, laakiin sidoo kale xaalado badan oo macquul ah. Sidaa darteed, waxaan go'aansaday in aan abuuro codsi microservice la fududeeyay, kaas oo mar dambe lagu "daboolan karo" dhammaan noocyada tignoolajiyada xiisaha leh. Shuruudda ugu weyn ee mashruucu waa u dhawaanshaha shaqada ugu badan ee nidaamka dhabta ah.
Markii hore, waxaan u jebiyey abuuritaanka mashruuca dhowr tallaabo:
Abuur laba adeeg - 'backend' (backend) iyo 'alteway' (albaab), ku xidho sawirada docker oo u habso inay wada shaqeeyaan
Abuuritaanka jaantus leh Helm 3 si loo maareeyo kooxeedka wanaagsan
Tags: Helm 3, jaantus geynta
Dejinta Jenkins iyo dhuumaha si toos ah koodka loogu geeyo kooxda
Erayada furaha: Qaabeynta Jenkins, plugins, meelaynta kala duwan ee kaydinta
Waxa aan qorshaynayaa in aan maqaal gaar ah u hibeeyo tallaabo kasta.
Ujeeddada maqaalladan taxanaha ah maaha sida loo qoro adeeg-yaraha, balse waa sidii looga dhigi lahaa inay ku shaqeeyaan hal nidaam. Inkasta oo dhammaan waxyaalahan oo dhan ay inta badan ka baxsan yihiin mas'uuliyadda horumariyaha, waxaan u maleynayaa inay weli faa'iido u leedahay in la barto iyaga ugu yaraan 20% (taas oo, sida aad ogtahay, sii 80% natiijada). Qaar ka mid ah mawduucyada muhiimka ah ee shuruud la'aanta ah, sida amniga, ayaa laga tagi doonaa mashruucan, maadaama qoraagu wax yar ka fahmay nidaamkan loo abuuray oo keliya isticmaalka shakhsi ahaaneed. Waxaan soo dhawaynayaa ra'yi kasta iyo dhaleecayn wax dhisaysa.
Abuuritaanka adeeg-yaraha
Adeegyada waxaa lagu qoray Java 11 iyadoo la isticmaalayo Spring Boot. Isdhexgalka interservice waxaa loo habeeyey iyadoo la isticmaalayo REST. Mashruucu waxa ku jiri doona tirada ugu yar ee imtixaanada (si markaas hadhow u jiro wax lagu tijaabiyo Jenkins). Koodhka isha ee adeegyada ayaa laga heli karaa GitHub: dhabarka dambe ΠΈ Gateway.
Si aad u awooddo in aad hubiso xaaladda mid kasta oo ka mid ah adeegyada, jileeyaha Spring ayaa lagu daray ku tiirsanaanta. Waxay abuuri doontaa / actuator/caafimaadka dhamaadka waxayna soo celin doontaa heerka 200 haddii adeeggu diyaar u yahay inuu aqbalo taraafikada, ama 504 haddii ay dhibaato jirto. Xaaladdan oo kale, tani waa jeeg khiyaali ah, maadaama adeegyadu aad u fudud yihiin, iyo haddii ay dhacdo xoog majeure, waxay u badan tahay inay noqdaan kuwo gebi ahaanba aan la heli karin intii ay qayb ahaan sii shaqayn lahaayeen. Laakiin nidaamyada dhabta ah, Actuator wuxuu kaa caawin karaa in la ogaado dhibaatada ka hor intaan isticmaalayaashu bilaabin inay la dagaallamaan. Tusaale ahaan, haddii ay jiraan dhibaatooyin gelitaanka xogta xogta, waxaanu si toos ah uga jawaabi karnaa tan annagoo joojinayna codsiyada ka shaqaynta tusaale adeeg oo jabay.
Adeegga dhamaadka dambe
Adeegga dhabarka ayaa si fudud u tirin doona oo soo celin doona tirada codsiyada la aqbalay.
Koodhka xakamaynta:
@RestController
public class RequestsCounterController {
private final AtomicLong counter = new AtomicLong();
@GetMapping("/requests")
public Long getRequestsCount() {
return counter.incrementAndGet();
}
}
Tijaabada xakamaynta:
@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void firstRequest_one() throws Exception {
mockMvc.perform(get("/requests"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("1"));
}
}
Kadinka Adeegga
Albaabka ayaa codsiga u gudbin doona adeega dhabarka, isagoo ku kordhin doona macluumaadka soo socda:
irridda id. Waxaa loo baahan yahay si ay suurtogal u tahay in la kala saaro hal tusaale oo ka mid ah albaabbada mid kale iyada oo loo marayo jawaabta serverka
Qaar ka mid ah "sirta" oo ciyaari doona doorka erayga sirta ah ee aadka muhiimka ah (lambarka furaha sirta ah ee buskudka muhiimka ah)
$ curl http://localhost:8080/
Number of requests 1 (gateway 38560358, secret "default-secret")
Wax walba way shaqaynayaan. Akhristaha fiiro gaar ah leh wuxuu ogaan doonaa in aysan jirin wax naga horjoogsanaya inaan si toos ah u galno dhabarka dambe, annagoo ka gudubnay albaabka (http://localhost:8081/requests). Si taas loo hagaajiyo, adeegyada waa in lagu daraa hal shabakad, oo albaabka kaliya waa inuu "ku dhego" dibadda.
Sidoo kale, labada adeegba waxay wadaagaan hal nidaam faylal, waxay soo saaraan durdurro iyo hal daqiiqo waxay bilaabi karaan inay farageliyaan midba midka kale. Way fiicnaan lahayd in la go'doomiyo adeegyadeena yaryar. Tan waxaa lagu gaari karaa iyadoo loo qaybinayo codsiyada mashiinada kala duwan (lacag aad u badan, adag), iyadoo la adeegsanayo mashiinnada farsamada (khayraadka degdega ah, bilawga dheer), ama isticmaalka weelka. Sida la filayo, waxaan dooran doorashada saddexaad iyo Docker sida qalab weel.
Docker
Marka la soo koobo, docker wuxuu abuuraa weelal go'doonsan, hal codsi kasta. Si aad u isticmaasho docker, waxaad u baahan tahay inaad qorto Dockerfile - tilmaamaha dhismaha iyo socodsiinta arjiga. Marka xigta, waxaad dhisi kartaa sawirka, geli kartaa diiwaanka sawirka (No. Dockerhub) oo geli adeeg-yarahaaga deegaan kasta oo xiran hal amar.
Dockerfile
Mid ka mid ah sifooyinka ugu muhiimsan ee sawirku waa cabbirkiisa. Sawir kooban ayaa si degdeg ah uga soo degi doona kaydka fog, waxa uu qaadanayaa boos yar, adeegaagu si degdeg ah ayuu u bilaaban doonaa. Sawir kasta ayaa lagu dhisay iyadoo lagu saleynayo sawirka saldhigga, waxaana lagu talinayaa in la doorto ikhtiyaarka ugu yar. Ikhtiyaarka wanaagsan waa Alpine, qaybinta Linux dhamaystiran oo leh baakadaha ugu yar.
Marka hore, aan isku dayno inaan ku qorno Dockerfile "fooraska" (waxaan isla markiiba dhihi doonaa in tani ay tahay hab xun, ha sameynin):
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]
Halkan waxaan ku isticmaaleynaa sawirka saldhigga Alpine ee JDK horay loogu rakibay si loo dhiso mashruuceena. Amarka ADD, waxaan ku darnaa tusaha src ee hadda sawirka, ku calaamadee inuu shaqeynayo (WORKDIR) oo bilow dhismaha. Amarka EXPOSE 8080 wuxuu calaamad u dhigayaa in arjiga ku jira weelka uu isticmaali doono dekeddiisa 8080 (tani kama dhigi doonto codsiga dibadda laga heli karo, laakiin waxay u oggolaan doontaa in codsiga laga galo, tusaale ahaan, weel kale oo ku yaal isla shabakadda docker. ).
Si aad adeegyada ugu xirto sawirrada, waxaad u baahan tahay inaad amarrada ka socodsiiso xididka mashruuc kasta:
docker image build . -t msvc-backend:1.0.0
Natiijadu waa sawir 456 MB ah (kaas oo sawirka salka JDK uu qabsaday 340 MB). Iyo dhammaan inkastoo xaqiiqda ah in fasalada mashruucayaga lagu tirin karo farta. Si loo dhimo cabbirka sawirkayaga:
Waxaan isticmaalnaa isku-dubarid dhowr tallaabo ah. Tallaabada ugu horreysa waxaan ku dhisi doonaa mashruuca, tallaabada labaad waxaan ku rakibi doonaa JRE ah, iyo in tallaabada saddexaad waxaan ku koobiyeyn doonaa oo dhan galay image cusub oo Alpine nadiif ah. Guud ahaan, kaliya qaybaha lagama maarmaanka ah ayaa ku jiri doona sawirka kama dambaysta ah.
Aynu isticmaalno habaynta Java. Laga bilaabo Java 9, waxaad isticmaali kartaa qalabka jlink si aad u abuurto JRE kaliya cutubyada aad u baahan tahay
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine as builder
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
FROM alpine:3.10.3 as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink
--verbose
--add-modules
java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument
--compress 2 --strip-debug --no-header-files --no-man-pages
--release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE"
--output "$JAVA_MINIMAL"
FROM alpine:3.10.3
LABEL maintainer="Anton Shelenkov [email protected]"
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY --from=builder /src/target/microservices-backend-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
Waxaan dib u abuurnaa sawirka, natiijaduna, waxay lumisay 6 jeer miisaankeeda, oo gaaraya 77 MB. Ma xuma. Intaa ka dib, sawirada diyaarsan waxaa lagu dhejin karaa diiwaanka sawirka si sawiradaadu diyaar ugu noqdaan in laga soo dejiyo internetka.
Adeegyada wada shaqaynta ee Docker
Si aan ku bilowno, adeegyadeenu waa inay ahaadaan kuwo isku shabakad ah. Waxaa jira dhowr nooc oo shabakado ah oo ku yaala docker, waxaanan isticmaalnaa kuwa ugu qadiimiga ah - buundada, taas oo kuu ogolaaneysa inaad ku xirto weelasha isku midka ah ee ku socda isla martida. Samee shabakad leh amarka soo socda:
docker network create msvc-network
Marka xigta, ku billow weelka dambe ee loo yaqaan 'backend' oo wata adeegaha-yaraha: 1.0.0 sawirka:
docker run -dit --name backend --network msvc-net microservices-backend:1.0.0
Waxaa xusid mudan in shabakadda buundada ay bixiso sanduuqa helitaanka adeegga weelasha magacyadooda. Taasi waa, adeegga dhabarka ayaa laga heli doonaa gudaha shabakadda docker-ka http://backend:8080.
Amarkan, waxaanu ku muujinaynaa inaanu u gudbinayno dekedda 80 ee aanu martida u nahay dekedda 8080 ee konteenarka. Waxaan u isticmaalnaa ikhtiyaarka env si aan u dejino doorsoomayaasha deegaanka oo si toos ah loo akhrin doono gu'ga oo aan ka saarno guryaha app-ka.
Ka dib bilawga, waanu wacnaa http://localhost/ oo hubi in wax walba ay shaqeeyaan, sida kiiskii hore.
gunaanad
Natiijo ahaan, waxaanu abuurnay laba adeeg oo yar yar, waxaanu ku xidhnay weelasha docker-ka oo aanu ku wada dirnay isla mishiinka. Nidaamka ka soo baxay, si kastaba ha ahaatee, wuxuu leeyahay tiro faa'iido darrooyin ah:
Dulqaad xumo liidata - wax walbaa waxay noogu shaqeeyaan hal server
Miisaanka liidata - marka rarka uu kordho, way fiicnaan lahayd in si toos ah loo geeyo tusaaleyaal adeeg oo dheeraad ah oo la isku dheelitiro culeyska dhexdooda