{"id":37667,"date":"2019-10-31T22:18:58","date_gmt":"2019-10-31T19:18:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\/"},"modified":"2019-10-31T22:18:58","modified_gmt":"2019-10-31T19:18:58","slug":"podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"Monorepo ja multirepo tugi werf'is ja kuidas siia sobib Docker Registry","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monorepo ja multirepo tugi werf&#039;is ja kuidas siia sobib Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMonorepo teemat on juba korduvalt arutatud ja see tekitab tavaliselt aktiivseid vaidlusi. Luues <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> avatud l\u00e4htekoodiga t\u00f6\u00f6riist, mille eesm\u00e4rk on parandada rakenduste koodide koostamisprotsesse Gitist Docker-piltideks (ja nende edastamist Kubernetesesse), m\u00f5tleme me v\u00e4he sellele, milline valik on parem. Meie peamine eesm\u00e4rk on tagada k\u00f5ik vajalik, et toetada erinevaid arvamusi (kui see ei ole vastuolus m\u00f5istusega, loomulikult).<\/p>\n<p>Hiljuti sisse viidud mono-repo tugi werf'is on hea n\u00e4ide sellest. Kuid enne kui edasi minna, vaatame, kuidas see tugi on seotud werf'i kasutamisega ja kuidas siia sobib Docker Registry...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Probleemistik<\/h2>\n<p>\nKujutage ette olukorda. Ettev\u00f5ttes on palju arendajate meeskondi, kes tegelevad s\u00f5ltumatute projektidega. Enamik rakendusi toimib Kuberneteses ja seega \u2014 on konteineriseeritud. Konteinerite ja piltide salvestamiseks on vajalik registri (registry) olemasolu. Sellise registrina kasutatakse ettev\u00f5ttes Docker Hub'i koos \u00fche konto <code>COMPANY<\/code>. Sarnaselt enamikule l\u00e4htekoode salvestamise s\u00fcsteemidele, <b>Docker Hub ei luba luua sisemist hierarhiat registrite vahel<\/b>, nagu <code>ETTEV\u00d5TE\/PROJEKT\/PILT<\/code>. Sel juhul... kuidas selle piirangu puhul hallata mitmetasandilisi rakendusi, luues iga projekti jaoks eraldi konto? <\/p>\n<p><img decoding=\"async\" alt=\"Monorepo ja multirepo tugi werf&#039;is ja kuidas siia sobib Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00f5ib-olla on nimetatud olukord kellelegi tuttav, kuid vaatame rakenduste hoidmise korraldust laiemalt, st ilma eelnevalt mainitud n\u00e4iteta ja Docker Hub'ita.<\/p>\n<h3>Lahenduste teed<\/h3>\n<p>\nKui rakendus <b>on monoliitne<\/b>, ei tekki k\u00fcsimusi ja salvestame lihtsalt projekti konteinerite registrisse.<\/p>\n<p>Kui rakendus esindab end mitme komponendina, <b>mikroteenustena<\/b>, tuleb valida teatud l\u00e4henemine. N\u00e4ite aluseks v\u00f5ttes t\u00fc\u00fcpiliselt veebirakendust, mis koosneb kahest pildist: <code>eesmine<\/code> ja <code>tagaosa<\/code> \u2014 v\u00f5imalikud valikud on j\u00e4rgmised:<\/p>\n<ol>\n<li> Hoidke pilte eraldi sisemistes registrites:\n<p><img decoding=\"async\" alt=\"Monorepo ja multirepo tugi werf&#039;is ja kuidas siia sobib Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Hoidke k\u00f5ik \u00fches registris ja v\u00f5tke arvesse pildi nime silti, n\u00e4iteks nii:\n<p><img decoding=\"async\" alt=\"Monorepo ja multirepo tugi werf&#039;is ja kuidas siia sobib Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/83498b5bcdf7a57dfe933295e78fc785.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\n<i><b>NB<\/b>: Tegelikult on veel variant, mis on salvestamine erinevatesse registritesse, <code>PROJEKT-eesmine<\/code> ja <code>PROJEKT-tagaosa<\/code>, kuid me ei k\u00e4sitle seda keerulise toe, organisatsiooni ja kasutajate vaheliste \u00f5iguste jagamise t\u00f5ttu.<\/i><\/p>\n<h2>Tugi werf'is<\/h2>\n<p>\nAlguses piirdus werf sisemiste hoidlate, \u00f5nneks toetavad enamik registreid sellist v\u00f5imalust. Alates versioonist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/releases\/tag\/v1.0.4-alpha.3\">v1.0.4-alpha.3<\/a><\/noindex>, lisandus toimetamine registritega, kus <b>sisemist ei toetata<\/b>, ja Docker Hub kuulub nende hulka. Sellest hetkest alates on kasutajal valik, kuidas s\u00e4ilitada rakenduse pilte.<\/p>\n<p>Rakendamine on saadaval valiku raames <code>--images-repo-mode=multirepo|monorepo<\/code> (vaikimisi <code>multirepo<\/code>, st hoidmine sisemistes hoidlates). See m\u00e4\u00e4ratleb mustrid, mille alusel pildid registreeritud on. Peab vaid valima vajaliku re\u017eiimi p\u00f5hikomandeid kasutades, k\u00f5ik muu j\u00e4\u00e4b muutumatuks.<\/p>\n<p>Kuna enamik werf'i valikuid saab m\u00e4\u00e4rata <b>keskkonnamuutujate kaudu<\/b>, CI\/CD s\u00fcsteemides on salvestamisre\u017eiimi tavaliselt lihtne m\u00e4\u00e4rata kogu projekti jaoks globaalselt. N\u00e4iteks <b>GitLabi puhul<\/b> piisab keskkonnamuutuja lisamisest projekti seadetes: <i>Seaded -&gt; CI \/ CD -&gt; Muutujad: <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>R\u00e4\u00e4kides piltide avaldamisest ja rakenduste juurutamisest (need protsessid on p\u00f5hjalikult k\u00e4sitletud vastavates dokumentatsiooni artiklites: <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Avaldamise protsess<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Juurutamise protsess<\/a><\/noindex>), m\u00e4\u00e4rab re\u017eiim eksklusiivselt malli, mille alusel piltidega t\u00f6\u00f6tada.<\/p>\n<h3>Detailides peitub diibel<\/h3>\n<p>\nUue salvestusviisi lisamise peamine erinevus ja keerukus seisneb registri puhastamise protsessis <i>(puhastamisv\u00f5imalused, mida werf toetab, vt <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Puhastamisprotsess<\/a><\/noindex>)<\/i>.<\/p>\n<p>Werf arvestab puhastamisel Kubernetes'i klastrites kasutatavaid pilte ning kasutaja m\u00e4\u00e4ratud poliitikaid. Poliitikate aluseks on siltide jagamine strateegiateks. Hetkel toetatud strateegiad:<\/p>\n<ol>\n<li> 3 strateegiat, mis on seotud Git'i primitiividega, nagu silt, haru ja commit;<\/li>\n<li> 1 strateegia vabalt valitud kasutaja siltide jaoks.<\/li>\n<\/ol>\n<p>\nTeave sildi strateegia kohta salvestatakse pildi avaldamisel l\u00f5pppildi etikettidesse. Isegi v\u00e4\u00e4rtus \u2014 nii nimetatud <b>metasilt<\/b> \u2014 on vajalik poliitika osade rakendamiseks. N\u00e4iteks, kui haru v\u00f5i silt eemaldatakse Git'i repos, on m\u00f5istlik eemaldada ka seotud <i>kasutamata<\/i> pildid registrist, mida katab osa meie poliitikatest.<\/p>\n<p>\u00dches repolis salvestades (<code>monorepo<\/code>), konteineri silti all v\u00f5ib peale meta-sildi hoida ka konteineri nime: <code>PROJEKT:<b>eesmine<\/b>-META-SILT<\/code>. Nende eraldamiseks ei ole me kasutanud mingit spetsiifilist eraldajat, vaid oleme lihtsalt lisanud vajaliku v\u00e4\u00e4rtuse l\u00f5ppkonteineri silti avaldamisel.<\/p>\n<p><i><b>NB<\/b>: Kui soovite vaatama hakata k\u00f5ike, mis on kirjeldatud werfi l\u00e4htekoodis, siis alguspunktiks v\u00f5ib olla <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>Selles artiklis ei kavatse me rohkem t\u00e4helepanu p\u00f6\u00f6rata meie l\u00e4henemise probleemidele ja p\u00f5hjendusele: silti strateegiate, andmete s\u00e4ilitamise ja avaldamisprotsessi osas \u2014 k\u00f5igest sellest on p\u00f5hjalikult r\u00e4\u00e4gitud Dmitri Stolyarovi hiljutises ettekandes: \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 meie CI\/CD t\u00f6\u00f6riist Kuberneteses<\/a><\/noindex>\u00bb.<\/p>\n<h2>Kokkuv\u00f5tteks<\/h2>\n<p>\nRegistry ilma s\u00fcgavat struktuuri toetamine ei olnud meie ega meie teadaolevate kasutajate jaoks probleem \u2014 alati on v\u00f5imalik t\u00f5sta eraldi konteinerite registrit (v\u00f5i minna Google Cloudi tingimuslikku Container Registry'isse)\u2026 Kuid sellise piiri eemaldamine tundus loogiline, et t\u00f6\u00f6riist oleks mugavam laiemale DevOps kogukonnale. Selle rakendamisel kohtasime peamist raskust konteinerite registri puhastusmehhanismi \u00fcmberkujundamisel. N\u00fc\u00fcd, kui k\u00f5ik on valmis, on hea teada, et kellelgi on lihtsam, ja meile (kui selle projekti peamistele arendajatele) ei ennustata t\u00f5siseid raskusi selle funktsiooni t\u00e4iendavas toetamises.<\/p>\n<p>J\u00e4tkake meiega ja varsti r\u00e4\u00e4gime teistest uuendustest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Docker-iltide kogumist werfis saab n\u00fc\u00fcd teha ka tavalise Dockerfile'i abil<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 meie CI\/CD t\u00f6\u00f6riist Kubernetesis (\u00fclevaade ja videoettekanne)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37667","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=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e\" \/>\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\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\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\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\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:18:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:58+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\udd47 Monorepo ja multirepo tugi werfis ning kuidas see on seotud Docker Registryga | ProHoster","description":"Monorepo teema on juba korduvalt arutlusel olnud ja kutsub tavaliselt esile aktiivseid vaidlusi. Loodes werfi kui avatud l\u00e4htekoodiga t\u00f6\u00f6riista, mis on m\u00f5eldud rakenduste koodi koostamisprotsesside parandamiseks Gitist Docker-piltideni (ning nende edastamiseks Kubernetesesse), ei m\u00f5tle me palju sellele, milline valik on parem. Meie jaoks on k\u00f5ige olulisem tagada k\u00f5ik vajaliku erinevate seisukohtade toetamiseks (kui see on","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","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\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster","og:description":"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","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:18:58+00:00","article:modified_time":"2019-10-31T19:18:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37667","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-23 18:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:22:29","updated":"2026-01-23 18:48:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37667","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=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}