Monorepositories: jọwọ, gbọdọ

Monorepositories: jọwọ, gbọdọ

Translation ti awọn article pese sile fun dajudaju omo ile "Awọn iṣe DevOps ati awọn irinṣẹ" ni OTUS eko ise agbese.

O yẹ ki o yan monorepository nitori ihuwasi ti o ṣe igbega ninu awọn ẹgbẹ rẹ jẹ akoyawo ati ojuse pinpin, paapaa bi awọn ẹgbẹ ṣe n dagba. Ni ọna kan, iwọ yoo ni lati ṣe idoko-owo ni ohun elo irinṣẹ, ṣugbọn o dara nigbagbogbo ti ihuwasi aiyipada jẹ ihuwasi ti o fẹ ninu awọn aṣẹ rẹ.

Kini idi ti a n sọrọ nipa eyi?

Matt Klein kọ nkan naa "Monorepos: Jọwọ ma ṣe!"  (akọsilẹ onitumọ: itumọ lori Habré "Monorepositories: Jọwọ maṣe"). Mo fẹran Matt, Mo ro pe o jẹ ọlọgbọn pupọ ati pe o yẹ ki o ka oju-ọna rẹ. Ni akọkọ o ṣe ikede idibo naa lori Twitter:

Monorepositories: jọwọ, gbọdọ

Gbigbe:
Yi odun titun ká Day, Emi yoo jiyan nipa bi yeye monorepositories ni o wa. Ọdun 2019 bẹrẹ ni idakẹjẹ. Ninu ẹmi eyi, Mo fun ọ ni iwadi kan. Ta ni awọn agbaniyanju nla? Awọn oluranlọwọ:
- Monorepo
- ipata
- Idibo ti ko tọ / mejeeji

Idahun mi ni, “Emi ni gidi ti awọn mejeeji yẹn.” Dipo sisọ nipa bi Rust ṣe jẹ oogun, jẹ ki a wo idi ti Mo ro pe o jẹ aṣiṣe nipa awọn ohun elo monorepositories. Diẹ diẹ nipa ara rẹ. Emi ni CTO ti Oluwanje Software. A ni nipa awọn onimọ-ẹrọ 100, ipilẹ koodu ti nlọ sẹhin nipa awọn ọdun 11-12, ati awọn ọja akọkọ 4. Diẹ ninu koodu yii wa ni polyrepository (ipo ibẹrẹ mi), diẹ ninu wa ni monorepository (ipo mi lọwọlọwọ).

Ṣaaju ki Mo to bẹrẹ: gbogbo ariyanjiyan ti Mo ṣe nibi yoo kan si iru awọn ibi ipamọ mejeeji. Ni ero mi, ko si idi imọ-ẹrọ idi ti o yẹ ki o yan iru ibi ipamọ kan lori omiiran. O le jẹ ki ọna eyikeyi ṣiṣẹ. Inu mi dun lati sọrọ nipa rẹ, ṣugbọn Emi ko nifẹ si awọn idi imọ-ẹrọ atọwọda idi ti ọkan fi ga ju ekeji lọ.

Mo gba pẹlu apakan akọkọ ti aaye Matt:

Nitoripe ni iwọn, monorepository kan yoo yanju gbogbo awọn iṣoro kanna ti polyrepository kan yanju, ṣugbọn ni akoko kanna fipa mu ọ lati ṣajọpọ koodu rẹ ni wiwọ ati nilo awọn akitiyan iyalẹnu lati mu iwọn iwọn ti eto iṣakoso ẹya rẹ pọ si.

Iwọ yoo ni lati yanju awọn iṣoro kanna laibikita boya o yan monorepository tabi polyrepository kan. Bawo ni o ṣe tu awọn idasilẹ silẹ? Kini ọna rẹ si awọn imudojuiwọn? Ibamu sẹhin? Cross ise agbese gbára? Ohun ti ayaworan aza ni o wa itewogba? Bawo ni o ṣe ṣakoso kikọ rẹ ati idanwo awọn amayederun? Awọn akojọ jẹ ailopin. Ati pe iwọ yoo yanju gbogbo wọn bi o ti n dagba. Ko si warankasi ọfẹ.

Mo ro pe ariyanjiyan Matt jẹ iru awọn iwo ti o pin nipasẹ ọpọlọpọ awọn onimọ-ẹrọ (ati awọn alakoso) Mo bọwọ fun. Eyi waye lati irisi ẹlẹrọ ti n ṣiṣẹ lori paati tabi ẹgbẹ ti n ṣiṣẹ lori paati naa. O gbọ awọn nkan bii:

  • Awọn codebase jẹ olopobobo - Emi ko nilo gbogbo yi ijekuje.
  • O nira lati ṣe idanwo nitori Mo ni lati ṣe idanwo gbogbo ijekuje yii ti Emi ko nilo.
  • O nira sii lati ṣiṣẹ pẹlu awọn igbẹkẹle ita.
  • Mo nilo ara mi foju version Iṣakoso awọn ọna šiše.

Nitoribẹẹ, gbogbo awọn aaye wọnyi jẹ idalare. Eyi ṣẹlẹ ni awọn ọran mejeeji - ni polyrepository Mo ni ijekuje ti ara mi, ni afikun si eyi ti o nilo fun kọ… Mo tun le nilo ijekuje miiran. Nitorinaa Mo “nikan” ṣẹda awọn irinṣẹ ti o ṣayẹwo gbogbo iṣẹ akanṣe naa. Tabi Mo ṣẹda monorepository iro kan pẹlu submodules. A le rin ni ayika yi gbogbo ọjọ. Ṣugbọn Mo ro pe ariyanjiyan Matt padanu idi akọkọ, eyiti Mo yipada pupọ ni ojurere ti monorepository:

O fa ibaraẹnisọrọ ati ṣafihan awọn iṣoro

Nigba ti a ba yapa awọn ibi ipamọ, a ṣẹda iṣoro de facto ti isọdọkan ati akoyawo. Eyi ni ibamu si ọna ti a ronu nipa awọn ẹgbẹ (paapaa ọna ti awọn ọmọ ẹgbẹ kọọkan ṣe ronu nipa wọn): a ni iduro fun paati kan. A ṣiṣẹ ni ojulumo ipinya. Awọn aala ti wa ni ipilẹ lori ẹgbẹ mi ati awọn paati (awọn) ti a n ṣiṣẹ lori.

Bi faaji ṣe di eka sii, ẹgbẹ kan ko le ṣakoso rẹ nikan. Awọn ẹlẹrọ pupọ diẹ ni gbogbo eto ni ori wọn. Jẹ ki a sọ pe o ṣakoso paati A pin ti o lo nipasẹ Awọn ẹgbẹ B, C, ati D. Ẹgbẹ A n ṣe atunṣe, imudara API, ati tun yi imuse inu pada. Bi abajade, awọn iyipada ko ni ibaramu sẹhin. Imọran wo ni o ni?

  • Wa gbogbo awọn aaye nibiti a ti lo API atijọ.
  • Ṣe awọn aaye wa nibiti API tuntun ko le lo?
  • Ṣe o le ṣatunṣe ati idanwo awọn paati miiran lati rii daju pe wọn ko fọ?
  • Njẹ awọn ẹgbẹ wọnyi le ṣe idanwo awọn ayipada rẹ ni bayi?

Jọwọ ṣe akiyesi pe awọn ibeere wọnyi jẹ ominira ti iru ibi ipamọ. Iwọ yoo nilo lati wa awọn ẹgbẹ B, C ati D. Iwọ yoo nilo lati ba wọn sọrọ, wa akoko, loye awọn ohun pataki wọn. O kere ju a nireti pe iwọ yoo.

Ko si ẹnikan ti o fẹ ṣe eyi gaan. Eyi jẹ igbadun ti o kere pupọ ju titunṣe API eegun naa. O jẹ gbogbo eniyan ati idoti. Ni polyrepository kan, o le ṣe awọn ayipada nirọrun, fun awọn eniyan ti n ṣiṣẹ lori paati yẹn (boya kii ṣe B, C tabi D) fun atunyẹwo, ati tẹsiwaju. Awọn ẹgbẹ B, C ati D le kan duro pẹlu ẹya lọwọlọwọ wọn fun bayi. Wọn yoo jẹ isọdọtun nigbati wọn ba mọ oloye-pupọ rẹ!

Ni monorepository kan, ojuse ti yipada nipasẹ aiyipada. Egbe A yipada paati wọn ati, ti ko ba ṣọra, lẹsẹkẹsẹ fọ B, C ati D. Eyi yori si B, C ati D ti n ṣafihan ni ẹnu-ọna A, iyalẹnu idi ti Ẹgbẹ A fi fọ apejọ naa. Eyi nkọ A pe wọn ko le foju atokọ mi loke. Wọn gbọdọ sọrọ nipa ohun ti wọn yoo ṣe. Njẹ B, C ati D le gbe? Kini ti B ati C ba le, ṣugbọn D ni ibatan pẹkipẹki si ipa ẹgbẹ ti ihuwasi algorithm atijọ?

Lẹhinna a ni lati sọrọ nipa bi a ṣe le jade ninu ipo yii:

  1. Atilẹyin fun ọpọlọpọ awọn API inu, ati pe yoo samisi algoridimu atijọ bi a ti parẹ titi D yoo fi da lilo rẹ duro.
  2. Atilẹyin fun awọn ẹya idasilẹ lọpọlọpọ, ọkan pẹlu wiwo atijọ, ọkan pẹlu ọkan tuntun.
  3. Idaduro itusilẹ ti awọn ayipada A titi B, C, ati D le gba ni nigbakannaa.

Jẹ ki a sọ pe a ti yan 1, awọn API pupọ. Ni idi eyi a ni awọn ege meji ti koodu. Atijọ ati titun. Oyimbo rọrun ni diẹ ninu awọn ipo. A ṣayẹwo koodu atijọ pada, samisi rẹ bi a ti parẹ, ati gba lori iṣeto yiyọ kuro pẹlu ẹgbẹ D ni pataki fun awọn ibi ipamọ poli ati mono.

Lati tu awọn ẹya pupọ silẹ, a nilo ẹka kan. Bayi a ni meji irinše - A1 ati A2. Awọn ẹgbẹ B ati C lo A2 ati D nlo A1. A nilo gbogbo paati lati ṣetan fun itusilẹ nitori awọn imudojuiwọn aabo ati awọn atunṣe kokoro miiran le nilo ṣaaju ki D le lọ siwaju. Ni polyrepository, a le fi eyi pamọ ni ẹka ti o pẹ to ti o dara. Ni a monorepository, a ipa koodu to a ṣẹda ni titun kan module. Ẹgbẹ D yoo tun ni lati ṣe awọn ayipada si paati “atijọ”. Gbogbo eniyan le rii idiyele ti a n san nibi - a ni bayi ni ẹẹmeji koodu pupọ, ati pe eyikeyi awọn atunṣe kokoro ti o kan A1 ati A2 gbọdọ kan si awọn mejeeji. Pẹlu ọna ẹka ni polyrepository kan, eyi ti farapamọ lẹhin ṣẹẹri-yan. A ro pe iye owo naa kere nitori pe ko si ẹda-iwe. Lati oju iwoye ti o wulo, idiyele naa jẹ kanna: iwọ yoo kọ, tu silẹ, ati ṣetọju awọn koodu koodu meji ti o jọra pupọ titi iwọ o fi le pa ọkan ninu wọn rẹ. Iyatọ ni pe pẹlu monorepository irora yii jẹ taara ati han. Eleyi jẹ ani buru, ati awọn ti o dara.

Nikẹhin, a de aaye kẹta. Idaduro itusilẹ. O ṣee ṣe pe awọn iyipada ti A ṣe yoo mu igbesi aye Ẹgbẹ A. pataki, ṣugbọn kii ṣe iyara. Njẹ a le kan idaduro bi? Ni polyrepository kan, a Titari eyi lati pin ohun-ọṣọ naa. Dajudaju a n sọ eyi fun Ẹgbẹ D. Kan duro lori ẹya atijọ titi iwọ o fi mu! Eleyi ṣeto o soke lati mu awọn èèwọ. Egbe A tesiwaju lati sise lori wọn paati, laifotape o daju wipe Team D ti wa ni lilo ohun increasingly igba atijọ version (iyẹn ni Team D ká isoro, ti won ba wa Karachi). Nibayi, Ẹgbẹ D sọrọ ni ibi nipa ihuwasi aibikita Ẹgbẹ A si iduroṣinṣin koodu, ti wọn ba sọrọ nipa rẹ rara. Awọn oṣu kọja. Lakotan, Ẹgbẹ D pinnu lati wo iṣeeṣe ti imudojuiwọn, ṣugbọn A nikan ni awọn ayipada diẹ sii. Egbe A ti awọ ranti nigbati tabi bi wọn ti bu D. Igbesoke jẹ diẹ irora ati ki o yoo gba to gun. Eyi ti o rán siwaju si isalẹ ayo akopọ. Titi di ọjọ ti a ni ọrọ aabo ni A ti o fi agbara mu wa lati ṣe ẹka kan. Ẹgbẹ A gbọdọ pada sẹhin ni akoko, wa aaye kan nigbati D jẹ iduroṣinṣin, ṣatunṣe iṣoro naa nibẹ, jẹ ki o ṣetan fun itusilẹ. Eyi ni yiyan de facto ti eniyan ṣe, ati pe o buru julọ. O dabi ẹnipe o dara fun ẹgbẹ A ati Egbe D niwọn igba ti a le foju kọ ara wa.

Ni monorepository kan, ẹkẹta kii ṣe aṣayan gaan. O fi agbara mu lati koju ipo naa ni ọkan ninu awọn ọna meji. O nilo lati wo awọn idiyele ti nini awọn ẹka itusilẹ meji. Kọ ẹkọ lati daabobo ararẹ lọwọ awọn imudojuiwọn ti o fọ ibamu sẹhin. Ṣugbọn pataki julọ: o ko le yago fun nini a soro ibaraẹnisọrọ.

Ninu iriri mi, nigbati awọn ẹgbẹ ba tobi, ko ṣee ṣe lati tọju gbogbo eto ni lokan, ati pe iyẹn ni apakan pataki julọ. O gbọdọ ni ilọsiwaju hihan ariyanjiyan ninu eto naa. O gbọdọ ṣiṣẹ ni itara lati gba awọn ẹgbẹ lati wo kuro ninu awọn paati wọn ati wo iṣẹ ti awọn ẹgbẹ miiran ati awọn alabara.

Bẹẹni, o le ṣẹda awọn irinṣẹ ti o gbiyanju lati yanju iṣoro polyrepository. Ṣugbọn iriri mi ti nkọ ifijiṣẹ lemọlemọfún ati adaṣe ni awọn ile-iṣẹ nla sọ fun mi eyi: ihuwasi aiyipada laisi lilo awọn irinṣẹ afikun ni ihuwasi ti o nireti lati rii. Iwa aiyipada ti polyrepository jẹ ipinya, iyẹn ni gbogbo aaye. Iwa aiyipada ti monorepository jẹ ojuse pinpin ati akoyawo, iyẹn ni gbogbo aaye naa. Ni awọn ọran mejeeji, Emi yoo ṣẹda ọpa kan ti yoo dan awọn egbegbe ti o ni inira. Gẹgẹbi oludari, Emi yoo yan monorepository ni gbogbo igba nitori awọn irinṣẹ nilo lati fikun aṣa ti Mo fẹ, ati pe aṣa wa lati awọn ipinnu kekere ati iṣẹ ojoojumọ ti ẹgbẹ.

Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. wọle, Jowo.

Àwọn wo ló tóbi jù lọ? Awọn oluranlọwọ:

  • Monorepo

  • ipata

  • Idibo ti ko tọ / mejeeji

33 olumulo dibo. 13 olumulo abstained.

orisun: www.habr.com

Fi ọrọìwòye kun