Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

Fi proġetti relatati mal-iżvilupp tal-arkitettura tal-mikroservizz, CI/CD jiċċaqlaq mill-kategorija ta 'opportunità pjaċevoli għall-kategorija ta' ħtieġa urġenti. L-ittestjar awtomatizzat huwa parti integrali mill-integrazzjoni kontinwa, li approċċ kompetenti għalih jista 'jagħti lit-tim ħafna serati pjaċevoli mal-familja u l-ħbieb. Inkella, il-proġett jirriskja li qatt ma jitlesta.

Huwa possibbli li tkopri l-kodiċi tal-mikroservizz kollu b'testijiet ta 'unità b'oġġetti finta, iżda dan issolvi biss parzjalment il-problema u jħalli ħafna mistoqsijiet u diffikultajiet, speċjalment meta tittestja x-xogħol bid-dejta. Bħal dejjem, dawk l-aktar urġenti huma l-ittestjar tal-konsistenza tad-dejta f'database relazzjonali, l-ittestjar tax-xogħol mas-servizzi tal-cloud, u li jagħmlu suppożizzjonijiet żbaljati meta tikteb oġġetti mock.

Dan kollu u ftit aktar jistgħu jiġu solvuti billi jiġi ttestjat il-mikroservizz kollu f'kontenitur Docker. Vantaġġ bla dubju biex tiġi żgurata l-validità tat-testijiet huwa li jiġu ttestjati l-istess immaġini Docker li jidħlu fil-produzzjoni.

L-awtomazzjoni ta' dan l-approċċ tippreżenta għadd ta' problemi, li s-soluzzjoni għalihom se tiġi deskritta hawn taħt:

  • kunflitti ta' kompiti paralleli fl-istess docker host;
  • kunflitti ta' identifikaturi fid-database waqt iterazzjonijiet tat-test;
  • stennija li l-mikroservizzi jkunu lesti;
  • Għaqda u ħruġ ta' zkuk għal sistemi esterni;
  • ittestjar ta' talbiet HTTP ħerġin;
  • Ittestjar ta' socket tal-web (bl-użu ta' SignalR);
  • ittestjar tal-awtentikazzjoni u l-awtorizzazzjoni OAuth.

Dan l-artikolu huwa bbażat fuq id-diskors tiegħi fis-SECR 2019. Allura għal dawk li huma għażżien wisq biex jaqraw, hawn reġistrazzjoni tad-diskors.

Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

F'dan l-artikolu ser ngħidlek kif tuża script biex tmexxi s-servizz taħt test, database u servizzi Amazon AWS f'Docker, imbagħad testijiet fuq Postman u, wara li jitlestew, waqqaf u ħassar il-kontenituri maħluqa. It-testijiet isiru kull darba li l-kodiċi jinbidel. B'dan il-mod, aħna niżguraw li kull verżjoni taħdem b'mod korrett mad-database u s-servizzi tal-AWS.

L-istess skript jitmexxa kemm mill-iżviluppaturi nfushom fuq id-desktops tal-Windows tagħhom kif ukoll mis-server Gitlab CI taħt Linux.

Biex tkun iġġustifikata, l-introduzzjoni ta' testijiet ġodda m'għandhiex teħtieġ l-installazzjoni ta' għodod addizzjonali la fuq il-kompjuter tal-iżviluppatur jew fuq is-server fejn it-testijiet isiru fuq commit.Docker issolvi din il-problema.

It-test irid jaħdem fuq server lokali għar-raġunijiet li ġejjin:

  • In-netwerk qatt ma huwa kompletament affidabbli. Minn elf talba, wieħed jista’ jfalli;
    F'dan il-każ, it-test awtomatiku ma jaħdimx, ix-xogħol se jieqaf, u jkollok tfittex ir-raġuni fir-zkuk;
  • Talbiet frekwenti wisq mhumiex permessi minn xi servizzi ta’ partijiet terzi.

Barra minn hekk, mhux mixtieq li tuża l-istand minħabba li:

  • Stand jista 'jinkisser mhux biss minn kodiċi ħażin li jaħdem fuqu, iżda wkoll minn data li l-kodiċi korrett ma jistax jipproċessa;
  • Ma jimpurtax kemm nippruvaw nerġgħu lura l-bidliet kollha li saru mit-test matul it-test innifsu, xi ħaġa tista' tmur ħażin (inkella, għaliex it-test?).

Dwar il-proġett u l-organizzazzjoni tal-proċess

Il-kumpanija tagħna żviluppat applikazzjoni tal-web tal-mikroservizz li taħdem f'Docker fil-sħab tal-Amazon AWS. It-testijiet tal-unità kienu diġà użati fuq il-proġett, iżda spiss seħħew żbalji li t-testijiet tal-unità ma skoprewx. Kien meħtieġ li jiġi ttestjat mikroservizz kollu flimkien mad-database u s-servizzi tal-Amazon.

Il-proġett juża proċess ta 'integrazzjoni kontinwa standard, li jinkludi l-ittestjar tal-mikroservizz ma' kull impenn. Wara li jassenja kompitu, l-iżviluppatur jagħmel bidliet fil-mikroservizz, jittestjah manwalment u jwettaq it-testijiet awtomatizzati kollha disponibbli. Jekk meħtieġ, l-iżviluppatur jibdel it-testijiet. Jekk ma jinstabu l-ebda problemi, isir impenn għall-fergħa ta 'din il-kwistjoni. Wara kull impenn, it-testijiet jitmexxew awtomatikament fuq is-server. L-għaqda f'fergħa komuni u t-tnedija ta' testijiet awtomatiċi fuqha sseħħ wara reviżjoni b'suċċess. Jekk it-testijiet fuq il-fergħa kondiviża jgħaddu, is-servizz jiġi aġġornat awtomatikament fl-ambjent tat-test fuq Amazon Elastic Container Service (bank). L-istand huwa meħtieġ għall-iżviluppaturi u t-testers kollha, u mhux rakkomandabbli li tkisser. Dawk li jittestjaw f'dan l-ambjent jiċċekkjaw soluzzjoni jew karatteristika ġdida billi jwettqu testijiet manwali.

Arkitettura tal-proġett

Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

L-applikazzjoni tikkonsisti f'aktar minn għaxar servizzi. Xi wħud minnhom huma miktuba f'.NET Core u xi wħud f'NodeJs. Kull servizz jaħdem f'kontenitur Docker fl-Amazon Elastic Container Service. Kull wieħed għandu d-database Postgres tiegħu, u xi wħud għandhom ukoll Redis. M'hemm l-ebda databases komuni. Jekk diversi servizzi jeħtieġu l-istess dejta, allura din id-dejta, meta tinbidel, tiġi trażmessa lil kull wieħed minn dawn is-servizzi permezz ta 'SNS (Servizz ta' Notifika Sempliċi) u SQS (Servizz ta 'Amazon Simple Queue), u s-servizzi jiffrankawha fid-databases separati tagħhom stess.

SQS u SNS

SQS jippermettilek tpoġġi messaġġi fi kju u taqra messaġġi mill-kju billi tuża l-protokoll HTTPS.

Jekk diversi servizzi jaqraw kju wieħed, allura kull messaġġ jasal biss lil wieħed minnhom. Dan huwa utli meta tħaddem diversi każijiet tal-istess servizz biex tqassam it-tagħbija bejniethom.

Jekk trid li kull messaġġ jitwassal lil servizzi multipli, kull riċevitur għandu jkollu l-kju tiegħu stess, u SNS huwa meħtieġ biex jidduplika messaġġi f'kjuwijiet multipli.

Fl-SNS inti toħloq suġġett u tabbona għalih, pereżempju, kju SQS. Tista 'tibgħat messaġġi lis-suġġett. F'dan il-każ, il-messaġġ jintbagħat lil kull kju abbonat għal dan is-suġġett. SNS m'għandux metodu għall-qari tal-messaġġi. Jekk waqt id-debugging jew l-ittestjar għandek bżonn issir taf x'inhu mibgħut lill-SNS, tista 'toħloq kju SQS, tabbonaha għas-suġġett mixtieq u aqra l-kju.

Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

API Gateway

Il-biċċa l-kbira tas-servizzi mhumiex aċċessibbli direttament mill-Internet. L-aċċess isir permezz tal-API Gateway, li jiċċekkja d-drittijiet tal-aċċess. Dan huwa wkoll is-servizz tagħna, u hemm testijiet għalih ukoll.

Notifiki f'ħin reali

L-applikazzjoni tuża SinjalRbiex turi notifiki f'ħin reali lill-utent. Dan huwa implimentat fis-servizz tan-notifika. Huwa aċċessibbli direttament mill-Internet u nnifsu jaħdem ma 'OAuth, minħabba li rriżulta li ma kienx prattiku li jinbena appoġġ għal sockets tal-Web f'Gateway, meta mqabbel ma' l-integrazzjoni ta 'OAuth u s-servizz ta' notifika.

Approċċ tal-Ittestjar Magħruf

It-testijiet tal-unità jissostitwixxu affarijiet bħall-database b'oġġetti mock. Jekk mikroservizz, pereżempju, jipprova joħloq rekord f'tabella b'ċavetta barranija, u r-rekord referenzjat minn dik iċ-ċavetta ma jeżistix, allura t-talba ma tistax tiġi esegwita. It-testijiet unitarji ma jistgħux jiskopru dan.

В artikolu minn Microsoft Huwa propost li tintuża database fil-memorja u jiġu implimentati oġġetti mock.

Id-database fil-memorja hija waħda mid-DBMSs appoġġjati mill-Qafas tal-Entitajiet. Inħoloq speċifikament għall-ittestjar. Data f'database bħal din tinħażen biss sakemm jintemm il-proċess li jużaha. Ma jeħtieġx li jinħolqu tabelli u ma jiċċekkjax l-integrità tad-dejta.

L-oġġetti mock jimmudellaw il-klassi li qed jissostitwixxu biss sal-punt li l-iżviluppatur tat-test jifhem kif taħdem.

Kif tikseb Postgres biex awtomatikament jibda u jwettaq migrazzjonijiet meta tmexxi test mhuwiex speċifikat fl-artikolu ta 'Microsoft. Is-soluzzjoni tiegħi tagħmel dan u, barra minn hekk, ma żżid l-ebda kodiċi speċifikament għat-testijiet mal-mikroservizz innifsu.

Ejja ngħaddu għas-soluzzjoni

Matul il-proċess ta 'żvilupp, deher ċar li t-testijiet tal-unità ma kinux biżżejjed biex jinstabu l-problemi kollha fil-ħin, għalhekk ġie deċiż li din il-kwistjoni tiġi approċċata minn angolu differenti.

Twaqqif ta' ambjent tat-test

L-ewwel kompitu huwa li tuża ambjent tat-test. Passi meħtieġa biex jitħaddem mikroservizz:

  • Ikkonfigura s-servizz taħt test għall-ambjent lokali, speċifika d-dettalji għall-konnessjoni mad-database u AWS fil-varjabbli ambjentali;
  • Ibda Postgres u wettaq il-migrazzjoni billi tħaddem Liquibase.
    F'DBMSs relazzjonali, qabel ma tikteb data fid-database, għandek bżonn toħloq skema tad-data, fi kliem ieħor, tabelli. Meta tiġi aġġornata applikazzjoni, it-tabelli għandhom jinġiebu fil-forma użata mill-verżjoni l-ġdida, u, preferibbilment, mingħajr ma tintilef id-dejta. Din tissejjaħ migrazzjoni. Il-ħolqien ta' tabelli f'database inizjalment vojta huwa każ speċjali ta' migrazzjoni. Il-migrazzjoni tista' tinbena fl-applikazzjoni nnifisha. Kemm .NET kif ukoll NodeJS għandhom oqfsa ta 'migrazzjoni. Fil-każ tagħna, għal raġunijiet ta 'sigurtà, il-mikroservizzi huma mċaħħda mid-dritt li jibdlu l-iskema tad-dejta, u l-migrazzjoni titwettaq bl-użu ta' Liquibase.
  • Tnedija Amazon LocalStack. Din hija implimentazzjoni tas-servizzi tal-AWS biex titħaddem id-dar. Hemm immaġni lesta għal LocalStack fuq Docker Hub.
  • Mexxi l-iskript biex toħloq l-entitajiet meħtieġa f'LocalStack. L-iskripts Shell jużaw l-AWS CLI.

Użat għall-ittestjar fuq il-proġett Postier. Kien jeżisti qabel, iżda ġie mniedi manwalment u ttestjat applikazzjoni diġà skjerata fl-istand. Din l-għodda tippermettilek tagħmel talbiet HTTP(S) arbitrarji u tiċċekkja jekk it-tweġibiet jaqblux mal-aspettattivi. Il-mistoqsijiet huma kkombinati f'ġabra, u l-ġbir kollu jista 'jitwettaq.

Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

Kif jaħdem it-test awtomatiku?

Matul it-test, kollox jaħdem f'Docker: is-servizz taħt test, Postgres, l-għodda tal-migrazzjoni, u Postman, jew aħjar il-verżjoni tal-console tiegħu - Newman.

Docker issolvi għadd ta' problemi:

  • Indipendenza mill-konfigurazzjoni ospitanti;
  • Installazzjoni tad-dipendenzi: Docker tniżżel immaġini minn Docker Hub;
  • Ir-ritorn tas-sistema għall-istat oriġinali tagħha: sempliċiment tneħħi l-kontenituri.

Docker-jikkomponi jgħaqqad kontenituri f'netwerk virtwali, iżolat mill-Internet, li fih il-kontenituri jsibu lil xulxin bl-ismijiet tad-dominju.

It-test huwa kkontrollat ​​minn script shell. Biex tmexxi t-test fuq il-Windows nużaw git-bash. Għalhekk, skript wieħed huwa biżżejjed kemm għall-Windows kif ukoll għall-Linux. Git u Docker huma installati mill-iżviluppaturi kollha fuq il-proġett. Meta tinstalla Git fuq Windows, git-bash huwa installat, għalhekk kulħadd għandu dan ukoll.

L-iskrittura twettaq il-passi li ġejjin:

  • Stampi tal-bini tad-docker
    docker-compose build
  • Tnedija tad-database u LocalStack
    docker-compose up -d <контейнер>
  • Migrazzjoni tad-database u preparazzjoni ta' LocalStack
    docker-compose run <контейнер>
  • Tnedija tas-servizz taħt test
    docker-compose up -d <сервис>
  • Tmexxi t-test (Newman)
  • Twaqqaf il-kontenituri kollha
    docker-compose down
  • Ir-riżultati tal-istazzjonar fi Slack
    Għandna chat fejn imorru messaġġi b'marka ħadra jew salib ħamra u link għall-log.

L-immaġini Docker li ġejjin huma involuti f'dawn il-passi:

  • Is-servizz li qed jiġi ttestjat huwa l-istess immaġni bħall-produzzjoni. Il-konfigurazzjoni għat-test hija permezz ta 'varjabbli ambjentali.
  • Għal Postgres, Redis u LocalStack, jintużaw immaġini lesti minn Docker Hub. Hemm ukoll immaġini lesti għal Liquibase u Newman. Aħna nibnu tagħna fuq l-iskeletru tagħhom, inżidu l-fajls tagħna hemmhekk.
  • Biex tipprepara LocalStack, tuża immaġni AWS CLI lesta u toħloq immaġni li jkun fiha skript ibbażat fuqha.

Bl-użu volumi, m'għandekx għalfejn tibni immaġni Docker biss biex iżżid fajls mal-kontenitur. Madankollu, il-volumi mhumiex adattati għall-ambjent tagħna minħabba li l-kompiti Gitlab CI nfushom jimxu f'kontenituri. Tista 'tikkontrolla Docker minn kontenitur bħal dan, iżda l-volumi jimmontaw biss folders mis-sistema ospitanti, u mhux minn kontenitur ieħor.

Problemi li tista’ tiltaqa’ magħhom

Stennija għall-prontezza

Meta kontejner b'servizz ikun qed jaħdem, dan ma jfissirx li huwa lest li jaċċetta konnessjonijiet. Trid tistenna li l-konnessjoni tkompli.

Din il-problema xi drabi tissolva bl-użu ta 'kitba tistenna.sh, li jistenna opportunità biex tiġi stabbilita konnessjoni TCP. Madankollu, LocalStack jista' jarmi żball 502 Bad Gateway. Barra minn hekk, tikkonsisti f'ħafna servizzi, u jekk wieħed minnhom ikun lest, dan ma jgħid xejn dwar l-oħrajn.

deċiżjoni: skripts ta' forniment ta' LocalStack li jistennew rispons ta' 200 kemm minn SQS kif ukoll minn SNS.

Kunflitti ta' Kompiti Parallel

Testijiet multipli jistgħu jaħdmu simultanjament fuq l-istess host Docker, għalhekk l-ismijiet tal-kontenituri u tan-netwerks għandhom ikunu uniċi. Barra minn hekk, it-testijiet minn fergħat differenti tal-istess servizz jistgħu wkoll isiru simultanjament, għalhekk mhux biżżejjed li tikteb isimhom f'kull fajl ta 'komponiment.

deċiżjoni: L-iskritt jistabbilixxi l-varjabbli COMPOSE_PROJECT_NAME għal valur uniku.

Karatteristiċi tal-Windows

Hemm numru ta 'affarijiet li rrid nirrimarka meta nuża Docker fuq il-Windows, peress li dawn l-esperjenzi huma importanti biex nifhmu għaliex iseħħu żbalji.

  1. L-iskripts tal-shell f'kontenitur għandu jkollhom truf tal-linja Linux.
    Is-simbolu CR tal-qoxra huwa żball ta' sintassi. Huwa diffiċli li tgħid mill-messaġġ ta 'żball li dan huwa l-każ. Meta teditja skripts bħal dawn fuq il-Windows, għandek bżonn editur tat-test xieraq. Barra minn hekk, is-sistema ta 'kontroll tal-verżjoni għandha tkun ikkonfigurata kif suppost.

Dan huwa kif git huwa kkonfigurat:

git config core.autocrlf input

  1. Git-bash jimita folders standard tal-Linux u, meta jsejjaħ fajl exe (inkluż docker.exe), jissostitwixxi mogħdijiet Linux assoluti b'mogħdijiet Windows. Madankollu, dan ma jagħmilx sens għal mogħdijiet mhux fuq il-magna lokali (jew mogħdijiet f'kontenitur). Din l-imġieba ma tistax tiġi diżattivata.

deċiżjoni: żid slash addizzjonali fil-bidu tat-triq: //bin minflok /bin. Linux jifhem mogħdijiet bħal dawn; għaliha, diversi slashes huma l-istess bħal waħda. Iżda git-bash ma jagħrafx mogħdijiet bħal dawn u ma jipprovax jikkonvertihom.

L-output tal-log

Meta nagħmel it-testijiet, nixtieq nara zkuk kemm minn Newman kif ukoll mis-servizz li jkunu qed jiġu ttestjati. Peress li l-avvenimenti ta 'dawn ir-zkuk huma interkonnessi, li tgħaqqadhom f'console waħda hija ħafna aktar konvenjenti minn żewġ fajls separati. Newman tniedi permezz docker-compose run, u għalhekk l-output tiegħu jispiċċa fil-console. Li jibqa 'huwa li jiġi żgurat li l-output tas-servizz imur hemm ukoll.

Is-soluzzjoni oriġinali kienet li tagħmel docker-jikkomponu ebda bandiera -d, iżda billi tuża l-kapaċitajiet tal-qoxra, ibgħat dan il-proċess fl-isfond:

docker-compose up <service> &

Dan ħadem sakemm kien meħtieġ li jintbagħtu zkuk minn Docker lil servizz ta 'parti terza. docker-jikkomponu waqaf joħroġ zkuk fuq il-console. Madankollu, it-tim ħadem docker ehmeż.

deċiżjoni:

docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<сервис>_1 &

Konflitt tal-identifikatur waqt iterazzjonijiet tat-test

It-testijiet isiru f'diversi iterazzjonijiet. Id-database mhix ikklerjata. Ir-rekords fid-database għandhom IDs uniċi. Jekk niktbu IDs speċifiċi fit-talbiet, se jkollna kunflitt fit-tieni iterazzjoni.

Biex jiġi evitat, jew l-IDs għandhom ikunu uniċi, jew l-oġġetti kollha maħluqa mit-test għandhom jitħassru. Xi oġġetti ma jistgħux jitħassru minħabba rekwiżiti.

deċiżjoni: iġġenera GUIDs bl-użu ta' skripts ta' Postman.

var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);

Imbagħad uża s-simbolu fil-mistoqsija {{myUUID}}, li se jiġi sostitwit bil-valur tal-varjabbli.

Kollaborazzjoni permezz ta' LocalStack

Jekk is-servizz li qed jiġi ttestjat jaqra jew jikteb fi kju SQS, allura biex jivverifika dan, it-test innifsu jrid jaħdem ukoll ma 'dan il-kju.

deċiżjoni: talbiet minn Postman għal LocalStack.

L-API tas-servizzi tal-AWS hija dokumentata, li tippermetti li jsiru mistoqsijiet mingħajr SDK.

Jekk servizz jikteb fil-kju, allura naqrawha u niċċekkjaw il-kontenut tal-messaġġ.

Jekk is-servizz jibgħat messaġġi lil SNS, fl-istadju tal-preparazzjoni LocalStack joħloq ukoll kju u jissottoskrivi għal dan is-suġġett SNS. Imbagħad kollox nieżel għal dak li kien deskritt hawn fuq.

Jekk is-servizz jeħtieġ jaqra messaġġ mill-kju, allura fil-pass tat-test preċedenti niktbu dan il-messaġġ fil-kju.

Ittestjar ta' talbiet HTTP li joriġinaw mill-mikroservizz li qed jiġi ttestjat

Xi servizzi jaħdmu fuq HTTP ma 'xi ħaġa oħra għajr AWS, u xi karatteristiċi AWS mhumiex implimentati f'LocalStack.

deċiżjoni: f'dawn il-każijiet jista' jgħin MockServer, li għandha immaġni lesta fi Ċentru tad-Docker. It-talbiet u t-tweġibiet mistennija għalihom huma kkonfigurati minn talba HTTP. L-API hija dokumentata, għalhekk nagħmlu talbiet mingħand Postman.

Ittestjar tal-Awtentikazzjoni u l-Awtorizzazzjoni OAuth

Aħna nużaw OAuth u JSON Web Tokens (JWT). It-test jeħtieġ fornitur OAuth li nistgħu nħaddmu lokalment.

L-interazzjoni kollha bejn is-servizz u l-fornitur OAuth tinżel għal żewġ talbiet: l-ewwel, il-konfigurazzjoni hija mitluba /.magħruf/openid-configuration, u mbagħad iċ-ċavetta pubblika (JWKS) hija mitluba fl-indirizz mill-konfigurazzjoni. Dan kollu huwa kontenut statiku.

deċiżjoni: Il-fornitur OAuth tat-test tagħna huwa server tal-kontenut statiku u żewġ fajls fuqu. It-token jiġi ġġenerat darba u impenjat għal Git.

Karatteristiċi tal-ittestjar SignalR

Postman ma jaħdimx mal-websockets. Inħolqot għodda speċjali biex tittestja SignalR.

Klijent SignalR jista 'jkun aktar minn sempliċi browser. Hemm librerija klijent għaliha taħt .NET Core. Il-klijent, miktub f'.NET Core, jistabbilixxi konnessjoni, jiġi awtentikat, u jistenna sekwenza speċifika ta' messaġġi. Jekk jiġi riċevut messaġġ mhux mistenni jew il-konnessjoni tintilef, il-klijent joħroġ b'kodiċi ta '1. Jekk jasal l-aħħar messaġġ mistenni, il-klijent joħroġ b'kodiċi ta' 0.

Newman jaħdem fl-istess ħin mal-klijent. Diversi klijenti huma mnedija biex jiċċekkjaw li l-messaġġi jitwasslu lil kull min għandu bżonnhom.

Ittestjar awtomatizzat ta 'mikroservizzi f'Docker għal integrazzjoni kontinwa

Biex tmexxi klijenti multipli uża l-għażla --skala fuq il-linja tal-kmand docker-compose.

Qabel ma jibda jaħdem, l-iskript ta' Postman jistenna li l-klijenti kollha jistabbilixxu konnessjonijiet.
Diġà ltqajna mal-problema li nistennew konnessjoni. Iżda kien hemm servers, u hawn huwa l-klijent. Huwa meħtieġ approċċ differenti.

deċiżjoni: il-klijent fil-kontenitur juża l-mekkaniżmu HealthCheckbiex tinforma lill-iskript fuq l-ospitant dwar l-istatus tiegħu. Il-klijent joħloq fajl f'mogħdija speċifika, ngħidu aħna / healthcheck, hekk kif tiġi stabbilita l-konnessjoni. L-iskript HealthCheck fil-fajl docker jidher bħal dan:

HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; fi

Team docker jispezzjona Juri l-istatus normali, l-istat tas-saħħa u l-kodiċi tal-ħruġ għall-kontenitur.

Wara li Newman jitlesta, l-iskrittura jiċċekkja li l-kontenituri kollha mal-klijent ikunu tterminaw, bil-kodiċi 0.

Happinnes jeżisti

Wara li għelbu d-diffikultajiet deskritti hawn fuq, kellna sett ta 'testijiet ta' ġiri stabbli. Fit-testijiet, kull servizz jaħdem bħala unità waħda, interazzjoni mad-database u Amazon LocalStack.

Dawn it-testijiet jipproteġu tim ta’ aktar minn 30 żviluppatur minn żbalji f’applikazzjoni b’interazzjoni kumplessa ta’ 10+ mikroservizzi bi skjeramenti frekwenti.

Sors: www.habr.com

Żid kumment