{"id":34744,"date":"2019-10-31T22:00:10","date_gmt":"2019-10-31T19:00:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monorepozitorii-pozhalujsta-nado\/"},"modified":"2019-10-31T22:00:10","modified_gmt":"2019-10-31T19:00:10","slug":"monorepozitorii-pozhalujsta-nado","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","title":{"rendered":"Monorepos: palun, mitte teha","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepos: palun, mitte teha\" src=\"\/wp-content\/uploads\/2019\/05\/a973a60a06e7b336c08db26fa6d72149.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Artikli t\u00f5lge on ette valmistatud OTUS kursuse \u00fcli\u00f5pilaste jaoks. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/g5Rz\/\">\u201eDevOps praktikas ja t\u00f6\u00f6riistades\u201c<\/a><\/noindex> haridusprojektis OTUS.<\/em><\/p>\n<p>Te peate valima monorepo, sest selle soodustatav k\u00e4itumine teie meeskondades - see on l\u00e4bipaistvus ja kollektiivne vastutus, eriti meeskondade kasvades. Igal juhul peate investeerima t\u00f6\u00f6riistadesse, kuid alati on parem, kui vaikimisi k\u00e4itumine on see, mida soovite oma meeskondades n\u00e4ha. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h1 id=\"pochemu-my-govorim-ob-etom\">Miks me sellest r\u00e4\u00e4gime?<\/h1>\n<p><\/p>\n<p>Matt Klein kirjutas artikli <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@mattklein123\/monorepos-please-dont-e9a279be011b\">\u00abMonorepos: Please don\u2019t!\u00bb<\/a><\/noindex>\u200a (t\u00f5lkija m\u00e4rkus: t\u00f5lge Habrist <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/435306\/\">\u00abMonorepos: palun \u00e4rge tehke seda\u00bb<\/a><\/noindex>). Mulle meeldib Matt, arvan, et ta on v\u00e4ga tark, ja te peaksite lugema tema seisukohta. Alguses avaldas ta Twitteris k\u00fcsitluse:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Monorepos: palun, mitte teha\" src=\"\/wp-content\/uploads\/2019\/05\/edbc65b80288045e08394821c17a77a9.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>T\u00f5lge:<\/em><br \/>\n<em>Selles uusaasta p\u00e4eval vaieldan, kui naeruv\u00e4\u00e4rsed monorepos on. 2019. aasta algas m\u00e4rkamatult. Selle vaimus pakun teile k\u00fcsitluse. Kes on suured f\u00e4nnid? Pooldajad:<\/em><br \/>\n\u2014 <em>Monorepo<\/em><br \/>\n\u2014 <em>Rust<\/em><br \/>\n\u2014 <em>Vale k\u00fcsitlus \/ m\u00f5lemad<\/em><\/p>\n<p><\/p>\n<p>Minu vastus oli: \"Ma m\u00f5tlen t\u00f5eliselt nende kahe inimese peale.\" Enne kui r\u00e4\u00e4gime, kui suurep\u00e4rane on Rust, uurime, miks ma arvan, et ta eksib monorepositooriumide osas. Pisut endast. Olen Chef Software'i tehniline direktor. Meil on umbes 100 inseneri, koodibaas, mis ulatub 11\u201312 aasta taha, ja 4 peamist toodet. Osa sellest koodist on poli-repositooriumis (minu algne seisukoht), osa monorepositooriumis (minu praegune seisukoht).<\/p>\n<p><\/p>\n<p>Enne alustamist: iga argument, mida ma siin olen v\u00e4lja toonud, kehtib m\u00f5lema t\u00fc\u00fcpi repositooriumide kohta. Minu arvates ei ole tehnilisi p\u00f5hjuseid, miks peaksite valima \u00fche v\u00f5i teise repositooriumi. Te saate t\u00f6\u00f6le panna m\u00f5lemat l\u00e4henemist. Olen valmis sellest r\u00e4\u00e4kima, kuid tehislikud tehnilised p\u00f5hjused, miks \u00fchte peetakse teise \u00fcle, ei huvita mind. <\/p>\n<p><\/p>\n<p>Olen Matti vaate nurga esimeses osas n\u00f5us:<\/p>\n<p><\/p>\n<p><em>Sest suurtes skaalades lahendab monorepo k\u00f5ik samad probleemid, mis poli-repos, kuid see kutsub teid \u00fcles oma koodi tugevamalt siduma ja n\u00f5uab teie versioonihalduss\u00fcsteemi skaleeritavuse suurendamiseks tohutuid pingutusi.<\/em><\/p>\n<p><\/p>\n<p>Peate lahendama samu probleeme s\u00f5ltumata sellest, kas valite monorepo v\u00f5i poli-repo. Kuidas te vabastate? Milline on teie l\u00e4henemine v\u00e4rskendustele? Tagasi\u00fchilduvus? \u00dcksteise projektide s\u00f5ltuvused? Millised arhitektuurilised stiilid on vastuv\u00f5etavad? Kuidas te haldate oma ehitamise ja testimise infrastruktuuri? Loend on l\u00f5pmatu. Ja te lahendate need k\u00f5ik kasvanud oluliselt. Tasuta juustu ei ole.<\/p>\n<p><\/p>\n<p>Minu arvates on Matti argument sarnane paljude inseneride (ja juhtide) vaadetele, keda ma austan. See on vaade insenerilt, kes t\u00f6\u00f6tab komponendi kallal, v\u00f5i meeskonnalt, kes t\u00f6\u00f6tab komponendi kallal. Kuulete selliseid asju nagu:<\/p>\n<p><\/p>\n<ul>\n<li>Koodibaas on kohmakas \u2013 mul ei ole vaja kogu seda jama.<\/li>\n<li>Seda on keerulisem testida, kuna pean kontrollima kogu seda pr\u00fcgi, mida mul ei ole vaja.<\/li>\n<li>V\u00e4liste s\u00f5ltuvustega on keerulisem t\u00f6\u00f6tada.<\/li>\n<li>Mul on vaja oma versioonihalduss\u00fcsteeme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Muidugi, k\u00f5ik need punktid on p\u00f5hjendatud. See juhtub m\u00f5lemal juhul \u2014 minu poli-reposiitoriumis on oma pr\u00fcgi, lisaks sellele, mis on vajalik koostamiseks\u2026 V\u00f5ib-olla vajab mul ka muud pr\u00fcgi. Seega loon lihtsalt t\u00f6\u00f6riistad, mis teevad projekti checkouti. V\u00f5i loon vale monoreposti koos alammodulitega. Me v\u00f5iksime sellest ringi k\u00e4ia terve p\u00e4eva. Kuid ma arvan, et Matti argument j\u00e4tab mainimata peamise p\u00f5hjuse, mille astusin \u00fcsna tugevalt monoreposti kasuks:<\/p>\n<p><\/p>\n<h1 id=\"on-provociruet-obschenie-i-pokazyvaet-problemy\">See stimuleerib suhtlemist ja n\u00e4itab probleeme.<\/h1>\n<p><\/p>\n<p>Kui me jagame repositooriaid, loobime de facto koordineerimise ja l\u00e4bipaistvuse probleemi. See peegeldab seda, kuidas me m\u00f5tleme meeskondadele (eriti sellele, kuidas neid m\u00f5istavad \u00fcksikud liikmed): vastutame kindla komponendi eest. T\u00f6\u00f6tame suhtelises isolatsioonis. Piirid fikseeritakse minu meeskonna ja t\u00f6\u00f6tatava komponendi (-de) \u00fcmber.<\/p>\n<p><\/p>\n<p>Arhitektuuri keerukuse suurenedes ei suuda \u00fckski meeskond enam \u00fcksi s\u00fcsteemi hallata. V\u00e4ga v\u00e4hesed insenerid suudavad kogu s\u00fcsteemi peas hoida. Oletame, et haldate \u00fchist komponenti A, mida kasutavad meeskonnad B, C ja D. Meeskond A viib l\u00e4bi refaktoreerimise, t\u00e4iustab API-d ja muudab sisemist teostust. Seet\u00f5ttu on muudatused tagasip\u00f6\u00f6rdumatud. Millist n\u00f5u annate?<\/p>\n<p><\/p>\n<ul>\n<li>Leidke k\u00f5ik kohad, kus kasutatakse vana API-d.<\/li>\n<li>Kas on kohti, kus uut API-d ei saa kasutada?<\/li>\n<li>Kas suudate parandada ja testida teisi komponente, et veenduda, et need ei riku midagi?<\/li>\n<li>Kas need meeskonnad saavad teie muudatusi kohe kontrollida?<\/li>\n<\/ul>\n<p><\/p>\n<p>Pange t\u00e4hele, et need k\u00fcsimused ei s\u00f5ltu repositoriumi t\u00fc\u00fcbist. Peate leidma meeskonnad B, C ja D. Peate nendega r\u00e4\u00e4kima, selgitama v\u00e4lja aja, m\u00f5istma nende prioriteete. Loodame, et teete seda.<\/p>\n<p><\/p>\n<p>Tegelikkuses ei taha keegi sellega tegeleda. See on palju v\u00e4hem p\u00f5nev kui lihtsalt kuradi API parandamine. See on k\u00f5ik inimlik ja keeruline. \u00dches \u00fchises repodis saate lihtsalt muudatusi teha, anda \u00fclevaatamiseks neile, kes selle komponendiga t\u00f6\u00f6tavad (t\u00f5en\u00e4oliselt mitte B, C v\u00f5i D) ja edasi liikuda. Meeskonnad B, C ja D v\u00f5ivad praegu lihtsalt oma praeguses versioonis p\u00fcsida. Nad uuendavad end, kui nad teid \u00e4ra tunnevad!<\/p>\n<p><\/p>\n<p>Monorepositsioonis on vastutus vaikimisi edastatud. Meeskond A muudab oma komponenti ja kui nad ettevaatlikud ei ole, rikuvad nad kohe B, C ja D. See toob kaasa olukorra, kus B, C ja D seisavad A ukse taga, imestades, miks meeskond A koost\u00f6\u00f6d katki tegi. See \u00f5petab A-d, et nad ei saa minu eespool olevat nimekirja vahele j\u00e4tta. Nad peavad r\u00e4\u00e4kima sellest, mida nad kavatsevad teha. Kas B, C ja D saavad edasi liikuda? Mis siis, kui B ja C saavad, aga D on tihedalt seotud vanema algoritmi k\u00f5rvalm\u00f5juga?<\/p>\n<p><\/p>\n<p>Seej\u00e4rel peame r\u00e4\u00e4kima, kuidas me sellest olukorrast v\u00e4lja saame:<\/p>\n<p><\/p>\n<ol>\n<li>Toetada mitut sise-API-d, kusjuures vanem algoritm t\u00e4histatakse vananenuks, kuni D suudab selle kasutamise l\u00f5petada.<\/li>\n<li>Toetada mitut versioonide v\u00e4ljalaset, \u00fcks vana liidese, \u00fcks uus.<\/li>\n<li>Muudatuse A v\u00e4ljalaskmise edasil\u00fckkamine kuni B, C ja D suudavad seda \u00fcheaegselt aktsepteerida.<\/li>\n<\/ol>\n<p><\/p>\n<p>Oletame, et valisime 1 v\u00f5i mitu API-d. Sellisel juhul on meil kaks koodil\u00f5iku. Vana ja uus. Teatud olukordades on see \u00fcsna mugav. Me tagastame vana koodi tagasi, m\u00e4rgime selle aegunuks (deprecated) ja koosk\u00f5lastame selle eemaldamise ajakava meeskonnaga D. P\u00f5him\u00f5tteliselt on see identne nii poli- kui monorepositooriumiga.<\/p>\n<p><\/p>\n<p>Mitmekordse versiooni viimistlemiseks vajame haru. Praegu on meil kaks komponenti \u2014 A1 ja A2. Meeskonnad B ja C kasutavad A2, samas kui D kasutab A1. Me peame tagama, et iga komponent oleks v\u00e4ljaandmiseks valmis, sest enne kui D saab edasi liikuda, v\u00f5ivad vajada turvaparandusi ja muid t\u00f5rgete parandusi. Polireposiitriumis saame seda varjata pika elueaga harus, mis tundub hea. Monoreposiitriumis sunnime uut moodulit looma. Meeskond D peab ikkagi tegema muudatusi 'vana' komponendi osas. Iga\u00fcks v\u00f5ib n\u00e4ha, milline on siin tasu \u2014 meil on n\u00fc\u00fcd topelt kood ja k\u00f5ik A1 ja A2-l kehtivad vigade parandused peavad kehtima m\u00f5lema puhul. Harude kasutamise l\u00e4henemisega polireposiitriumis on see peidetud cherry-pick'i taha. Peame tasu madalamaks, kuna seal pole dubleerimist. Praktikas on tasu sama: peate looma, v\u00e4ljastama ja toetama kahte, peaaegu identset koodibaasi, kuni saate \u00fche neist eemaldada. Erinevus on see, et monoreposiitriumis on see valu otse ja silme ees. <strong>See on veel hullem, ja see on hea.<\/strong><\/p>\n<p><\/p>\n<p>L\u00f5puks j\u00f5udsime kolmanda punkti juurde. V\u00e4ljalaskmise viivitus. On v\u00f5imalik, et A poolt tehtud muudatused parandavad A meeskonna elu. Oluline, kuid mitte kiire. Kas saame lihtsalt viivitada? Polireposiis teeme selle artefakti l\u00f5plikuks. Muidugi r\u00e4\u00e4gime sellest D meeskonnale. Lihtsalt j\u00e4\u00e4ge vana versiooni juurde, kuni j\u00f5uate j\u00e4rele! See seab m\u00e4ngu hirmu. A meeskond j\u00e4tkab oma komponendi kallal t\u00f6\u00f6tamist, ignoreerides, et D meeskond kasutab aina vanemat versiooni (see on D meeskonna probleem, nad on lollid). Samal ajal r\u00e4\u00e4gib D meeskond halvasti A meeskonna t\u00e4helepanematust koodistabiilsuse osas, kui nad sellest \u00fcldse r\u00e4\u00e4givad. Kuud l\u00e4hevad m\u00f6\u00f6da. L\u00f5puks otsustab D meeskond kaaluda uuendust, kuid A-s on muutunud ainult rohkem. A meeskond vaevu m\u00e4letab, millal ja kuidas nad D-d l\u00f5hkusid. Uuendamine on valusam ja v\u00f5tab rohkem aega. Mis viib selle prioriteetide j\u00e4rjekorras madalamale. Kuni p\u00e4evani, mil meil ei teki A-s turvaprobleem, mis sunnib meid haru looma. A meeskond peab tagasi minema aega, leidma hetke, mil D oli stabiilne, parandama seal probleemi ja tegema selle v\u00e4ljalaskmiseks valmis. <strong>See on de facto valik, mida inimesed teevad, ja kindlasti on see halvim.<\/strong> Tundub, et see sobib nii meeskonnale A kui ka D-le, seni kuni me saame teineteist ignorida.<\/p>\n<p><\/p>\n<p>Monorepositsioonis on kolmas t\u00f5eliselt mittevariant. Sa pead olukorraga toime tulema kahel viisil. Sa pead n\u00e4gema kahe v\u00e4ljaandmisharu hoidmise kulusid. Kuidas end kaitsta tagurpidi \u00fchilduvuse katkemise v\u00e4rskenduste eest. Kuid peamine: <em>sind ei p\u00e4\u00e4sta keerulistest vestlustest.<\/em><\/p>\n<p><\/p>\n<p>Minu kogemuse p\u00f5hjal, kui meeskonnad kasvavad, ei ole enam v\u00f5imalik kogu s\u00fcsteemi peas hoida, ja see on k\u00f5ige olulisem. Sa pead parandama s\u00fcsteemis erinevuste n\u00e4htavust. Sa pead aktiivselt t\u00f6\u00f6tama selle nimel, et panna meeskonnad oma komponentidest eemale vaatama ning n\u00e4gema teiste meeskondade ja tarbijate t\u00f6\u00f6d.<\/p>\n<p><\/p>\n<p>Jah, te saate luua t\u00f6\u00f6riistu, mis p\u00fc\u00fcavad lahendada polirepositooriumide probleemi. Kuid minu kogemus pideva kohaletoimetamise (continuous delivery) ja automatiseerimise valdkonnas suurtes ettev\u00f5tetes \u00fctleb mulle j\u00e4rgmist: vaikimisi k\u00e4itumine ilma lisat\u00f6\u00f6riistade kasutamiseta on see, mida te ootate n\u00e4ha. <strong>Polirepositooriumi vaikimisi k\u00e4itumine on isoleeritus, see on kogu m\u00f5te. Monorepositooriumi vaikimisi k\u00e4itumine on \u00fchine vastutus ja l\u00e4bipaistvus, see on kogu m\u00f5te.<\/strong> M\u00f5lemas olukorras kavatsen luua t\u00f6\u00f6riista, mis aitab teravaid nurki tasandada. Juhi seisukohalt valin ma igal korral monorepositooriumi, sest t\u00f6\u00f6riistad peaksid tugevdama kultuuri, mida ma soovin, ja kultuur tuleneb pisikestest otsustest ja igap\u00e4evasest meeskonnat\u00f6\u00f6st.<\/p>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Kes on suuremad fanatiivideks? Pooldajad:<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Monorepo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Rust<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Vale k\u00fcsitlus \/ m\u00f5lemad<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 33 kasutajat. Erakutas 13 kasutajat.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/453958\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monorepo: palun, on vajalik | ProHoster","description":"Artikli t\u00f5lge on ette valmistatud OTUS haridusprojekti \"DevOps praktikad ja t\u00f6\u00f6riistad\" kursuse \u00fcli\u00f5pilaste jaoks. Te peate valima monorepo, sest selle k\u00e4itumine soodustab oma meeskondades l\u00e4bipaistvust ja kollektiivset vastutust, eriti meeskondade suurenemise korral. Igatahes peate investeerima t\u00f6\u00f6riistadesse, kuid see on alati parem, kui vaikimisi k\u00e4itumine on just see k\u00e4itumine,","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0434\u043e | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 OTUS. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435,","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/monorepozitorii-pozhalujsta-nado","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:10+00:00","article:modified_time":"2019-10-31T19:00:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34744","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:28:56","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:15:38","updated":"2026-01-21 20:28:56"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34744"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26181"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}