
Monorepo teemat on juba korduvalt arutatud ja see tekitab tavaliselt aktiivseid vaidlusi. Luues avatud lÀhtekoodiga tööriist, mille eesmÀrk on parandada rakenduste koodide koostamisprotsesse Gitist Docker-piltideks (ja nende edastamist Kubernetesesse), mÔtleme me vÀhe sellele, milline valik on parem. Meie peamine eesmÀrk on tagada kÔik vajalik, et toetada erinevaid arvamusi (kui see ei ole vastuolus mÔistusega, loomulikult).
Hiljuti sisse viidud mono-repo tugi werf'is on hea nÀide sellest. Kuid enne kui edasi minna, vaatame, kuidas see tugi on seotud werf'i kasutamisega ja kuidas siia sobib Docker Registry...
Probleemistik
Kujutage ette olukorda. EttevĂ”ttes on palju arendajate meeskondi, kes tegelevad sĂ”ltumatute projektidega. Enamik rakendusi toimib Kuberneteses ja seega â on konteineriseeritud. Konteinerite ja piltide salvestamiseks on vajalik registri (registry) olemasolu. Sellise registrina kasutatakse ettevĂ”ttes Docker Hub'i koos ĂŒhe konto COMPANY. Sarnaselt enamikule lĂ€htekoode salvestamise sĂŒsteemidele, Docker Hub ei luba luua sisemist hierarhiat registrite vahel, nagu ETTEVĂTE/PROJEKT/PILT. Sel juhul... kuidas selle piirangu puhul hallata mitmetasandilisi rakendusi, luues iga projekti jaoks eraldi konto?

VÔib-olla on nimetatud olukord kellelegi tuttav, kuid vaatame rakenduste hoidmise korraldust laiemalt, st ilma eelnevalt mainitud nÀiteta ja Docker Hub'ita.
Lahenduste teed
Kui rakendus on monoliitne, ei tekki kĂŒsimusi ja salvestame lihtsalt projekti konteinerite registrisse.
Kui rakendus esindab end mitme komponendina, mikroteenustena, tuleb valida teatud lĂ€henemine. NĂ€ite aluseks vĂ”ttes tĂŒĂŒpiliselt veebirakendust, mis koosneb kahest pildist: eesmine ja tagaosa â vĂ”imalikud valikud on jĂ€rgmised:
- Hoidke pilte eraldi sisemistes registrites:

- Hoidke kĂ”ik ĂŒhes registris ja vĂ”tke arvesse pildi nime silti, nĂ€iteks nii:

NB: Tegelikult on veel variant, mis on salvestamine erinevatesse registritesse, PROJEKT-eesmine ja PROJEKT-tagaosa, kuid me ei kÀsitle seda keerulise toe, organisatsiooni ja kasutajate vaheliste Ôiguste jagamise tÔttu.
Tugi werf'is
Alguses piirdus werf sisemiste hoidlate, Ônneks toetavad enamik registreid sellist vÔimalust. Alates versioonist , lisandus toimetamine registritega, kus sisemist ei toetata, ja Docker Hub kuulub nende hulka. Sellest hetkest alates on kasutajal valik, kuidas sÀilitada rakenduse pilte.
Rakendamine on saadaval valiku raames --images-repo-mode=multirepo|monorepo (vaikimisi multirepo, st hoidmine sisemistes hoidlates). See mÀÀratleb mustrid, mille alusel pildid registreeritud on. Peab vaid valima vajaliku reĆŸiimi pĂ”hikomandeid kasutades, kĂ”ik muu jÀÀb muutumatuks.
Kuna enamik werf'i valikuid saab mÀÀrata keskkonnamuutujate kaudu, CI/CD sĂŒsteemides on salvestamisreĆŸiimi tavaliselt lihtne mÀÀrata kogu projekti jaoks globaalselt. NĂ€iteks GitLabi puhul piisab keskkonnamuutuja lisamisest projekti seadetes: Seaded -> CI / CD -> Muutujad: WERF_IMAGES_REPO_MODE: multirepo|monorepo.
RÀÀkides piltide avaldamisest ja rakenduste juurutamisest (need protsessid on pĂ”hjalikult kĂ€sitletud vastavates dokumentatsiooni artiklites: ja ), mÀÀrab reĆŸiim eksklusiivselt malli, mille alusel piltidega töötada.
Detailides peitub diibel
Uue salvestusviisi lisamise peamine erinevus ja keerukus seisneb registri puhastamise protsessis (puhastamisvÔimalused, mida werf toetab, vt ).
Werf arvestab puhastamisel Kubernetes'i klastrites kasutatavaid pilte ning kasutaja mÀÀratud poliitikaid. Poliitikate aluseks on siltide jagamine strateegiateks. Hetkel toetatud strateegiad:
- 3 strateegiat, mis on seotud Git'i primitiividega, nagu silt, haru ja commit;
- 1 strateegia vabalt valitud kasutaja siltide jaoks.
Teave sildi strateegia kohta salvestatakse pildi avaldamisel lĂ”pppildi etikettidesse. Isegi vÀÀrtus â nii nimetatud metasilt â on vajalik poliitika osade rakendamiseks. NĂ€iteks, kui haru vĂ”i silt eemaldatakse Git'i repos, on mĂ”istlik eemaldada ka seotud kasutamata pildid registrist, mida katab osa meie poliitikatest.
Ăhes repolis salvestades (monorepo), konteineri silti all vĂ”ib peale meta-sildi hoida ka konteineri nime: PROJEKT:eesmine-META-SILT. Nende eraldamiseks ei ole me kasutanud mingit spetsiifilist eraldajat, vaid oleme lihtsalt lisanud vajaliku vÀÀrtuse lĂ”ppkonteineri silti avaldamisel.
NB: Kui soovite vaatama hakata kÔike, mis on kirjeldatud werfi lÀhtekoodis, siis alguspunktiks vÔib olla .
Selles artiklis ei kavatse me rohkem tĂ€helepanu pöörata meie lĂ€henemise probleemidele ja pĂ”hjendusele: silti strateegiate, andmete sĂ€ilitamise ja avaldamisprotsessi osas â kĂ”igest sellest on pĂ”hjalikult rÀÀgitud Dmitri Stolyarovi hiljutises ettekandes: â».
KokkuvÔtteks
Registry ilma sĂŒgavat struktuuri toetamine ei olnud meie ega meie teadaolevate kasutajate jaoks probleem â alati on vĂ”imalik tĂ”sta eraldi konteinerite registrit (vĂ”i minna Google Cloudi tingimuslikku Container Registry'isse)⊠Kuid sellise piiri eemaldamine tundus loogiline, et tööriist oleks mugavam laiemale DevOps kogukonnale. Selle rakendamisel kohtasime peamist raskust konteinerite registri puhastusmehhanismi ĂŒmberkujundamisel. NĂŒĂŒd, kui kĂ”ik on valmis, on hea teada, et kellelgi on lihtsam, ja meile (kui selle projekti peamistele arendajatele) ei ennustata tĂ”siseid raskusi selle funktsiooni tĂ€iendavas toetamises.
JÀtkake meiega ja varsti rÀÀgime teistest uuendustest !
P.S.
Lugege ka meie blogist:
- «»;
- «».
Allikas: habr.com


