Automated probatio microservices in Docker pro continua integratione

In inceptis ad architecturae microserviae progressionem pertinentibus, CI/CD ex categoria amoena opportunitatis e categoria necessitatis urgentis movet. Automated probatio est pars integralis continuae integrationis, accessus competentis ad quem turmas multas iucundas vesperas cum familiaribus et amicis dare potest. Alioquin voluptua pericula numquam efficitur.

Possibile est totum codicem microservii cum unitatis probationibus ludibriis obiectis obtegere, sed hoc tantum ex parte quaestionem solvit et multas quaestiones et difficultates relinquit, praesertim cum probatio cum notitia operis. Ut semper, urgentissimae notitiae constantiam in database relationi probato sunt, tentantes operas nubium officia, et falsas faciunt suppositiones cum scribendo objecta irrident.

Haec omnia et paulo amplius solvi possunt probando totam microserviam in Docker vase. Indubitata utilitas ad validitatem testium praestandam est quod eaedem Docker imagines, quae in productionem ingrediuntur, sunt probatae.

Huius accessus Automatio plures difficultates praebet, quarum solutio infra dicetur:

  • conflictus operum parallelorum in eodem navale exercitu;
  • conflictus identifier in datorum test iterationibus;
  • microservices exspectare ut paratos esse;
  • seta et extraordinaria ligna ad systemata externa;
  • probatio exitus HTTP petitiones;
  • textus nervus testis (utens SignalR);
  • probatio OAuth authenticas et auctoritas.

Hoc articulum fundatur oratio mea at SECR 2019. Sic pro iis qui nimis piger legunt; hic est recordatio sermonis.

Automated probatio microservices in Docker pro continua integratione

In hoc articulo narrabo tibi quomodo scripta uti ad servitutem sub test, datorum et Amazonum AWS officia in Docker utere, deinde in Postman probat et, postquam peracta sunt, vasa creata desine ac delere. Probat exsecuti sunt omnes temporis mutationes in codice. Hoc modo fac nos singulas versiones recte operari cum datorum AWS et servitiorum.

Idem scriptum currit et ab ipsis tincidunt in Fenestra desktops et a Gitlab CI servo sub Linux.

Iustificandi, novas probationes inducens non debet requirere institutionem instrumentorum adiectis vel in computatro elit vel in calculo ubi probationes in committo currunt. Docker hoc problema solvit.

Experimentum currere debet in servo locali ob has causas:

  • Aenean eget est neque. Ex mille petitionibus unus deficiet;
    In hoc casu, automatic probatio non faciet, opus cessabit, et rationem in lignis quaerendam habebis;
  • Nimis frequentes petitiones ab aliqua tertiae factionis officia non admittuntur.

Praeterea, inconveniens est stare propter usum;

  • Stare potest frangi non solum ex malo codici in eo decurrente, sed etiam per notationes quas in codice recto procedere non potest;
  • Quantumvis difficile conamur reverti omnes mutationes factas ab ipso experimento tentationis, aliquid errare potest (alioquin, cur test?).

Circa consilium et processum organization

Societas nostra evolvit applicationem interretialem microserviam in Docker in nube AWS currentem. Unitas probationes iam in incepto adhibitae sunt, sed error saepe occurrit ut unitas probationes non deprehendat. Necesse erat ut integram microserviam probare cum servitiis datorum et Amazonum.

Proiectum vexillum utitur processus integrationis continuae, quae includit probationem microservice cum omni committo. Postquam negotium dedit, elit mutationes microserviae reddit, manually probat et omnia probat automated in promptu decurrit. Si opus est, elit mutat volutpat. Si nullae quaestiones reperiantur, commissio facta est ad banc quaestionem. Postquam singula committant, probationes automatice currunt in calculonis. Mergere in ramum communem et in ipso facto probationes deducendi post felicem recensionem fiat. Si probationes de genere communi transeunte, servitium automatice renovatur in test environment de Service Amazon Elastic Continentem (scamnum). Stare omnibus tincidunt et probatoribus necessarium est, eamque frangere non expedit. Probatores in hac rerum ambitu figere aut novam plumam figere tentationesque faciendos inhibere.

Project architectura

Automated probatio microservices in Docker pro continua integratione

Applicatio plusquam decem operas constat. Ex his quaedam scripta sunt in NET Core, quaedam in NodeJs. Quodlibet officium decurrit in Docker continente in Officio Amazonio Continenti Elastico. Quisque suum datorum Postgres habet, et quidam Redis etiam habent. Communia databases nullae sunt. Si plura officia eadem notitia egent, haec notitia, cum mutatur, ad singula haec officia per SNS (Simple Notification Service) et SQS (Amazon Simple Queue Service) egent, et officia servata in suis databases separatis.

SQS et SNS

SQS permittit te mittere nuntios in queue et nuntios legere a queue protocollo HTTPS utendo.

Si plura officia unum queue legunt, singula tantum nuntius ad unum pervenit. Utile hoc est, cum plures instantiae ejusdem officii currendo onere inter se distribuant.

Si vis singula verba pluribus officiis tradenda, quisque recipient suam queue habere debet, et SNS opus est nuntios duplicare in multiplex queues.

In SNS thema creas et ei subscribas, exempli gratia, an SQS queue. Epistulas ad rem mittere potes. In hoc casu nuntius ad singula queue huic argumento subscripsit. SNS methodum nuntia legendi non habet. Si in debugging vel probatione explorare debes quod ad SNS missum est, queue SQS creare potes, argumento desiderato scribe et queue legas.

Automated probatio microservices in Docker pro continua integratione

API Porta

Pleraque officia non directe adeunda e Interrete sunt. Obvius est per API Gateway, quae aditum iuribus coercet. Hoc quoque est nostrum officium, et sunt probationes pro eo quoque.

Real-time notificationes

Usus est application SignalRut ostenderet notificationes real-time ad user. Hoc fit in notitia muneris. Adiri directe ab Interrete et ipsa cum OAuth operatur, quia impossibilis evasit ad sustentationem basibus interreti in Gateway, comparatis ad integrationem OAuth et notificationis servitium.

Nota Testis Accede

Unitas probat reponere res sicut datorum ludibrio objectorum. Si microservice, exempli gratia, cum extraneo clave in tabula recordum creare conatur, et per clavem illius electronicus non existit, petitio exsecutioni mandari non potest. Unitas hoc probat non potest deprehendere.

Π’ articulus Microsoft Proponitur ut memoria in- datorum et instrumentorum objectorum irrideat.

In-memoria datorum unum e DBMSs ab Entity Framework sustentatur. Hoc specialiter creatum est ad probationem. Data in database tantum reponitur, donec processus utendi terminetur. Tabulas creandas non requirit et notitias integritatis non reprehendo.

Mock objects model the class they are replace only in the extent that the test elit intelligat quomodo operatur.

Quomodo Postgres ut statim migrationes incipias et peragas cum probationem currens non specificatur in articulo Microsoft. Haec solutio facit et praeterea nullum codicem specialiter addit ad probationes ipsae microform.

Lets proficiscantur ad solutionem

In processu evolutionis apparebat unitatem probationes non sufficere ad omnia problemata opportune modo invenire, unde placuit hunc exitum ex angulo diverso accedere.

Test erigens amet

Primum opus est environment explicandi experimentum. Gradus ad microservice currere:

  • Configurare servitium sub test pro ambitu locali, singula specificare pro connectendi datorum et AWS in variabilium ambitu;
  • Satus Postgres et migrationem Liquibase currendo conficere.
    In relatione relationum DBMSs, antequam notitias scribo in datorum datorum, debes schema datum, id est tabulas, creare. Cum applicatione adaequationis, tabulae ad formam novae versionis adhibitae afferendae sunt, et potius sine notitia permanente. Haec migratio dicitur. Tabulas creando database initio vacuae causa specialis migrationis est. Donec adipiscing in ipsum applicationem aedificari potest. Ambo .NET et NodeJS migrationis compages habent. In casu nostro, propter rationes securitatis, microservices iure privantur schematis mutandi, et migratio per Liquibase fit.
  • Duc Amazon LocalStack. Haec est exsecutio muneris AWS ad currendum domi. Extat prompta imago facta pro LocalStack in Docker Hub.
  • Curre scriptor ut res necessarias in LocalStack crearet. Concha scripta uti AWS cli.

Usus est ad probandum in project Postman Heliconius. Antea erat, sed manually immissa est et applicatio probata iam ad modum statis explicata est. Hoc instrumentum tibi permittit ut postulationes HTTP(S) liberares et vide num responsa exspectationum congruunt. Queries in collectionem componuntur et tota collectio detegere potest.

Automated probatio microservices in Docker pro continua integratione

Quomodo automatic test opus facit?

Per tentationem, omnia in Docker opera sunt: ​​ministerium sub test, Postgres, instrumentum migrationis, et Postmanum, vel potius eius consolatorium versio - Newman.

Docker plures quaestiones solvit:

  • Libertas ab hospitum configuratione;
  • Insertis clientelas: Docker downloads imagines ab Docker Hub;
  • Systema in pristinum statum reddens: simpliciter vasa removens.

Docker-componere vascula coniungit in retem virtualem, a Interrete separatam, in qua continentia nomina domain reperiuntur.

Test regitur concha script. Ad probationem in Fenestra git-bash utimur. Ita unum scriptum sufficit pro Fenestra et Linux. Git and Docker are installed by all developers on the project. Cum Git in Windows installing, git-bash installatur, ita omnes id quoque habet.

Scriptum facit haec vestigia;

  • Aedificium docker imagines
    docker-compose build
  • Launching the database and LocalStack
    docker-compose up -d <ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€>
  • migratio Database ac praeparatio LocalStack
    docker-compose run <ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€>
  • Ministerium sub test launching
    docker-compose up -d <сСрвис>
  • Currens test (Newman)
  • Reprimendis omnibus vasis
    docker-compose down
  • Proventus dispositis in Slack
    Colloquium habemus in quo epistulae cum signo viridi aut cruce rubra et nexum cum stipes eunt.

Imagines sequentes Docker his gradibus implicantur:

  • Ministerium spectatum eadem est imago ac productionis. Configuratio experimenti est per variabiles ambitus.
  • Nam Postgres, Redis et LocalStack imagines paratae factae ab Docker Hub adhibitae sunt. Sunt etiam imagines paratae factae Liquibase et Newman. Nostras in osseis construimus, fasciculos nostros ibi addendo.
  • Ad LocalStack parandum, prompto AWS CLI imagine uteris et imaginem effice in qua scriptum innitatur.

using tomis, Imaginem Docker aedificare non solum imagini vasi addere. Sed volumina nostro ambitui non apta sunt, quia Gitlab CI opera ipsa in vasis currunt. Docker ab tali vase temperare potes, sed codices tantum folders e ratione exercitus, et non ab alio vase.

Problems ut occurrant

Expectans promptum

Cum vas cum ministerio currit, hoc non significat quod hospites ad accipiendum paratus sit. Expectare debes nexum pergere.

Hoc problema interdum solvitur usus scriptor exspecta-it.shqui occasionem condendi TCP nexum observat. Nihilominus, LocalStack in errorem 502 Malum Gateway conicere potest. Constat praeterea in multis servitiis, et si unum ex illis promptum est, hoc de aliis nihil dicit.

arbitrium: LocalStack scriptorum commeatuum qui exspectant responsionem 200 tam SQS quam SNS.

Parallel Negotium Conflictus

Plures probationes simul in eodem Docker exercitu currere possunt, ergo nomina continens et retis singulares esse debent. Quin etiam probationes diversae eiusdem officii simul simul currere possunt, ut non satis sit nomina sua in singulis fasciculis componere.

arbitrium: COMPOSE_PROJECT_NAME variabilis ad singularem valorem exaratum.

Windows Features

Multae res notare volo cum Docker in Fenestra utens, hae experientiae momenti sunt ad intellegendum cur errores fiant.

  1. Scripta in vase testae lineae terminationes Linux habere debent.
    Testa CR symbolum est syntaxin erroris. Dicere difficile est ab errore nuntium hoc ita esse. Cum talia scripta in Windows edis, textu proprio editori debes. Praeterea ratio versionis proprie configurari debet.

Ita configuratur quomodo git;

git config core.autocrlf input

  1. Git-bash vexillum Linux folder emulat et, cum tabellam exemam vocat (docker.exe incluso), absolutas Linux vias cum Fenestra semitis reponit. Hoc tamen sensum non efficit vias neque machinae locales (vel semitas in vase). Hoc mores erret non potest.

arbitrium: adde etiam ad initium viae secandum: //bin loco /bin. Linux tales vias intelligit: plures virgulae idem sunt quod unum. Sed git-bash vias tales non cognoscit nec eas convertere conatur.

Log output

Cum currit probat, videre ligna ab utroque Newman et cum servitio probato velim. Cum inter haec omnia inter se conexae sint, multo commodius quam duae tabulae in unum consolantur. Newman movet per docker-componere currereet sic eius output desinit in consolatorium. Quidquid reliquum est, fac ut illic etiam servitutis output accedit.

The original solution was to do Docker componere sursum, non vexillum -dsed usus testarum facultatum, hunc processum in curriculum remittit;

docker-compose up <service> &

Hoc operatum est donec necesse erat ut ligna e Docker ad tertiam partem muneris mitteret. Docker componere sursum, outputting omnia ad consolatorium cessaverunt. Sed dolor laboraverunt attach Docker.

arbitrium:

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

Identifier conflictu in test iterations

Probat currunt in pluribus iterationibus. Database non absolvitur. Tabulae in database habent IDs unicas. Si speciales IDs in petitionibus scribemus, certamina in secunda iteratione obtinebimus.

Ad id vitandum, vel IDs singulares esse debent, vel omnia quae ab experimento creata sunt deleri debent. Quaedam obiecta deleri non possunt propter requisita.

arbitrium: GUIDs generate utens scriptorum Postmanum.

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

Tum uti signo in interrogatione {{myUUID}}quae cum variabili valore reponenda erunt.

Collaboratio per LocalStack

Si officium probatum legerit vel scribat ad SQS queue, tunc ut verificetur, ipsa test etiam cum hac queue operari debet.

arbitriumPetitiones ab Postman ad LocalStack.

Officia AWS API documentum est, permittens interrogationes fieri sine SDK.

Si officium scribens ad queue, tum legimus et contenta nuntii reprehendo.

Si ministerii nuntios ad SNS mittit, in scaena LocalStack apparando etiam quenam creat et huic SNS argumento subscribit. Inde totum descendit ad quod supra dictum est.

Si officium nuntium ex queue legere debet, in praecedenti gradu testium hunc nuntium ad queue scribimus.

Testis HTTP petit oriundas ex microservice sub test

Quaedam officia super HTTP cum alio alio quam AWS operantur, et quaedam lineamenta AWS in LocalStack non implentur.

arbitriumIn his casibus potest adiuvare MockServer, quae imaginem paratam habet in Docker hub. Petitiones et responsiones eis exspectatae per petitionem HTTP configurantur. API documentum est, ergo postulationes a Postmane facimus.

Testis OAuth authenticitate et LICENTIA

Utimur OAuth et JSON Web signa (JWT). Test provisor OAuth requirit ut localiter currere possimus.

Omnis commercio inter servitium et provisorem OAuth ad duas petitiones descendit: primo, figuratio postulatur /.well-known/openid-configurationet tunc clavis publica (JWKS) in inscriptione ex configuratione petitur. Haec omnia stabilia sunt.

arbitrium: Test OAuth provisor noster est contentus static ministrans et duo fasciculi in ea. Vestigium genitum semel et commissum Git.

Features of SignalR temptationis

Postman cum telarum non operatur. Instrumentum singulare creatum est ad probandum SignalR.

Cliens SignalR plus quam iustus pasco potest esse. Bibliotheca clientis est ei sub .NET Core. Cliens, in .NET Core scriptus, nexum instituit, authenticatur, et certam seriem epistularum observat. Si nuntius inexpectatus recipitur aut nexus amittitur, cliens exit cum codice 1. Si nuntius novissimus exspectatus recipitur, cliens cum codice 0 exit.

Newman simul cum client laborat. Plures clientes immittuntur ad reprimendam nuntios traditos omnibus qui eis indiget.

Automated probatio microservices in Docker pro continua integratione

Currere plures clientes uti optio --scale in docker-componere order versus.

Priusquam currit, Scriptum Postman omnes clientes exspectat ut hospites constituant.
Iam quaestionem exspectationis nexum offendit. Sed erant ministri, et hic est clientis. Alia accessio opus est.

arbitriumEt client in quo utitur mechanism HealthCheckscriptionem de suo statu certiorem facere. Cliens limam ad certam viam facit, dic /healthcheck, simul ac nexus constituitur. HealthCheck scriptum est in tabellario tabellario simile hoc:

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

bigas docker inspicere Status normales, sanitatis statum et exitum in codice continentis ostendit.

Postquam Newman absolvit, scriptum inhibet omnia vasa cum cliente terminari, cum codice 0 .

Happinnes exstat

Postquam difficultates supra scriptas superavimus, certas probationes cursus stabilis habuimus. In probationibus, unumquodque officium operatur ut unum, mutuo datorum et LocalStack Amazonium.

Hae probationes turmam 30+ tincidunt ab erroribus defendunt in applicatione cum complexu commercio 10+ microserviorum crebris institutis.

Source: www.habr.com