Monorepositories: ndapota, unofanira

Monorepositories: ndapota, unofanira

Dudziro yechinyorwa chakagadzirirwa vadzidzi vekosi "DevOps maitiro uye maturusi" muchirongwa chedzidzo cheOTUS.

Iwe unofanirwa kusarudza monorepository nekuti hunhu hwainosimudzira muzvikwata zvako huri pachena uye basa rekugovana, kunyanya sezvo zvikwata zvinokura. Chero nzira, iwe uchafanirwa kuisa mari mukushandisa, asi zvinogara zviri nani kana iyo default maitiro ari maitiro aunoda mumirairo yako.

Sei tiri kutaura pamusoro peizvi?

Matt Klein akanyora chinyorwa "Monorepos: Ndapota usadaro!"  (chinyorwa chemushanduri: dudziro paHabré "Monorepositories: ndapota usadaro") Ini ndinoda Matt, ndinofunga akangwara uye iwe unofanirwa kuverenga maonero ake. Pakutanga akaisa sarudzo paTwitter:

Monorepositories: ndapota, unofanira

Shanduro:
Iri Zuva reGore Idzva, ndichapokana nezvekuti monorepositories inosekesa sei. 2019 yakatanga chinyararire. Mune mweya weizvi, ndinokupa ongororo. Ndivanaani vanyanyisi vakuru? Vatsigiri:
- Monorepo
- ngura
- Sarudzo isiriyo / zvese zviri zviviri

Mhinduro yangu yaive yekuti, "Ini ndiri vaviri vevanhu ivavo." Panzvimbo pekutaura nezvekuti Rust mushonga, ngatitarisei kuti sei ndichifunga kuti ari kukanganisa nezve monorepositories. Zvishoma pamusoro pako. Ini ndiri CTO yeChef Software. Tine vangangosvika zana mainjiniya, kodhi base inodzokera kumashure angangoita 100-11 makore, uye mana makuru zvigadzirwa. Imwe yeiyi kodhi iri mupolyrepository (yangu nzvimbo yekutanga), imwe iri mune monorepository (yangu chinzvimbo).

Ndisati ndatanga: nharo dzese dzandinoita pano dzinoshanda kumarudzi ese ezvinyorwa. Mukuona kwangu, hapana chikonzero chehunyanzvi nei uchifanira kusarudza imwe mhando yenzvimbo pane imwe. Iwe unogona kuita chero nzira inoshanda. Ndinofara kutaura nezvazvo, asi handisi kufarira zvekugadzira zvikonzero nei mumwe ari pamusoro peimwe.

Ini ndinobvumirana nechikamu chekutanga chepfungwa yaMat:

Nekuti pachiyero, monorepository inogadzirisa ese matambudziko akafanana anogadziriswa nepolyrepository, asi panguva imwe chete ichikumanikidza kuti ubatanidze kodhi yako uye zvinoda zvinoshamisa kuedza kuwedzera scalability yeshanduro yako yekudzora system.

Iwe uchafanirwa kugadzirisa iwo matambudziko mamwe chete zvisinei nekuti iwe unosarudza monorepository kana polyrepository. Unosunungura sei zvinyorwa? Ndeipi nzira yako yekuvandudza? Kudzokera shure kugarisana? Cross project dependencies? Ndeapi masitayera ekuvaka anogamuchirwa? Iwe unogadzirisa sei kuvaka uye kuyedza zvivakwa? Ndaza yacho haiperi. Uye iwe uchaagadzirisa ese sezvaunokura. Hapana chese chemahara.

Ini ndinofunga nharo yaMat yakafanana nemaonero akagovaniswa nevakawanda mainjiniya (uye mamaneja) ini ndinoremekedza. Izvi zvinoitika kubva pamaonero einjiniya anoshanda pachikamu kana timu inoshanda pachikamu. Iwe unonzwa zvinhu zvakadai:

  • Iyo codebase yakakura - ini handidi zvese izvi zvisina kunaka.
  • Zvakaoma kuti ndiedze nekuti ndinofanira kuedza zvese izvi zvisina basa zvandisingade.
  • Zvakanyanya kuoma kushanda nekunze kutsamira.
  • Ini ndinoda yangu chaiyo vhezheni yekudzora masisitimu.

Chokwadi, pfungwa idzi dzose dzakarurama. Izvi zvinoitika muzviitiko zvose zviri zviviri - mu polyrepository ndine tsvina yangu, kunze kweiyo inodiwa pakuvaka ... Ndinogonawo kuda imwe tsvina. Saka ini "ndinongoita" kugadzira zvishandiso zvinotarisa purojekiti yese. Kana kuti ini ndinogadzira fake monorepository ine submodules. Taigona kufamba tichitenderera izvi zuva rose. Asi ini ndinofunga nharo yaMatt inopotsa chikonzero chikuru, chandakanyungudika zvakanyanya ndichifarira monorepository:

Inomutsa kutaurirana uye inoratidza matambudziko

Patinoparadzanisa marepositori, tinogadzira de facto dambudziko rekubatana uye pachena. Izvi zvinoenderana nemafungiro atinoita nezvezvikwata (kunyanya nzira iyo nhengo dzega dzega dzinofunga nezvadzo): isu tine basa rechimwe chikamu. Tinoshanda tiri toga. Miganhu inoiswa pachikwata changu uye chikamu (s) chatiri kushanda pachiri.

Sezvo mavakirwo akawedzera kuoma, timu imwe haichakwanisi kuigadzirisa yega. Vashoma mainjiniya vane system yese mumusoro mavo. Ngatiti iwe unodzora chikamu chakagovaniswa A icho chinoshandiswa neTimu B, C, uye D. Chikwata A chiri kugadzirisa, kuvandudza API, uye zvakare kuchinja mukati mekuita. Nekuda kweizvozvo, shanduko hadzisi kumashure dzinoenderana. Nderipi zano raunaro?

  • Tsvaga nzvimbo dzese dzinoshandiswa API yekare.
  • Pane nzvimbo idzo API nyowani isingagone kushandiswa?
  • Unogona here kugadzirisa uye kuyedza zvimwe zvikamu kuti uone kuti hazvityoke?
  • Zvikwata izvi zvinogona kuyedza shanduko dzako izvozvi?

Ndokumbira utarise kuti iyi mibvunzo yakazvimirira pane repository mhando. Iwe uchada kutsvaga zvikwata B, C uye D. Unozoda kutaura navo, kutsvaga nguva, kunzwisisa zvavanokoshesa. Tinovimba kuti uchadaro.

Hapana munhu anoda kuita izvi. Izvi hazvinakidze zvakanyanya pane kungogadzirisa iyo API damn. Zvose ndezvemunhu uye zvinokanganisa. Mune polyrepository, unogona kungoita shanduko, upe kune vanhu vanoshanda pane icho chikamu (zvichida kwete B, C kana D) kuti chiongororwe, uye enderera mberi. Matimu B, C uye D anogona kungogara neshanduro yazvino ikozvino. Ivo vanozovandudzwa kana vaziva hunyanzvi hwako!

Mune monorepository, mutoro unotamiswa nekukasira. Chikwata cheA chinochinja chikamu chavo uye, kana chisina kungwarira, chinobva chatyora B, C uye D. Izvi zvinotungamira kuna B, C uye D vachiratidzira pamusuwo weA, vachishamisika kuti nei Team A yatyora gungano. Izvi zvinodzidzisa A kuti havagone kusvetuka runyorwa rwangu pamusoro. Vanofanira kutaura pamusoro pezvavachaita. B, C naD vanogona kufamba here? Ko kana B naC vachikwanisa, asi D yaive yakabatana zvakanyanya nemhedzisiro yemaitiro ekare egorgorithm?

Ipapo isu tinofanirwa kutaura nezvekuti tichabuda sei mumamiriro ezvinhu aya:

  1. Tsigiro yeakawanda emukati maAPIs, uye ichamaka iyo yekare algorithm seyakadzikiswa kudzamara D amira kuishandisa.
  2. Tsigiro yeakawanda kuburitswa shanduro, imwe ine yekare interface, imwe ine itsva.
  3. Kunonoka kuburitswa kwekuchinja kweA kusvika B, C, uye D vakwanisa kuzvigamuchira panguva imwe chete.

Ngatitii takasarudza 1, akati wandei maAPI. Muchiitiko ichi tine zvidimbu zviviri zvekodhi. Chekare uye chitsva. Zvakanyanya nyore mune mamwe mamiriro. Isu tinoongorora kodhi yekare mukati, toimaka seisina basa, uye tinobvumirana pane chirongwa chekubvisa nechikwata cheD. Zvakanyanya kufanana kune poly uye mono repositories.

Kuti tisunungure shanduro dzakawanda, tinoda bazi. Iye zvino tine zvikamu zviviri - A1 uye A2. Zvikwata B neC zvinoshandisa A2 uye D inoshandisa A1. Isu tinoda chese chikamu kuti chigadzirire kusunungurwa nekuti kuchengetedza zvigadziriso uye kumwe kugadzirisa kwebug kunogona kudiwa D asati aenda kumberi. Mune polyrepository, tinogona kuvanza izvi mubazi rekugara kwenguva refu rinonzwa zvakanaka. Mune monorepository, isu tinomanikidza iyo kodhi kuti igadzirwe mune nyowani module. Chikwata D chichiri kufanira kuita shanduko kune "chekare" chikamu. Wese munhu anogona kuona mutengo watiri kubhadhara pano - isu tave nekaviri kodhi kodhi, uye chero zvigadziriso zvebug zvinoshanda kuA1 neA2 zvinofanirwa kushanda kune ese ari maviri. Iine iyo branching nzira mune polyrepository, izvi zvakavanzwa kuseri kwecherry-tora. Isu tinoona kuti mutengo wakaderera nekuti hapana kudzokorora. Kubva pamaonero anoshanda, mutengo wakafanana: iwe unovaka, kusunungura, uye kuchengetedza maviri akanyanya kufanana macodebase kusvika iwe wagona kudzima rimwe rawo. Misiyano ndeyokuti ne monorepository kurwadziwa uku kwakananga uye kuoneka. Izvi zvakatonyanya kuipa, uye zvakanaka.

Pakupedzisira, takasvika papfundo rechitatu. Kusununguka kunonoka. Zvinogoneka kuti shanduko dzakaitwa neA dzichavandudza hupenyu hweChikwata A. Zvakakosha, asi kwete zvekukurumidzira. Tingangononoka here? Mune polyrepository, isu tinosundira izvi kupinza iyo artefact. Chokwadi tiri kuudza Team D izvi. Ingogara pashanduro yekare kusvika wabata! Izvi zvinokuita kuti uite mbwende. Chikwata A chinoenderera mberi nekushanda pachikamu chavo, vachiregeredza chokwadi chekuti Chikwata D chiri kushandisa shanduro iri kuramba ichipera (ndiro dambudziko reTeam D, vakapusa). Zvichakadaro, Chikwata D chinotaura zvisina kunaka nezve Chikwata A chekushaya hanya maitiro ekugadzikana kwekodhi, kana vakambotaura nezvazvo. Mwedzi inopfuura. Chekupedzisira, Chikwata D chinosarudza kutarisa mukana wekuvandudza, asi A chete ine dzimwe shanduko. Chikwata A hachiyeuke nguva kana kuti sei vakatyora D. Kukwidziridzwa kunonyanya kurwadza uye kunotora nguva yakareba. Izvo zvinozvitumira zvakare pasi pekutanga stack. Kusvika zuva ratine security issue muna A inotimanikidza kuita bazi. Chikwata A chinofanira kudzokera kumashure nenguva, kutsvaga poindi apo D yaive yakagadzikana, gadzirisa dambudziko ipapo, uye gadzirira kusunungurwa. Ichi ndicho chisarudzo chechokwadi chinoitwa nevanhu, uye chakanyanya kuipa. Zvinoita sezvakanaka kune vese Chikwata A neChikwata D chero isu tichigona kufuratira.

Mune monorepository, yechitatu haisi sarudzo. Iwe unomanikidzwa kubata nemamiriro acho mune imwe yenzira mbiri. Iwe unofanirwa kuona mari yekuve nematavi maviri ekuburitsa. Dzidza kuzvidzivirira kubva kune zvigadziriso zvinotyora kumashure kuenderana. Asi zvinonyanya kukosha: haugoni kudzivisa kuva nekurukurirano yakaoma.

Mune ruzivo rwangu, kana zvikwata zvikakura, hazvichagoneke kuchengeta system yese mupfungwa, uye ndicho chikamu chakakosha. Iwe unofanirwa kuvandudza kuoneka kwekupokana muhurongwa. Iwe unofanirwa kushanda nesimba kuti zvikwata zvitarise kure nezvikamu zvazvo uye kutarisa basa rezvimwe zvikwata nevatengi.

Ehe, unogona kugadzira zvishandiso zvinoedza kugadzirisa dambudziko repolyrepository. Asi ruzivo rwangu rwekudzidzisa kuenderera mberi uye otomatiki mumabhizinesi makuru anondiudza izvi: maitiro ekusagadzikana pasina kushandisa mamwe maturusi maitiro aunotarisira kuona. Maitiro akasarudzika epolyrepository ndeyekuzviparadzanisa nevamwe, ndiyo pfungwa yese. Maitiro ekutadza e monorepository akagovaniswa mutoro uye pachena, ndiyo pfungwa yese. Mune ese ari maviri, ini ndichagadzira chishandiso chinotsvedzesa mipendero yakaoma. Semutungamiri, ini ndichasarudza monorepository nguva dzese nekuti maturusi anoda kusimbisa tsika yandinoda, uye tsika dzinobva pazvisarudzo zvidiki uye basa rezuva nezuva rechikwata.

Vashandisi vakanyoresa chete ndivo vanogona kutora chikamu muongororo. Nyorera mu, Munogamuchirwa.

Ndivanaani vanyanyisi vakuru? Vatsigiri:

  • Monorepo

  • ngura

  • Sarudzo isiriyo / zvese zviri zviviri

33 vashandisi vakavhota. 13 vashandisi vakaramba.

Source: www.habr.com

Voeg