
Monorepo teema on juba korduvalt arutatud ja tavaliselt tekitab see ĂŒsna aktiivset diskussiooni. Luues avatud lĂ€htekoodiga tööriista, mille eesmĂ€rk on parandada rakenduste koodi koostamise protsessi Gitist Docker piltide (ja nende edasise tarnimise Kubernetesesse), mĂ”tleme me vĂ€he, milline valik on parem. Meie jaoks on esmatĂ€htis tagada kĂ”ik vajalik erinevate arvamuste toetajatele (kui see ei lĂ€he vastuollu terve mĂ”istusega, muidugi).
Hiljuti ilmunud tugi mono-repole werf'is on hea nĂ€ide sellest. Kuid esiteks uurime, kuidas see tugi ĂŒldse on seotud werf'i kasutamisega ja mis on seos Docker Registryga ...
Problemaatika
Kujutage ette olukorda. EttevĂ”ttes on mitmeid arendustiime, kes tegelevad iseseisvate projektidega. Enamik rakendusi töötab Kuberneteses ja seega â on konteineritud. Konteinerite ja piltide salvestamiseks on vajalik register. Sellise registrina kasutab ettevĂ”te Docker Hub'i ĂŒhe abonendiga ETTEVĂTE. Sarnaselt enamikule lĂ€htekoodi salvestamise sĂŒsteemidele, Docker Hub ei luba luua hierarhilisi registrite struktuure, nagu nĂ€iteks ETTEVĂTE/PROJEKT/IMAGE. Sellisel juhul ... kuidas salvestada registris mitte-monoliitseid rakendusi, luues iga projekti jaoks eraldi konto?

VĂ”imalik, et kirjeldatud olukord on kellegi jaoks tuttav, kuid vaatame kĂŒsimust rakenduste salvestamise korralduse ĂŒle ĂŒldiselt, st ilma seoseta eespool kirjeldatud nĂ€ite ja Docker Hub'iga.
Lahenduste teed
Kui rakendus on monoliitne, siis probleeme ei teki ja me lihtsalt salvestame pildid projekti konteinerite registrisse.
Kui rakendus on esitatud mitme komponendina, Mikroteenused, siis tuleb valida kindel lĂ€henemine. NĂ€iteks tĂŒĂŒpilise veebirakenduse puhul, mis koosneb kahest pildist: frontend ja backend â vĂ”imalused on jĂ€rgmised:
- Salvestada pildid eraldi sissepÀÀsudega registrites:

- Salvestada kĂ”ik ĂŒhte registrisse ja arvestada pildi nimega mĂ€rgises, nĂ€iteks jĂ€rgmiselt:

NB: Tegelikult on veel variant pidada erinevates registrites, PROJEKT-frontend ja PROJEKT-backend, kuid seda me ei kÀsitle keerukuse tÔttu toetamisel, korraldamisel ja Ôiguste jagamisel kasutajate vahel.
Tugi werf'is
Esialgu piirdus werf siserepositooriumidega â Ă”nneks toetab enamik registreid seda vĂ”imalust. Alates versioonist , on lisatud tugi registritele, kus sisemine tugi ei ole saadaval, sealhulgas Docker Hub. Sellest hetkest alates on kasutajal vĂ”imalus valida, kuidas rakenduste pilte salvestada.
Rakendamine on saadaval valiku kaudu --images-repo-mode=multirepo|monorepo (vaikimisi multirepo, st salvestamine siserepositooriumidesse). See mÀÀrab mallid, mille alusel pilte registris hoitakse. Lihtsalt valige vajalik reĆŸiim peamiste kĂ€skude kasutamisel, kĂ”ik muu jÀÀb muutumatuks.
Kuna enamik werfi valikuid saab mÀÀrata keskkonnamuutujate, on CI/CD sĂŒsteemides salvestusreĆŸiimi tavaliselt lihtne mÀÀrata projekti tasandil. NĂ€iteks GitLabi puhul piisab, kui lisada keskkonnamuutuja projekti seadetes: Settings -> CI / CD -> Variables: WERF_IMAGES_REPO_MODE: multirepo|monorepo.
Kui rÀÀkida piltide avaldamisest ja rakenduste juurutamisest (nende protsesside kohta saab pĂ”hjalikult lugeda vastavates dokumentatsiooni artiklites: ja ), siis reĆŸiim mÀÀrab rangelt mustri, mille alusel saab pilte hallata.
Detailides peitub tÔde
Eraldamise ja peamine keerukus uue salvestusviisi lisamisel on registri puhastusprotsess (puhastusvÔimalused, mida werf toetab, vt ).
Puhastamisel vÔtab werf arvesse Kuberneteses klastrites kasutatavaid pilte ning ka kasutaja mÀÀratletud poliitikaid. Poliitikate aluseks on siltide jagamine strateegiate vahel. Praegu toetatakse jÀrgmisi strateegiaid:
- 3 strateegiat, mis on seotud Git-i primitiividega, nagu silt, haru ja commit;
- 1 strateegia juhuslike kasutaja siltide jaoks.
Teavet sildi strateegia kohta salvestame pilti avaldades lĂ”pppildi etikettides. Isegi vÀÀrtus â nn metasilt â on vajalik poliitika osade rakendamiseks. NĂ€iteks, kui eemaldada haru vĂ”i silt Git-repositooriumist, on loogiline eemaldada ka seotud kasutamata pildid registrist, mis katab osa meie poliitikatest.
Kui salvestatakse ĂŒhte registrisse (monorepo), siis pildi sildil, vĂ€lja arvatud metasild, vĂ”ib samuti sisaldada pildi nime: PROJEKT:frontend-META-MĂRGMeie ei kasutanud mingit spetsiifilist eraldajat, vaid lisasime lihtsalt vajaliku vÀÀrtuse lĂ”pp-pildi etiketisse publikatsiooni ajal.
NB: Kui soovite nÀha kogu seda, mis on werfi lÀhtekoodis, siis vÔib alguspunktiks olla .
Selles artiklis ei pĂŒhenda me enam tĂ€helepanu probleemidele ja meie lĂ€henemise pĂ”hjendustele: strateegiate etikettimine, andmete salvestamine etiketites ja vĂ€ljaandmisprotsess ĂŒldiselt â kĂ”ik see on ĂŒksikasjalikult kajastatud Dmitri Stolyarovi hiljutises ettekandes: «».
KokkuvÔtteks
Konteineriregistrite toetuse puudumine ilma sisemisteta ei olnud meie vĂ”i tundmaĂ”pitavate werf kasutajate jaoks takistuseks â alati on vĂ”imalik ĂŒles seadistada eraldi konteineriregister (vĂ”i liikuda Googles Cloudis tingimuslikule Container Registry'le)⊠Siiski nĂ€gi sellise piirangu kaotamine loogilisena, et tööriist oleks mugavam laiemale DevOpsi kogukonnale. Selle rakendamisel kokku puutudes seisisime silmitsi peamise keerukusega konteineriregistri puhastusmehhanismi ĂŒmberkujundamisel. NĂŒĂŒd, kui kĂ”ik on valmis, on meeldiv teadvustada, et kellelegi on see lihtsamaks muutunud, ja meil (kui projekti peaarendajatel) ei prognoosi edaspidi selle funktsiooni toetamisel tĂ”siseid raskusi.
PĂŒsi meiega ja varsti rÀÀgime teistest uuendustest !
P.S.
Lugege ka meie blogist:
- «»;
- «».
Allikas: habr.com


