Monorepositories: tanpri, dwe

Monorepositories: tanpri, dwe

Tradiksyon atik la prepare pou elèv kou yo "Prattik ak zouti DevOps" nan pwojè edikasyon OTUS la.

Ou ta dwe chwazi yon monorepository paske konpòtman li ankouraje nan ekip ou yo se transparans ak responsablite pataje, espesyalman lè ekip yo grandi. Nenpòt fason, ou pral oblije envesti nan zouti, men li toujou pi bon si konpòtman an default se konpòtman an ou vle nan kòmandman ou yo.

Poukisa nap pale de sa?

Matt Klein te ekri atik la "Monorepos: Tanpri pa fè sa!"  (nòt tradiktè a: tradiksyon sou Habré "Monorepozitwa: tanpri pa fè sa"). Mwen renmen Matt, mwen panse ke li trè entelijan epi ou ta dwe li pwen de vi li. Okòmansman, li te pibliye biwo vòt la sou Twitter:

Monorepositories: tanpri, dwe

Creole:
Joudlan sa a, mwen pral diskite sou ki jan monorepositories ridikil yo. 2019 la te kòmanse tou dousman. Nan lespri sa a, mwen ofri w yon sondaj. Ki moun ki gwo fanatik yo? Sipòtè yo:
- Monorepo
- Rouye
- Sondaj ki pa kòrèk / tou de

Repons mwen an te, "Mwen se literalman tou de moun sa yo." Olye pou n pale sou fason Rust se yon dwòg, ann gade poukisa mwen panse li mal sou monorepositories. Yon ti kras sou tèt ou. Mwen se CTO Chef Software. Nou gen apeprè 100 enjenyè, yon baz kòd ki pral tounen sou 11-12 ane, ak 4 pwodwi prensipal yo. Gen kèk nan kòd sa a nan yon polyrepository (pozisyon mwen kòmanse), kèk nan yon monorepository (pozisyon mwen ye kounye a).

Anvan mwen kòmanse: chak agiman mwen fè isit la pral aplike nan tou de kalite depo. Dapre mwen, pa gen okenn rezon teknik poukisa ou ta dwe chwazi yon kalite depo sou yon lòt. Ou ka fè nenpòt apwòch travay. Mwen byen kontan pale sou sa, men mwen pa enterese nan rezon teknik atifisyèl ki fè youn siperyè yon lòt.

Mwen dakò ak premye pati nan pwen Matt la:

Paske nan echèl, yon monorepository pral rezoud tout pwoblèm yo menm ke yon polyrepository rezoud, men an menm tan an fòse ou byen marye kòd ou a epi ki mande efò enkwayab pou ogmante évolutivité nan sistèm kontwòl vèsyon ou an.

Ou pral oblije rezoud pwoblèm yo menm kèlkeswa si w chwazi yon monorepository oswa yon polyrepository. Ki jan ou lage degaje yo? Ki apwòch ou genyen pou mizajou? Konpatibilite bak? Kwa depandans pwojè? Ki estil achitekti ki akseptab? Ki jan ou jere bati ak tès enfrastrikti ou a? Lis la se kontinuèl. Epi w ap rezoud yo tout pandan w ap grandi. Pa gen fwomaj gratis.

Mwen panse ke agiman Matt la sanble ak opinyon anpil enjenyè (ak manadjè) mwen respekte. Sa rive nan pèspektiv nan enjenyè a k ap travay sou eleman an oswa ekip la k ap travay sou eleman an. Ou tande bagay tankou:

  • Codebase a ankonbran - mwen pa bezwen tout tenten sa yo.
  • Li pi difisil pou teste paske mwen oblije teste tout tenten sa yo ke mwen pa bezwen.
  • Li pi difisil pou travay ak depandans ekstèn.
  • Mwen bezwen pwòp sistèm kontwòl vèsyon vityèl mwen.

Natirèlman, tout pwen sa yo jistifye. Sa rive nan tou de ka - nan polyrepository la mwen gen tenten pwòp mwen an, anplis de sa ki nesesè pou bati a ... Mwen ka bezwen tou lòt tenten. Se konsa, mwen "senpleman" kreye zouti ki tcheke tout pwojè a. Oswa mwen kreye yon fo monorepository ak submodules. Nou ta ka mache alantou sa a tout jounen an. Men, mwen panse ke agiman Matt la manke rezon prensipal la, ki mwen ranvèse byen lou an favè monorepository la:

Li pwovoke kominikasyon epi li montre pwoblèm

Lè nou separe depo, nou kreye yon pwoblèm defakto nan kowòdinasyon ak transparans. Sa a koresponn ak fason nou panse sou ekip yo (sitou fason manm endividyèl yo panse sou yo): nou responsab pou yon sèten eleman. Nou travay nan izolasyon relatif. Limit yo fikse sou ekip mwen an ak eleman n ap travay sou yo.

Kòm achitekti vin pi konplèks, yon ekip pa ka jere li pou kont li. Trè kèk enjenyè gen tout sistèm nan nan tèt yo. Ann di ou jere yon eleman pataje A ke Ekip B, C, ak D yo itilize. Ekip A ap refactoring, amelyore API a, epi tou chanje aplikasyon entèn la. Kòm yon rezilta, chanjman yo pa konpatib bak. Ki konsèy ou genyen?

  • Jwenn tout kote yo itilize ansyen API a.
  • Èske gen kote nouvo API a pa ka itilize?
  • Èske ou ka ranje ak teste lòt konpozan pou asire w ke yo pa kraze?
  • Èske ekip sa yo ka teste chanjman ou yo kounye a?

Tanpri sonje ke kesyon sa yo endepandan de kalite depo a. W ap bezwen jwenn ekip B, C ak D. W ap bezwen pale ak yo, chèche konnen lè a, konprann priyorite yo. Omwen nou espere ou pral.

Pa gen moun ki reyèlman vle fè sa. Sa a se yon anpil mwens plezi pase jis repare API a modi. Se tout moun ak sal. Nan yon polyrepository, ou ka tou senpleman fè chanjman, bay moun k ap travay sou eleman sa a (pwobableman pa B, C oswa D) pou revize, epi kontinye. Ekip B, C ak D ka jis rete ak vèsyon aktyèl yo pou kounye a. Yo pral renouvle lè yo reyalize jeni ou!

Nan yon monorepository, responsablite chanje pa default. Ekip A chanje eleman yo epi, si se pa atansyon, imedyatman kraze B, C ak D. Sa mennen nan B, C ak D parèt devan pòt A a, mande poukisa Ekip A te kraze asanble a. Sa a anseye A ke yo pa ka sote lis mwen an pi wo a. Yo dwe pale sou sa yo pral fè. Èske B, C ak D ka deplase? E si B ak C kapab, men D te gen rapò ak yon efè segondè nan konpòtman ansyen algorithm la?

Lè sa a, nou dwe pale sou ki jan nou pral soti nan sitiyasyon sa a:

  1. Sipò pou plizyè API entèn yo, epi yo pral make ansyen algorithm la kòm depreche jiskaske D ka sispann sèvi ak li.
  2. Sipò pou plizyè vèsyon lage, youn ak ansyen koòdone, youn ak nouvo.
  3. Reta lage chanjman A yo jiskaske B, C, ak D ka aksepte li ansanm.

Ann di nou te chwazi 1, plizyè API. Nan ka sa a nou gen de moso kòd. Ansyen ak nouvo. Byen pratik nan kèk sitiyasyon. Nou tcheke ansyen kòd la tounen nan, make li kòm obsolèt, epi dakò sou yon orè retire ak ekip la D. Esansyèlman idantik pou poly ak mono depo.

Pou lage plizyè vèsyon, nou bezwen yon branch. Koulye a, nou gen de eleman - A1 ak A2. Ekip B ak C itilize A2 epi D itilize A1. Nou bezwen chak konpozan pare pou lage paske dènye enfòmasyon sekirite yo ak lòt koreksyon ensèk yo ka nesesè anvan D ka avanse. Nan yon polyrepository, nou ka kache sa a nan yon branch ki dire lontan ki santi bon. Nan yon monorepository, nou fòse kòd la yo dwe kreye nan yon nouvo modil. Ekip D ap toujou oblije fè chanjman nan "ansyen" eleman an. Tout moun ka wè pri a nou ap peye isit la - kounye a nou gen de fwa plis kòd, epi nenpòt ki korije ensèk ki aplike nan A1 ak A2 dwe aplike nan tou de nan yo. Avèk apwòch la branch nan yon polyrepository, sa a kache dèyè Cherry-pick. Nou konsidere pri a pi ba paske pa gen repetisyon. Soti nan yon pwendvi pratik, pri a se menm bagay la: ou pral bati, lage, epi kenbe de baz kod lajman idantik jiskaske ou ka efase youn nan yo. Diferans lan se ke ak yon monorepository doulè sa a se dirèk ak vizib. Sa a se menm pi mal, e sa bon.

Finalman, nou rive nan twazyèm pwen an. Reta lage. Li posib ke chanjman A te fè ap amelyore lavi Ekip A a. Enpòtan, men se pa ijan. Èske nou ka jis retade? Nan yon polyrepository, nou pouse sa a pou pin artefact la. Natirèlman nou ap di sa a ekip D. Jis rete sou ansyen vèsyon an jiskaske ou ratrape! Sa a mete ou moute yo jwe lach la. Ekip A ap kontinye travay sou eleman yo, inyore lefèt ke Ekip D ap itilize yon vèsyon de pli zan pli demode (sa a se pwoblèm Ekip D a, yo ap estipid). Pandan se tan, Ekip D pale mal sou atitid neglijans Ekip A a anvè estabilite kòd, si yo pale sou li nan tout. Mwa pase. Finalman, Ekip D deside gade posibilite pou mete ajou, men A sèlman gen plis chanjman. Ekip A apèn sonje ki lè oswa ki jan yo te kraze D. Amelyorasyon an pi douloure epi yo pral pran plis tan. Ki voye li pi lwen pile priyorite a. Jiska jou nou gen yon pwoblèm sekirite nan A ki fòse nou fè yon branch. Ekip A dwe retounen nan tan, jwenn yon pwen lè D te estab, ranje pwoblèm nan la, epi fè li pare pou lage. Sa a se chwa defakto moun fè, epi li se byen lwen pi move a. Li sanble bon pou tou de Ekip A ak Ekip D osi lontan ke nou ka inyore youn ak lòt.

Nan yon monorepository, twazyèm lan se reyèlman pa yon opsyon. Ou oblije fè fas ak sitiyasyon an nan youn nan de fason. Ou bezwen wè depans pou gen de branch lage. Aprann pwoteje tèt ou kont mizajou ki kraze konpatibilite bak. Men sa ki pi enpòtan: ou pa ka evite fè yon konvèsasyon difisil.

Nan eksperyans mwen, lè ekip yo vin gwo, li pa posib ankò kenbe tout sistèm nan nan tèt ou, e se pati ki pi enpòtan an. Ou dwe amelyore vizibilite dezakò nan sistèm nan. Ou dwe travay aktivman pou fè ekip yo gade lwen eleman yo epi gade travay lòt ekip ak konsomatè yo.

Wi, ou ka kreye zouti ki eseye rezoud pwoblèm nan polyrepository. Men, eksperyans mwen ansèyman livrezon kontinyèl ak automatisation nan gwo antrepriz di m 'sa a: konpòtman an default san yo pa itilize nan zouti adisyonèl se konpòtman an ou espere wè. Konpòtman an default nan yon polyrepository se izolasyon, sa a tout pwen an. Konpòtman default nan yon monorepository se pataje responsablite ak transparans, sa a tout pwen an. Nan de ka yo, mwen pral kreye yon zouti ki pral lis soti bor yo ki graj. Kòm yon lidè, mwen pral chwazi yon monorepository chak fwa paske zouti yo bezwen ranfòse kilti mwen vle a, ak kilti soti nan ti desizyon ak travay chak jou ekip la.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Kiyès ki pi gwo fanatik yo? Sipòtè yo:

  • Monorepo

  • Rouye

  • Sondaj ki pa kòrèk / tou de

33 itilizatè yo te vote. 13 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè