Ondersteuning vir monorepo en multirepo in werf en wat het die Docker Registry daarmee te doen

Ondersteuning vir monorepo en multirepo in werf en wat het die Docker Registry daarmee te doen

Die onderwerp van 'n monorepository is meer as een keer bespreek en veroorsaak as 'n reël baie aktiewe debat. Skep werf As 'n oopbron-instrument wat ontwerp is om die proses van die bou van toepassingskode van Git na Docker-beelde te verbeter (en dit dan aan Kubernetes te lewer), dink ons ​​nie veel aan watter keuse die beste is nie. Vir ons is dit primêr om alles te verskaf wat nodig is vir ondersteuners van verskillende menings (as dit natuurlik nie gesonde verstand weerspreek nie).

Die onlangs ingevoerde ondersteuning vir mono-repo in werf is 'n goeie voorbeeld hiervan. Maar eers, laat ons uitvind hoe hierdie ondersteuning oor die algemeen verband hou met die gebruik van werf en wat Docker Registry daarmee te doen het ...

Probleem

Kom ons stel ons hierdie situasie voor. Die maatskappy het baie ontwikkelingspanne wat aan onafhanklike projekte werk. Die meeste toepassings werk in Kubernetes en is gevolglik gehouer. Om houers en beelde te stoor, is 'n register nodig. Die maatskappy gebruik Docker Hub met 'n enkele rekening as so 'n register. COMPANY. Soortgelyk aan die meeste bronkode-bergingstelsels, Docker Hub laat jou nie toe om 'n geneste hiërargie van bewaarplekke te skep nie, soos COMPANY/PROJECT/IMAGE. In hierdie geval ... hoe kan ons nie-monolitiese toepassings in die register stoor met hierdie beperking sonder om 'n aparte rekening vir elke projek te skep?

Ondersteuning vir monorepo en multirepo in werf en wat het die Docker Registry daarmee te doen

Miskien is die beskryfde situasie bekend aan iemand eerstehands, maar kom ons kyk na die kwessie van die organisering van toepassingsberging in die algemeen, d.w.s. sonder verwysing na bogenoemde voorbeeld en Docker Hub.

Oplossings

As die aansoek monolities, kom in een beeld, dan ontstaan ​​geen vrae nie en ons stoor eenvoudig die beelde in die projek se houerregister.

Wanneer 'n toepassing as veelvuldige komponente aangebied word, mikrodienste, dan moet jy 'n sekere benadering kies. Gebruik die voorbeeld van 'n tipiese webtoepassing wat uit twee beelde bestaan: frontend и backend - die moontlike opsies is:

  1. Stoor beelde in aparte geneste bewaarplekke:

    Ondersteuning vir monorepo en multirepo in werf en wat het die Docker Registry daarmee te doen

  2. Stoor alles in een bewaarplek, en sluit die prentnaam by die merker in, byvoorbeeld, soos volg:

    Ondersteuning vir monorepo en multirepo in werf en wat het die Docker Registry daarmee te doen

NB: Eintlik is daar 'n ander opsie met stoor in verskeie bewaarplekke, PROJECT-frontend и PROJECT-backend, maar ons sal dit nie oorweeg nie as gevolg van die kompleksiteit van ondersteuning, organisasie en verspreiding van regte tussen gebruikers.

werf ondersteuning

Aanvanklik was werf beperk tot geneste bewaarplekke - gelukkig ondersteun die meeste registers hierdie kenmerk. Sedert weergawe v1.0.4-alfa.3, bygevoeg werk met registers waarin nes word nie ondersteun nie, en Docker Hub is een van hulle. Van hierdie oomblik af het die gebruiker 'n keuse gehad hoe om toepassingsbeelde te stoor.

Implementering beskikbaar as deel van die opsie --images-repo-mode=multirepo|monorepo (standaard multirepo, d.w.s. berging in geneste bewaarplekke). Dit definieer die patrone waarmee beelde in die register gestoor word. Dit is genoeg om die gewenste modus te kies wanneer u die basiese opdragte gebruik, en al die ander sal onveranderd bly.

Aangesien die meeste werf opsies gestel kan word omgewings veranderlikes, in CI/CD-stelsels is die bergingsmodus gewoonlik maklik om wêreldwyd vir die hele projek in te stel. Byvoorbeeld, in die geval van GitLab Voeg net 'n omgewingsveranderlike by in die projekinstellings: Instellings -> CI / CD -> Veranderlikes: WERF_IMAGES_REPO_MODE: multirepo|monorepo.

As ons praat oor die publisering van beelde en die uitrol van toepassings (u kan in besonderhede oor hierdie prosesse lees in die relevante dokumentasie-artikels: Publiseer proses и Ontplooi proses), dan bepaal die modus slegs die sjabloon waarmee jy met die prent kan werk.

Die duiwel is in die besonderhede

Die verskil en grootste probleem wanneer 'n nuwe bergingsmetode bygevoeg word, is in die proses om die register skoon te maak (skoonmaakkenmerke ondersteun in werf, sien Skoonmaakproses).

By die skoonmaak neem werf die beelde wat in Kubernetes-klusters gebruik word, sowel as gebruiker-gekonfigureerde beleide in ag. Beleide is gebaseer op die verdeling van etikette in strategieë. Strategieë wat tans ondersteun word:

  1. 3 strategieë wat verband hou met Git-primitiewe soos tag, branch en commit;
  2. 1 strategie vir pasgemaakte gepasmaakte etikette.

Ons stoor inligting oor die merkerstrategie wanneer die prent in die etikette van die finale prent gepubliseer word. Die betekenis self is die sg meta-tag — nodig vir die toepassing van sommige beleide. Byvoorbeeld, wanneer 'n tak of merker uit 'n Git-bewaarplek verwyder word, is dit logies om geassosieerde te verwyder ongebruik beelde uit die register, wat deur 'n deel van ons beleide gedek word.

Wanneer u in een bewaarplek stoor (monorepo), in die beeldmerker, benewens die metamerker, kan die naam van die beeld ook gestoor word: PROJECT:frontend-META-TAG. Om hulle te skei, het ons nie 'n spesifieke skeier ingestel nie, maar het bloot die nodige waarde by die etiket van die finale prent gevoeg tydens publisering.

NB: As jy belangstel om na alles te kyk wat in die werf-bronkode beskryf word, dan kan die beginpunt wees PR 1684.

In hierdie artikel sal ons nie meer aandag gee aan die probleme en regverdiging van ons benadering nie: oor merkstrategieë, databerging in etikette en die publikasieproses in die algemeen - dit alles word in detail beskryf in die onlangse verslag deur Dmitri Stolyarov: "werf is ons hulpmiddel vir CI/CD in Kubernetes".

Op te som

Die gebrek aan ondersteuning vir registers sonder nes was nie 'n blokkerende faktor vir ons of werf gebruikers wat aan ons bekend is nie - jy kan immers altyd 'n aparte register van beelde oprig (of oorskakel na die voorwaardelike Container Registry in Google Cloud) ... Maar , het die verwydering van so 'n beperking logies gelyk om die instrument geriefliker te maak vir die breër DevOps-gemeenskap. Terwyl ons dit geïmplementeer het, het ons die grootste probleem ondervind om die houerregister skoonmaakmeganisme te herwerk. Noudat alles gereed is, is dit lekker om te weet dat dit vir iemand makliker geword het, en ons (as die hoofontwikkelaars van die projek) voorsien geen merkbare probleme om hierdie funksie verder te ondersteun nie.

Bly by ons en baie gou sal ons jou vertel van ander innovasies in werf!

PS

Lees ook op ons blog:

Bron: will.com

Voeg 'n opmerking