Ama-monorepositories: ngicela, kufanele

Ama-monorepositories: ngicela, kufanele

Ukuhunyushwa kwesihloko okulungiselelwe abafundi bezifundo "Imikhuba namathuluzi we-DevOps" kuphrojekthi yezemfundo ye-OTUS.

Kufanele ukhethe indawo yokugcina izinto eyodwa ngoba indlela yokuziphatha eyikhuthazayo emaqenjini akho isobala kanye nomthwalo wemfanelo owabelana ngawo, ikakhulukazi njengoba amaqembu ekhula. Kunoma ikuphi, kuzodingeka utshale ekusetshenzisweni kwamathuluzi, kodwa kuhlale kungcono uma ukuziphatha okuzenzakalelayo kuwukuziphatha okufunayo emiyalweni yakho.

Kungani sikhuluma ngalokhu?

UMat Klein wabhala lesi sihloko "Ama-Monorepos: Ngicela ungakwenzi!"  (inothi lomhumushi: ukuhumusha ku-Habré "Ama-Monorepositories: ngicela ungakwenzi"). Ngiyamthanda uMatt, ngicabanga ukuthi uhlakaniphe kakhulu futhi kufanele ufunde umbono wakhe. Ubhale lo mbiko kuTwitter wathi:

Ama-monorepositories: ngicela, kufanele

Ukuhumusha:
Kulolu suku lukaNcibijane, ngizophikisana ngokuthi ama-monorepositories angenangqondo kangakanani. U-2019 waqala ngokuthula. Ngomoya walokhu, ngikunikeza ucwaningo. Obani abashisekeli abakhulu? Abasekeli:
- I-Monorepo
- Rust
- Ukuvota okungalungile / kokubili

Impendulo yami yayiwukuthi, "Ngempela ngingobabili labo bantu." Esikhundleni sokukhuluma ngokuthi i-Rust iyisidakamizwa kanjani, ake sibheke ukuthi kungani ngicabanga ukuthi unephutha ngama-monorepositories. Kancane ngawe. Ngiyi-CTO ye-Chef Software. Sinonjiniyela abangaba ngu-100, isisekelo sekhodi esibuyela emuva cishe eminyakeni eyi-11-12, kanye nemikhiqizo eyinhloko engu-4. Enye yale khodi iku-polyrepository (indawo yami yokuqala), enye ikwi-monorepository (isikhundla sami samanje).

Ngaphambi kokuthi ngiqale: zonke izingxabano engizenzayo lapha zizosebenza kuzo zombili izinhlobo zamakhosombe. Ngokubona kwami, asikho isizathu sobuchwepheshe sokuthi kungani kufanele ukhethe uhlobo olulodwa lwenqolobane kunolunye. Ungenza noma iyiphi indlela yokusebenza. Ngiyajabula ukukhuluma ngakho, kodwa anginandaba nezizathu zobuchwepheshe zokwenziwa zokuthi kungani umuntu ephakeme kunomunye.

Ngivumelana nengxenye yokuqala yephuzu likaMat:

Ngoba esikalini, i-monorepository izoxazulula zonke izinkinga ezifanayo ezixazululwa yi-polyrepository, kodwa ngesikhathi esifanayo ikuphoqa ukuthi ubhangqe ngokuqinile ikhodi yakho futhi idinga imizamo emangalisayo yokwandisa ukuqina kwesistimu yakho yokulawula inguqulo.

Kuzodingeka uxazulule izinkinga ezifanayo kungakhathaliseki ukuthi ukhetha i-monorepository noma i-polyrepository. Ukukhipha kanjani okukhishiwe? Ithini indlela yakho yokuthola izibuyekezo? Ukuhambisana emuva? Ukuncika kwephrojekthi ehlukahlukene? Yiziphi izitayela zezakhiwo ezamukelekayo? Uyiphatha kanjani ingqalasizinda yakho yokwakha nokuhlola? Uhlu alupheli. Futhi uzozixazulula zonke njengoba ukhula. Awukho ushizi wamahhala.

Ngicabanga ukuthi impikiswano kaMatt iyafana nemibono eyabiwe onjiniyela abaningi (nabaphathi) engiyihloniphayo. Lokhu kwenzeka ngokombono kanjiniyela osebenza engxenyeni noma ithimba elisebenza engxenyeni. Uzwa izinto ezifana nalezi:

  • I-codebase inkulu - angikudingi konke lokhu okungenamsoco.
  • Kunzima ukuvivinya ngoba kufanele ngihlole yonke le nkunkuma engingayidingi.
  • Kunzima kakhulu ukusebenza ngokuncika kwangaphandle.
  • Ngidinga amasistimu ami okulawula inguqulo.

Yiqiniso, wonke la maphuzu afanelekile. Lokhu kwenzeka kuzo zombili izimo - ku-polyrepository ngine-junk yami, ngaphezu kwaleyo edingekayo ekwakheni... Ngingase ngidinge enye imfucumfucu. Ngakho “ngimane” ngakha amathuluzi ahlola yonke iphrojekthi. Noma ngakha i-monorepository mbumbulu enama-submodule. Besingahambahamba lokhu usuku lonke. Kodwa ngicabanga ukuthi ingxabano kaMatt igeja isizathu esiyinhloko, engisiphendule kakhulu ngivuna i-monorepository:

Ivusa ukuxhumana futhi ibonise izinkinga

Uma sihlukanisa amakhosombe, sakha inkinga ye-de facto yokuxhumana nokubeka izinto obala. Lokhu kuhambisana nendlela esicabanga ngayo ngamaqembu (ikakhulukazi indlela amalungu ngamanye acabanga ngayo): sinesibopho sengxenye ethile. Sisebenza sodwa. Imingcele igxilile ethimbeni lami kanye nengxenye/izingxenye esisebenza kuzo.

Njengoba i-architecture iba inkimbinkimbi, ithimba elilodwa alisakwazi ukuliphatha lilodwa. Bambalwa kakhulu onjiniyela abanalo lonke uhlelo ekhanda labo. Ake sithi uphatha ingxenye A okwabelwana ngayo esetshenziswa Ithimba B, C, kanye ne-D. Ithimba A lenza kabusha, lithuthukisa i-API, futhi lishintsha nokusetshenziswa kwangaphakathi. Ngenxa yalokho, izinguquko azihambisani emuva. Isiphi iseluleko onaso?

  • Thola zonke izindawo lapho kusetshenziswa i-API endala.
  • Ingabe zikhona izindawo lapho i-API entsha ingakwazi ukusetshenziswa khona?
  • Ungakwazi yini ukulungisa futhi uhlole ezinye izingxenye ukuze wenze isiqiniseko sokuthi aziphuli?
  • Ingabe lawa maqembu angakwazi ukuhlola izinguquko zakho njengamanje?

Sicela uqaphele ukuthi le mibuzo izimele ohlotsheni lwekhosombe. Uzodinga ukuthola amaqembu B, C kanye no-D. Uzodinga ukukhuluma nawo, uthole isikhathi, uqonde izinto eziza kuqala kuwo. Okungenani sithemba ukuthi uzokwenza.

Akekho ngempela ofuna ukwenza lokhu. Lokhu akujabulisi kakhulu kunokulungisa nje i-API embi. Konke kungumuntu futhi kungcolile. Ku-polyrepository, ungamane wenze izinguquko, unikeze abantu abasebenza kuleyo ngxenye (mhlawumbe hhayi u-B, C noma D) ukuze ibuyekezwe, bese uqhubekela phambili. Amaqembu B, C kanye no-D angahlala nje nenguqulo yawo yamanje. Zizovuselelwa lapho ziqaphela ubuhlakani bakho!

Endaweni eyodwa, isibopho sishintshwa ngokuzenzakalela. Ithimba A lishintsha ingxenye yalo futhi, uma lingaqapheli, lihlephula ngokushesha okuthi B, C kanye no-D. Lokhu kuholela kokuthi B, C no-D babonakale emnyango ka-A, bezibuza ukuthi kungani iThimba A liphule umhlangano. Lokhu kufundisa u-A ukuthi abakwazi ukweqa uhlu lwami olungenhla. Kumele bakhulume ngalokho abazokwenza. Ingabe u-B, C no-D anganyakaza? Kuthiwani uma u-B no-C bengakwazi, kodwa u-D wayehlobene eduze nomthelela oseceleni wokuziphatha kwe-algorithm endala?

Ngemuva kwalokho kufanele sikhulume ngokuthi sizophuma kanjani kulesi simo:

  1. Ukusekela kwama-API amaningi angaphakathi, futhi kuzomaka i-algorithm endala njengehoxisiwe kuze kube yilapho u-D eyeka ukuyisebenzisa.
  2. Ukusekelwa kwezinguqulo eziningi zokukhishwa, eyodwa ene-interface endala, enye nentsha.
  3. Libazisa ukukhishwa kwezinguquko zika-A kuze kube u-B, C, no-D bangakwamukela ngesikhathi esisodwa.

Ake sithi sikhethe 1, ama-API ambalwa. Kulokhu sinezingxenye ezimbili zekhodi. Okudala nokusha. Kulula kakhulu kwezinye izimo. Sihlola ikhodi endala futhi, siyimaka njengehoxisiwe, futhi sivumelana ngeshejuli yokususa nethimba lika-D. Ifana kakhulu namakhosombe e-poly kanye ne-mono.

Ukuze sikhiphe izinguqulo eziningi, sidinga igatsha. Manje sinezingxenye ezimbili - i-A1 ne-A2. Amaqembu B no-C asebenzisa u-A2 no-D asebenzisa i-A1. Sidinga yonke ingxenye ukuthi ilungele ukukhishwa ngoba izibuyekezo zokuphepha nokunye ukulungiswa kweziphazamisi kungase kudingeke ngaphambi kokuthi u-D aye phambili. Ku-polyrepository, singakufihla lokhu egatsheni eliphila isikhathi eside elizizwa limnandi. Endaweni eyodwa, siphoqa ikhodi ukuthi idalwe kumojula entsha. Ithimba D kusazodingeka lenze izinguquko engxenyeni "endala". Wonke umuntu angabona izindleko esizikhokhayo lapha - manje sinekhodi ephindwe kabili, futhi noma yikuphi ukulungiswa kweziphazamisi okusebenza ku-A1 naku-A2 kufanele kusebenze kukho kokubili. Ngendlela ye-branching ku-polyrepository, lokhu kufihliwe ngemuva kwe-cherry-pick. Sibheka izindleko njengeziphansi ngoba akukho ukuphindaphinda. Ngokombono ongokoqobo, izindleko ziyefana: uzokwakha, ukhulule, futhi unakekele ama-codebase amabili afana kakhulu uze ukwazi ukususa eyodwa yawo. Umehluko wukuthi nge-monorepository lobu buhlungu buqondile futhi buyabonakala. Lokhu kubi nakakhulu, futhi lokho kuhle.

Ekugcineni, safika ephuzwini lesithathu. Ukulibaziseka kokukhishwa. Kungenzeka ukuthi izinguquko ezenziwe ngu-A zizothuthukisa izimpilo zeThimba A. Okubalulekile, kodwa hhayi okuphuthumayo. Singamane sibambezele? Ku-polyrepository, siphusha lokhu ukuze siphine i-artifact. Yebo sitshela lokhu ku-Team D. Vele uhlale enguqulweni yakudala uze ukwazi ukuqonda! Lokhu kukwenza ukwazi ukudlala igwala. Ithimba A liyaqhubeka nokusebenza engxenyeni yalo, likushaya indiva iqiniso lokuthi Ithimba D lisebenzisa inguqulo ephelelwa isikhathi (leyo inkinga yeThimba D, bayiziphukuphuku). Ngaleso sikhathi, iThimba D alikhulumi kabi ngesimo sengqondo sokunganaki seThimba A ngokuzinza kwekhodi, uma likhuluma ngaso nhlobo. Izinyanga ziyadlula. Ekugcineni, iThimba D linquma ukubheka ukuthi kungenzeka yini ukubuyekeza, kodwa u-A unezinguquko ezengeziwe. Ithimba A alikhumbuli kancane ukuthi liphule nini noma kanjani i-D. Ukuthuthukiswa kubuhlungu kakhulu futhi kuzothatha isikhathi eside. Okuyithumela phansi isitaki esibalulekile. Kuze kube wusuku esinenkinga yezokuphepha kwa-A esiphoqa ukuthi senze igatsha. Ithimba A kufanele libuyele emuva ngesikhathi, lithole iphoyinti lapho u-D ezinzile, lilungise inkinga lapho, futhi lilenze lilungele ukukhululwa. Lokhu ukukhetha kwabantu ngokweqiniso, futhi kubi kakhulu. Kubonakala kukuhle kuwo womabili iThimba A neThimba D inqobo nje uma singaziba sodwa.

Ku-monorepository, okwesithathu akuyona inketho. Uphoqeleka ukuthi ubhekane nesimo ngenye yezindlela ezimbili. Udinga ukubona izindleko zokuba namagatsha amabili okukhululwa. Funda ukuzivikela kuzibuyekezo eziphula ukuhambisana okubuyela emuva. Kodwa okubaluleke kakhulu: awukwazi ukugwema ukuba nengxoxo enzima.

Ngokuhlangenwe nakho kwami, lapho amaqembu ekhula, akusakwazi ukugcina uhlelo lonke engqondweni, futhi leyo ngxenye ebaluleke kakhulu. Kufanele uthuthukise ukubonakala kokungavumelani ohlelweni. Kufanele usebenze kanzima ukuze uthole amaqembu ukuthi abheke kude nezingxenye zawo futhi abheke umsebenzi wamanye amaqembu nabathengi.

Yebo, ungakha amathuluzi azama ukuxazulula inkinga ye-polyrepository. Kodwa ulwazi lwami lokufundisa ukulethwa okuqhubekayo kanye ne-automation emabhizinisini amakhulu lungitshela lokhu: ukuziphatha okuzenzakalelayo ngaphandle kokusebenzisa amathuluzi engeziwe ukuziphatha olindele ukukubona. Ukuziphatha okuzenzakalelayo kwe-polyrepository ukuzihlukanisa, yilelo phuzu lonke. Ukuziphatha okuzenzakalelayo kwe-monorepository kuwumthwalo wemfanelo okwabelwana ngawo nokuba sobala, yilona phuzu lonke. Kuzo zombili izimo, ngizodala ithuluzi elizoshelela imiphetho enzima. Njengomholi, ngizokhetha indawo yokugcina izinto ngaso sonke isikhathi ngoba amathuluzi adinga ukuqinisa isiko engiyifunayo, futhi isiko livela ezinqumweni ezincane kanye nomsebenzi wansuku zonke weqembu.

Abasebenzisi ababhalisiwe kuphela abangabamba iqhaza kuhlolovo. Ngena ngemvume, wamukelekile.

Obani abashiseka kakhulu? Abasekeli:

  • I-Monorepo

  • Rust

  • Ukuvota okungalungile / kokubili

Bangu-33 abasebenzisi abavotile. Abasebenzisi abangu-13 bagobile.

Source: www.habr.com

Engeza amazwana