ËnnerstĂ«tzung fir Monorepo a Multirepo op werf a wat huet den Docker Registry domat ze dinn

ËnnerstĂ«tzung fir Monorepo a Multirepo op werf a wat huet den Docker Registry domat ze dinn

D'Thema vun engem Mono-Repository ass méi wéi eemol diskutéiert ginn an, als Regel, verursaacht ganz aktiv Kontrovers. Duerch Schafung werf als Open Source Tool entwéckelt fir de Prozess vum Bau vun Applikatiounscode vu Git op Docker Biller ze verbesseren (an se dann op Kubernetes ze liwweren), denken mir net vill iwwer wéi eng Wiel am Beschten ass. Fir eis ass et primÀr alles wat néideg ass fir UnhÀnger vu verschiddene Meenungen ze bidden (wann dat natierlech net dem gesonde Mënscheverstand widdersprécht).

werf rezent Mono-Repo ËnnerstĂ«tzung ass e gutt Beispill vun dĂ«ser. Awer als Ă©ischt, loosst eis erausfannen wĂ©i dĂ«s ËnnerstĂ«tzung allgemeng mat der Benotzung vu Werf verbonnen ass a wat den Docker Registry domat ze dinn huet ...

Problemer

Loosst eis esou eng Situatioun virstellen. D'Firma huet vill EntwĂ©cklungsteams dĂ©i un onofhĂ€ngege Projete schaffen. DĂ©i meescht Uwendungen lafen op Kubernetes a sinn dofir containerisĂ©iert. Fir Container, Biller ze spĂ€icheren, braucht Dir e Registry (Registry). Als esou e Registry benotzt d'Firma Docker Hub mat engem eenzege Kont COMPANY. Ähnlech wĂ©i dĂ©i meescht Quellcode SpĂ€ichersystemer, Docker Hub erlaabt net nested Repository Hierarchie, sou wĂ©i COMPANY/PROJECT/IMAGE. An deem Fall ... wĂ©i kĂ«nnt Dir net-monolithesch Uwendungen am Registry mat dĂ«ser Begrenzung spĂ€icheren ouni e separate Kont fir all Projet ze kreĂ©ieren?

ËnnerstĂ«tzung fir Monorepo a Multirepo op werf a wat huet den Docker Registry domat ze dinn

VlÀicht ass déi beschriwwe Situatioun fir een aus der éischter Hand vertraut, awer loosst eis d'Thema vun der Organisatioun vun der ApplikatiounspÀicherung am Allgemengen betruechten, d.h. ouni Referenz op dat uewe Beispill an Docker Hub.

Léisungen

Wann d'Applikatioun monolithesch, kënnt an engem Bild, da gëtt et keng Froen a mir spÀicheren d'Biller einfach an de Containerregister vum Projet.

Wann eng Applikatioun als Multiple Komponente presentéiert gëtt, microservices, dann ass eng gewëssen Approche néideg. Am Beispill vun enger typescher Webapplikatioun déi aus zwee Biller besteet: frontend О backend - déi méiglech Optiounen sinn:

  1. SpÀichert Biller an getrennten nested Repositories:

    ËnnerstĂ«tzung fir Monorepo a Multirepo op werf a wat huet den Docker Registry domat ze dinn

  2. SpÀichert alles an engem Repository, a betruecht den Numm vum Bild am Tag, zum Beispill, wéi follegt:

    ËnnerstĂ«tzung fir Monorepo a Multirepo op werf a wat huet den Docker Registry domat ze dinn

NB: Eigentlech gĂ«tt et eng aner Optioun mat Spueren a verschiddene Repositories, PROJECT-frontend Đž PROJECT-backend, awer mir wĂ€erten et net betruechten wĂ©inst der KomplexitĂ©it vun der ËnnerstĂ«tzung, der Organisatioun an der Verdeelung vu Rechter tĂ«scht de Benotzer.

werf ËnnerstĂ«tzung

Am Ufank huet werf sech op nestet Repositories limitéiert - glécklecherweis ënnerstëtzen déi meescht Registry dës Feature. Vun der Versioun un v1.0.4-alpha.3, dobÀi Aarbecht mat registries an deem Nesting gëtt net ënnerstëtzt, an Docker Hub ass ee vun hinnen. Vun deem Punkt un huet de Benotzer e Choix wéi d'Applikatiounsbiller gespÀichert ginn.

Ëmsetzung verfĂŒgbar Ă«nner Optioun --images-repo-mode=multirepo|monorepo (Standard multirepo, d.h. Stockage an nested Repositories). Et definĂ©iert d'Mustere mat deenen d'Biller am Registry gespĂ€ichert ginn. Et ass genuch fir de gewĂ«nschte Modus ze wielen wann Dir d'Basisbefehle benotzt, an alles anescht bleift onverĂ€nnert.

Well dĂ©i meescht werf Optiounen kĂ«nnen agestallt ginn ËmweltverĂ€nnerlechen, an CI / CD Systemer ass de SpĂ€ichermodus normalerweis einfach global fir de ganze Projet ze setzen. Zum Beispill, am Fall vu GitLab fĂŒĂŒgt just eng Ëmfeldvariabel an de Projet Astellunge derbĂ€i: Astellungen -> CI / CD -> Variablen: WERF_IMAGES_REPO_MODE: multirepo|monorepo.

Wa mir iwwer d'Verëffentlechung vu Biller an d'Ausrollen vun Uwendungen schwÀtzen (Dir kënnt iwwer dës Prozesser am Detail an den zoustÀnnegen Dokumentatiounsartikelen liesen: Verëffentlechungsprozess О Deploy Prozess), da bestëmmt de Modus eleng d'Schabloun mat dÀr Dir mam Bild schaffe kënnt.

Den DĂ€iwel ass an den Detailer

Den Ënnerscheed an d'Haaptschwieregkeet wann Dir eng nei SpĂ€ichermethod bĂ€idrĂ©it ass am Prozess vun der Reinigung vum Registry (fir Purge Features Ă«nnerstĂ«tzt vu werf, kuckt Botzprozess).

Beim Botzen berĂŒcksichtegt werf d'Biller dĂ©i a Kubernetes Cluster benotzt ginn, souwĂ©i Politiken dĂ©i vum Benotzer konfigurĂ©iert sinn. Politik basĂ©iert op der Divisioun vun Tags an Strategien. Aktuell Ă«nnerstĂ«tzt Strategien:

  1. 3 Strategien verbonne mat Git Primitiv wéi Tag, Branche, a Commit;
  2. 1 Strategie fir arbitrÀr personaliséiert Tags.

Mir spÀicheren Informatioun iwwer d'Tagstrategie beim Verëffentlechen vum Bild an den Etiketten vum finalen Bild. D'Bedeitung selwer ass de sougenannte meta tag - Obligatoresch fir e puer vun de Politiken ze gëllen. Zum Beispill, wann Dir eng Branche oder Tag aus engem Git Repository lÀschen, ass et logesch fir Zesummenhang ze lÀschen onbenotzt Biller aus dem Registry, deen duerch en Deel vun eiser Politik ofgedeckt ass.

Wann an engem Repository gespĂ€ichert ass (monorepo), am Bildtag, nieft dem Metatag, kann den Numm vum Bild och gespĂ€ichert ginn: PROJECT:frontend-META-TAG. Fir se ze trennen, hu mir kee spezifesche Separator agefouert, mee einfach den nĂ©idege WĂ€ert op de Label vum finalen Bild bĂ€igefĂŒĂŒgt beim VerĂ«ffentlechung.

NB: Wann Dir interesséiert sidd fir alles ze kucken wat am werf Quellcode beschriwwe gëtt, da kann de Startpunkt sinn PR 1684.

An dësem Artikel wÀerte mir net méi Opmierksamkeet op d'Problemer an d'Begrënnung vun eiser Approche bezuelen: iwwer Taggingstrategien, Daten an Etiketten an de Verëffentlechungsprozess als Ganzt - all dat ass am Detail an engem rezente Bericht vum Dmitry Stolyarov beschriwwen: "werf ass eisen Tool fir CI/CD zu Kubernetes".

Ze resuméieren

De Manktem un ËnnerstĂ«tzung fir onbeschiedegt Registry war net e BlockĂ©ierungsfaktor fir eis oder d'werf Benotzer dĂ©i eis bekannt sinn - schliisslech kĂ«nnt Dir Ă«mmer e separat BildregistrĂ©ieren erhĂ©ijen (oder op eng bedingt Container Registry an Google Cloud wiesselen) ... WĂ©i och Ă«mmer, sou eng Restriktioun ewechzehuelen schĂ©ngt logesch ze sinn fir datt d'Tool mĂ©i bequem ass dĂ©i breet DevOps Gemeinschaft. Duerch et Ă«mzesetzen, hu mir d'Haaptschwieregkeet konfrontĂ©iert fir de Containerregistrierungsreinigungsmechanismus Ă«mzeschaffen. Elo datt alles fĂ€erdeg ass, ass et schĂ©in ze realisĂ©ieren datt et mĂ©i einfach ginn ass fir een, a mir (als HaaptentwĂ©ckler vum Projet) wĂ€erte keng merkbar Schwieregkeeten hunn fir dĂ«s Feature weider z'Ă«nnerstĂ«tzen.

Bleift bei eis a ganz geschwënn wÀerte mir Iech iwwer aner Innovatiounen soen an werf!

PS

Liest och op eisem Blog:

Source: will.com

Kaaft zouverlĂ€sseg Hosting fir Site mat DDoS Schutz, VPS VDS Server đŸ”„ Kaaft zouverlĂ©issegt WebsĂ€ithosting mat DDoS-Schutz, VPS VDS Server | ProHoster