{"id":76764,"date":"2020-04-04T13:42:24","date_gmt":"2020-04-04T11:42:24","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee"},"modified":"2020-04-04T13:42:24","modified_gmt":"2020-04-04T11:42:24","slug":"reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee","title":{"rendered":"Vydanie werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vydanie werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti\" src=\"\/wp-content\/uploads\/2020\/04\/c7c26e4a0b7bddb90ba087a4db7175dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/\">werf<\/a><\/noindex> \u2014 n\u00e1\u0161 GitOps CLI n\u00e1stroj s otvoren\u00fdm zdrojov\u00fdm k\u00f3dom na zostavenie a dodanie aplik\u00e1ci\u00ed do Kubernetes. Ako sme s\u013e\u00fabili, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/481306\/\">vydanie verzie v1.0<\/a><\/noindex> znamenalo za\u010diatok prid\u00e1vania nov\u00fdch funkci\u00ed do werf a prehodnotenie be\u017en\u00fdch pr\u00edstupov. Teraz s rados\u0165ou predstavujeme vydanie v1.1, ktor\u00e9 je ve\u013ek\u00fdm krokom vpred a z\u00e1kladom pre bud\u00facnos\u0165 <i>stava\u010da<\/i> werf. Verzia je moment\u00e1lne k dispoz\u00edcii na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf#backward-compatibility-promise\">kan\u00e1le 1.1 ea<\/a><\/noindex>.<\/p>\n<p>Z\u00e1kladom vydania je nov\u00e1 architekt\u00fara \u00falo\u017eiska f\u00e1z a optimaliz\u00e1cia pr\u00e1ce oboch stava\u010dov (pre Stapel a Dockerfile). Nov\u00e1 architekt\u00fara \u00falo\u017eiska otv\u00e1ra mo\u017enosti pre realiz\u00e1ciu distribuovan\u00fdch zostaven\u00ed z viacer\u00fdch hostite\u013eov a paraleln\u00e9 zostavenia na jednom hostite\u013eovi.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Optimaliz\u00e1cia pr\u00e1ce zah\u0155\u0148a zbavenie sa zbyto\u010dn\u00fdch v\u00fdpo\u010dtov v etape v\u00fdpo\u010dtu podpisov f\u00e1z a zmenu mechanizmov v\u00fdpo\u010dtu kontroln\u00fdch s\u00fa\u010dtov s\u00faborov na efekt\u00edvnej\u0161ie. T\u00e1to optimaliz\u00e1cia zni\u017euje priemern\u00fd \u010das zostaven\u00ed projektu pomocou werf. A pr\u00e1zdne zostavenia, ke\u010f v\u0161etky f\u00e1zy existuj\u00fa v cache <i>stages-storage<\/i>, s\u00fa teraz skuto\u010dne r\u00fdchle. V v\u00e4\u010d\u0161ine pr\u00edpadov opakovan\u00e9 spustenie zostavenia prebehne r\u00fdchlej\u0161ie ako za 1 sekundu! To sa tie\u017e t\u00fdka proced\u00far overovania f\u00e1z po\u010das pr\u00e1ce t\u00edmov <code>werf deploy<\/code> a <code>werf run<\/code>.<\/p>\n<p>Taktie\u017e v tomto vydan\u00ed pribudla strat\u00e9gia tagovania obrazov na z\u00e1klade obsahu \u2014 <i>content-based tagging<\/i>, ktor\u00e1 je teraz zapnut\u00e1 ako predvolen\u00e1 a je jedinou odpor\u00fa\u010danou.<\/p>\n<p>Pozrime sa podrobnej\u0161ie na k\u013e\u00fa\u010dov\u00e9 novinky v werf v1.1 a z\u00e1rove\u0148 sa podel\u00edme o pl\u00e1ny do bud\u00facnosti.<\/p>\n<h2>\u010co sa zmenilo vo werf v1.1?<\/h2>\n<p><\/p>\n<h3>Nov\u00fd form\u00e1t n\u00e1zvov f\u00e1z a algoritmus v\u00fdberu f\u00e1z z cache<\/h3>\n<p>\nNov\u00e9 pravidlo generovania n\u00e1zvu f\u00e1zy. Teraz ka\u017ed\u00e9 zostavenie f\u00e1zy generuje unik\u00e1tne meno f\u00e1zy, ktor\u00e9 sa sklad\u00e1 z 2 \u010dast\u00ed: podpis (ako to bolo vo v1.0) plus unik\u00e1tny \u010dasov\u00fd identifik\u00e1tor.<\/p>\n<p>Napr\u00edklad, pln\u00e9 meno obrazu f\u00e1zy m\u00f4\u017ee vyzera\u0165 takto:<\/p>\n<p><code>werf-stages-storage\/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835<\/code><\/p>\n<p>\u2026 alebo vo v\u0161eobecnom form\u00e1te:<\/p>\n<p><code>werf-stages-storage\/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC<\/code><\/p>\n<p>Tu:<\/p>\n<ul>\n<li> <code>SIGNATURE<\/code> \u2014 to je podpis f\u00e1zy, ktor\u00fd predstavuje identifik\u00e1tor obsahu f\u00e1zy a z\u00e1vis\u00ed od hist\u00f3rie zmien v Git, ktor\u00e9 viedli k tomuto obsahu;<\/li>\n<li> <code>TIMESTAMP_MILLISEC<\/code> \u2014 to je zaru\u010dene unik\u00e1tna identifik\u00e1cia obrazu, ktor\u00e1 sa generuje v okamihu zostavenia nov\u00e9ho obrazu.<\/li>\n<\/ul>\n<p>\nAlgoritmus v\u00fdberu f\u00e1z z cache je zalo\u017een\u00fd na kontrole pr\u00edbuznosti Git commitov:<\/p>\n<ol>\n<li> Werf ur\u010duje signat\u00faru ur\u010ditej f\u00e1zy.<\/li>\n<li> V <i>stages-storage<\/i> M\u00f4\u017ee existova\u0165 nieko\u013eko f\u00e1z na z\u00e1klade tejto signat\u00fary. Werf vyber\u00e1 v\u0161etky vhodn\u00e9 f\u00e1zy pod\u013ea signat\u00fary.<\/li>\n<li> Ak je aktu\u00e1lna f\u00e1za spojen\u00e1 s Git (git-archive, pou\u017e\u00edvate\u013esk\u00e1 f\u00e1za s Git-patchmi: <code>install<\/code>, <code>beforeSetup<\/code>, <code>setup<\/code>; alebo git-latest-patch), werf vyber\u00e1 iba tie f\u00e1zy, ktor\u00e9 s\u00favisia s commitom, ktor\u00fd je predkom aktu\u00e1lneho commitu (pre ktor\u00fd bola zvolan\u00e1 zostava).<\/li>\n<li> Z zost\u00e1vaj\u00facich vhodn\u00fdch f\u00e1z sa vyberie jedna \u2014 najstar\u0161ia pod\u013ea d\u00e1tumu vytvorenia.<\/li>\n<\/ol>\n<p>\nF\u00e1za pre r\u00f4zne Git vetvy m\u00f4\u017ee ma\u0165 rovnak\u00fa signat\u00faru. Ale werf zabr\u00e1ni pou\u017e\u00edvaniu cache s\u00favisiacej s r\u00f4znymi vetvami medzi t\u00fdmito vetvami, aj keby sa signat\u00fary zhodovali.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/reference\/stages_and_images.html#%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D0%B4%D0%B8%D0%B9\">\u2192 Dokument\u00e1cia<\/a><\/noindex>.<\/p>\n<h3>Nov\u00fd algoritmus pre vytv\u00e1ranie a ukladanie f\u00e1z v \u00falo\u017eisku f\u00e1z<\/h3>\n<p>\nAk po\u010das vyh\u013ead\u00e1vania f\u00e1z z cache werf nen\u00e1jde vhodn\u00fa f\u00e1zu, iniciuje sa proces vytvorenia novej f\u00e1zy.<\/p>\n<p>V\u0161imnite si, \u017ee nieko\u013eko procesov (na jednom alebo viacer\u00fdch hostite\u013eoch) m\u00f4\u017ee za\u010da\u0165 zostavova\u0165 rovnak\u00fa f\u00e1zu pribli\u017ene v rovnakom \u010dase. Werf pou\u017e\u00edva algoritmus optimistickej blok\u00e1cie <i>stages-storage<\/i> v \u010dase ukladan\u00ed \u010derstvo zostaven\u00e9ho obrazu do <i>stages-storage<\/i>. Tak\u017ee, ke\u010f bude zostaven\u00e1 nov\u00e1 f\u00e1za, werf zablokuje <i>stages-storage<\/i> a ulo\u017e\u00ed tam \u010derstvo zostaven\u00fd obraz len v pr\u00edpade, ak tam u\u017e neexistuje vhodn\u00fd obraz <i>(pod\u013ea signat\u00fary a in\u00fdch parametrov \u2014 pozri nov\u00fd algoritmus vyh\u013ead\u00e1vania f\u00e1z z cache)<\/i>.<\/p>\n<p>\u010cerstvo zostaven\u00fd obraz bude ma\u0165 zaru\u010dene unik\u00e1tne identifik\u00e1tor pod\u013ea <code>TIMESTAMP_MILLISEC<\/code> <i>(pozri nov\u00fd form\u00e1t pomenovania f\u00e1z)<\/i>. V pr\u00edpade, \u017ee v <i>stages-storage<\/i> bude n\u00e1jden\u00fd vhodn\u00fd obraz, werf odmietne \u010derstvo zostaven\u00fd obraz a pou\u017eije obraz z cache.<\/p>\n<p>In\u00fdmi slovami: prv\u00fd proces, ktor\u00fd dokon\u010d\u00ed zostavovanie obrazu (najr\u00fdchlej\u0161\u00ed), z\u00edskava pr\u00e1vo ulo\u017ei\u0165 ho do stages-storage (a potom tento jedin\u00fd obraz bude pou\u017eit\u00fd pre v\u0161etky zostavy). Pomal\u00fd proces zostavovania nikdy nezablokuje r\u00fdchlej\u0161\u00ed proces pred ulo\u017een\u00edm v\u00fdsledkov zostavovania aktu\u00e1lnej f\u00e1zy a prechodom k zostaveniu \u010fal\u0161ej.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/reference\/stages_and_images.html#%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-%D0%B8-%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D0%B4%D0%B8%D0%B9\">\u2192 Dokument\u00e1cia<\/a><\/noindex>.<\/p>\n<h3>Vylep\u0161en\u00fd v\u00fdkon zostavova\u010da Dockerfile<\/h3>\n<p>\nV s\u00fa\u010dasnosti je potrubie f\u00e1z pre obraz zostavovan\u00fd z Dockerfile zlo\u017een\u00e9 z jednej f\u00e1zy \u2014 <code>dockerfile<\/code>. Pri v\u00fdpo\u010dte signat\u00fary sa berie do \u00favahy kontroln\u00e1 suma s\u00faborov <code>context<\/code>, ktor\u00e9 sa bud\u00fa pou\u017e\u00edva\u0165 pri zostavovan\u00ed. Pred t\u00fdmto vylep\u0161en\u00edm werf rekurz\u00edvne prech\u00e1dzal v\u0161etk\u00fdmi s\u00fabormi a z\u00edskaval kontroln\u00fd s\u00fa\u010det, s\u010d\u00edta\u0165 kontext a mod ka\u017ed\u00e9ho s\u00faboru. Od verzi\u00ed v1.1 m\u00f4\u017ee werf pou\u017e\u00edva\u0165 vypo\u010d\u00edtan\u00e9 kontroln\u00e9 s\u00fa\u010dty ulo\u017een\u00e9 v Git repozit\u00e1ri.<\/p>\n<p>Z\u00e1klad algoritmu je <noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/docs\/git-ls-tree\">git ls-tree<\/a><\/noindex>. Algoritmus zoh\u013ead\u0148uje z\u00e1znamy v <code>.dockerignore<\/code> a prech\u00e1dza rekurz\u00edvne po strome s\u00faborov iba v pr\u00edpade potreby. Takto sme sa oslobodili od \u010d\u00edtania s\u00faborov\u00e9ho syst\u00e9mu, a z\u00e1vislos\u0165 algoritmu od ve\u013ekosti <code>context<\/code> nie je v\u00fdznamn\u00e1.<\/p>\n<p>Algoritmus tie\u017e kontroluje untracked s\u00fabory a v pr\u00edpade potreby ich zoh\u013ead\u0148uje v kontrolnom s\u00fa\u010dte.<\/p>\n<h3>Vylep\u0161en\u00fd v\u00fdkon pri importovan\u00ed s\u00faborov<\/h3>\n<p>\nVo verzi\u00e1ch werf v1.1 sa pou\u017e\u00edva rsync server pri <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/configuration\/stapel_image\/import_directive.html\">importe s\u00faborov z artefaktov a obrazov<\/a><\/noindex>. Predt\u00fdm sa importovanie realizovalo v dvoch krokoch s pou\u017eit\u00edm montovania adres\u00e1ra z hostite\u013esk\u00e9ho syst\u00e9mu.<\/p>\n<p>V\u00fdkon importov na macOS u\u017e nie je obmedzen\u00fd Docker volumes, a importy sa vykon\u00e1vaj\u00fa za rovnak\u00fd \u010das ako v Linuxe a Windows.<\/p>\n<h3>Tagovanie na z\u00e1klade obsahu<\/h3>\n<p>\nWerf v1.1 podporuje tzv. tagovanie na z\u00e1klade obsahu obrazu \u2014 <i>content-based tagging<\/i>. Tagy v\u00fdsledn\u00fdch Docker obrazov z\u00e1visia od obsahu t\u00fdchto obrazov.<\/p>\n<p>Pri spusten\u00ed pr\u00edkazu <code>werf publish --tags-by-stages-signature<\/code> alebo <code>werf ci-env --tagging-strategy=stages-signature<\/code> bud\u00fa ozna\u010den\u00e9 publikovan\u00e9 obrazy tzv. <b>podpisom et\u00e1p<\/b> obrazu. Ka\u017ed\u00fd obraz je ozna\u010den\u00fd svojou vlastnou etapu podpisu tohto obrazu, ktor\u00e1 sa vypo\u010d\u00edtava pod\u013ea rovnak\u00fdch pravidiel ako be\u017en\u00fd podpis ka\u017edej zo \u0161t\u00e1di\u00ed jednotlivo, ale je zov\u0161eobecnen\u00fdm identifik\u00e1torom obrazu.<\/p>\n<p>Podpis et\u00e1p obrazu z\u00e1vis\u00ed od:<\/p>\n<ol>\n<li> obsahu tohto obrazu;<\/li>\n<li> hist\u00f3rie \u00faprav v Git, ktor\u00e9 viedli k tomuto obsahu.<\/li>\n<\/ol>\n<p>\nV Git repozit\u00e1ri s\u00fa v\u017edy pr\u00e1zdne commit-y, ktor\u00e9 nemenia obsah s\u00faborov obrazu. Napr\u00edklad, commit-y len s koment\u00e1rmi, alebo merge commit-y, alebo commit-y, ktor\u00e9 menia tie s\u00fabory v Gite, ktor\u00e9 nebud\u00fa importovan\u00e9 do obrazu.<\/p>\n<p>Pri pou\u017e\u00edvan\u00ed content-based tagging sa rie\u0161ia probl\u00e9my s nadbyto\u010dn\u00fdmi re\u0161tartami pod&apos;ov aplik\u00e1cie v Kubernetes kv\u00f4li zmen\u00e1m n\u00e1zvu obrazu, aj ke\u010f obsah obrazu zost\u00e1va rovnak\u00fd. Mimochodom, toto je jedna z pr\u00ed\u010din, pre\u010do je \u0165a\u017ek\u00e9 uchov\u00e1va\u0165 viac mikroservisov jednej aplik\u00e1cie v jednom Git repozit\u00e1ri.<\/p>\n<p>Content-based tagging je tie\u017e spo\u013eahlivej\u0161ou met\u00f3dou tagovania ako tagovanie pod\u013ea Git vetiev, preto\u017ee obsah v\u00fdsledn\u00fdch obrazov nez\u00e1vis\u00ed od poradia vykon\u00e1vania pipeline&apos;ov v CI syst\u00e9me pri zostavovan\u00ed viacer\u00fdch commitov tej istej vetvy.<\/p>\n<p><b>D\u00f4le\u017eit\u00e9<\/b>: od tejto chv\u00edle <i>stages-signature<\/i> \u2014 s\u00fa <b>jedin\u00e1 odpor\u00fa\u010dan\u00e1 strat\u00e9gia tagovania<\/b>. Pr\u00e1ve t\u00e1to strat\u00e9gia sa bude pou\u017e\u00edva\u0165 ako predvolen\u00e1 v t\u00edme <code>werf ci-env<\/code> (pokia\u013e nie je v\u00fdslovne uveden\u00e1 in\u00e1 sch\u00e9ma tagovania).<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/reference\/publish_process.html#%D1%82%D0%B5%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2-%D0%BF%D0%BE-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%BC%D1%83\">\u2192 Dokument\u00e1cia<\/a><\/noindex>. T\u00e1to funkcia bude ma\u0165 tie\u017e svoj vlastn\u00fd \u010dl\u00e1nok. <b>AKTUALIZOVAN\u00c9<\/b> (3. apr\u00edla): \u010cl\u00e1nok s detailami <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">bola publikovan\u00e1<\/a><\/noindex>.<\/p>\n<h3>\u00darovne logovania<\/h3>\n<p>\nPou\u017e\u00edvate\u013e m\u00e1 teraz mo\u017enos\u0165 ovl\u00e1da\u0165 v\u00fdstup, nastavi\u0165 \u00farove\u0148 logovania a pracova\u0165 s diagnostick\u00fdmi inform\u00e1ciami. Pridali sa mo\u017enosti <code>--log-quiet<\/code>, <code>--log-verbose<\/code>, <code>--log-debug<\/code>.<\/p>\n<p>Predvolen\u00e9 nastavenie obsahuje minimum inform\u00e1ci\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Vydanie werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti\" src=\"\/wp-content\/uploads\/2020\/04\/58e981b2e0c579ddde817eadc1732874.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPri pou\u017eit\u00ed podrobn\u00e9ho v\u00fdstupu (<code>--log-verbose<\/code>) je mo\u017en\u00e9 sledova\u0165, ako funguje werf:<\/p>\n<p><img decoding=\"async\" alt=\"Vydanie werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti\" src=\"\/wp-content\/uploads\/2020\/04\/487ed5dfc5df0178f7c09f8da697ceff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodrobn\u00fd v\u00fdstup (<code>--log-debug<\/code>), okrem diagnostick\u00fdch inform\u00e1ci\u00ed werf, obsahuje aj logy pou\u017e\u00edvan\u00fdch kni\u017en\u00edc. Napr\u00edklad je mo\u017en\u00e9 vidie\u0165, ako prebieha interakcia s Docker Registry a zaznamena\u0165 miesta, kde sa tr\u00e1vi zna\u010dn\u00fd \u010das:<\/p>\n<p><img decoding=\"async\" alt=\"Vydanie werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti\" src=\"\/wp-content\/uploads\/2020\/04\/99c1f3c2ab3803ff11fae1f2d5c9a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>\u010eal\u0161ie pl\u00e1ny<\/h2>\n<p>\n<b>Pozor!<\/b> Mo\u017enosti uveden\u00e9 ni\u017e\u0161ie s ozna\u010den\u00edm <b>v1.1<\/b> bud\u00fa k dispoz\u00edcii u\u017e v tejto verzii, mnoh\u00e9 z nich \u2014 \u010doskoro. Aktualiz\u00e1cie pr\u00eddu prostredn\u00edctvom automatick\u00fdch aktualiz\u00e1ci\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/guides\/installation.html#%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-1-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D1%8B%D0%B9-multiwerf\">pri pou\u017eit\u00ed multiwerf<\/a><\/noindex>. Tieto mo\u017enosti neovplyv\u0148uj\u00fa stabiln\u00fa \u010das\u0165 funkci\u00ed v1.1, ich zavedenie si nevy\u017eaduje ru\u010dn\u00e9 z\u00e1sahy pou\u017e\u00edvate\u013ea do u\u017e existuj\u00facich konfigur\u00e1ci\u00ed.<\/p>\n<h3>\u00dapln\u00e1 podpora r\u00f4znych realiz\u00e1ci\u00ed Docker Registry (NOV\u00c9)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: marec<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2199\">Issues<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nCie\u013e \u2014 pou\u017e\u00edvate\u013e by mal ma\u0165 mo\u017enos\u0165 pou\u017e\u00edva\u0165 \u013eubovo\u013en\u00fa realiz\u00e1ciu bez obmedzen\u00ed pri pou\u017e\u00edvan\u00ed werf. <\/p>\n<p>V s\u00fa\u010dasnosti sme vy\u010dlenili nasleduj\u00facu sadu rie\u0161en\u00ed, pre ktor\u00e9 m\u00e1me v \u00famysle garantova\u0165 pln\u00fa podporu:<\/p>\n<ul>\n<li> Default (library\/registry)*,<\/li>\n<li> AWS ECR,<\/li>\n<li> Azure*,<\/li>\n<li> Docker Hub,<\/li>\n<li> GCR*,<\/li>\n<li> GitHub Packages,<\/li>\n<li> GitLab Registry*,<\/li>\n<li> Harbor*,<\/li>\n<li> Quay.<\/li>\n<\/ul>\n<p>\nHvezdi\u010dkou s\u00fa ozna\u010den\u00e9 rie\u0161enia, ktor\u00e9 s\u00fa v s\u00fa\u010dasnosti \u00faplne podporovan\u00e9 werf. Pre ostatn\u00e9 je podpora, ale s obmedzeniami.<\/p>\n<p>M\u00f4\u017eeme identifikova\u0165 dva hlavn\u00e9 probl\u00e9my:<\/p>\n<ul>\n<li> Niektor\u00e9 rie\u0161enia nepodporuj\u00fa odstra\u0148ovanie tagov pomocou Docker Registry API, \u010do neumo\u017e\u0148uje pou\u017e\u00edvate\u013eom vyu\u017e\u00edva\u0165 automatick\u00e9 \u010distenie implementovan\u00e9 v werf. Toto plat\u00ed pre AWS ECR, Docker Hub a GitHub Packages.<\/li>\n<li> Nie v\u0161etky rie\u0161enia podporuj\u00fa takzvan\u00e9 nested repositories (Docker Hub, GitHub Packages a Quay) alebo ich podporuj\u00fa, ale pou\u017e\u00edvate\u013e ich mus\u00ed vytvori\u0165 manu\u00e1lne pomocou UI alebo API (AWS ECR).<\/li>\n<\/ul>\n<p>\nThese and other issues we plan to address using native APIs of the solutions. This task also includes covering the entire lifecycle tests of werf for each of them.<\/p>\n<h3>Distribuovan\u00e9 zostavenie obrazov (\u2191)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.2 v1.1 (priorita pre implement\u00e1ciu tejto funkcie bola zv\u00fd\u0161en\u00e1)<\/i><\/li>\n<li> <i>Term\u00edny: marec-apr\u00edl marec<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/1614\">Issues<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nV s\u00fa\u010dasnosti je mo\u017en\u00e9 pou\u017e\u00edva\u0165 werf v1.0 a v1.1 iba na jednom vyhradenom hostite\u013eovi na oper\u00e1cie zostavenia a publikovania obrazov a nasadenia aplik\u00e1ci\u00ed v Kubernetes.<\/p>\n<p>Aby sa otvorili mo\u017enosti distribuovanej pr\u00e1ce werf, ke\u010f sa zis\u0165ovanie a nasadenie aplik\u00e1ci\u00ed v Kubernetes sp\u00fa\u0161\u0165aj\u00fa na viacer\u00fdch \u013eubovo\u013en\u00fdch hostite\u013eoch a tieto hostitelia si medzi zostaveniami neuchov\u00e1vaj\u00fa svoje stavy (do\u010dasn\u00e9 runner\u2019y), werf vy\u017eaduje realiz\u00e1ciu mo\u017enosti pou\u017e\u00edvania Docker Registry ako \u00falo\u017eiska krokov.<\/p>\n<p>Predt\u00fdm, ke\u010f sa projekt werf e\u0161te volal dapp, mala t\u00e1to funkcia. Narazili sme v\u0161ak na nieko\u013eko probl\u00e9mov, ktor\u00e9 je potrebn\u00e9 zoh\u013eadni\u0165 pri implement\u00e1cii tejto funkcie do werf.<\/p>\n<p><b>Pozn\u00e1mka<\/b>. T\u00e1to funkcia nepredpoklad\u00e1 pr\u00e1cu zostavova\u010da vo vn\u00fatri pod&apos;ov Kubernetes, preto\u017ee na to je potrebn\u00e9 zbavi\u0165 sa z\u00e1vislosti od lok\u00e1lneho Docker servera (v pod&apos;e Kubernetes nie je pr\u00edstup k lok\u00e1lnemu Docker serveru, preto\u017ee samotn\u00fd proces je spusten\u00fd v kontejnery a pr\u00e1ca s Docker serverom cez sie\u0165 werf nie je podporovan\u00e1 a nebude podporovan\u00e1). Podpora pr\u00e1ce v Kubernetes bude realizovan\u00e1 samostatne.<\/p>\n<h3>Ofici\u00e1lna podpora GitHub Actions (NOVINKA)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: marec<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2210\">Issues<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nZah\u0155\u0148a dokument\u00e1ciu werf (sekcie <i>reference<\/i> a <i>guide<\/i>), ako aj ofici\u00e1lny GitHub Action pre pr\u00e1cu s werf.<\/p>\n<p>Okrem toho umo\u017en\u00ed fungovanie werf na efem\u00e9rnych runner&apos;och.<\/p>\n<p>Mechanika interakcie u\u017e\u00edvate\u013ea s CI syst\u00e9mom bude zalo\u017een\u00e1 na nastavovan\u00ed label&apos;ov na pull-request&apos;y na iniciovanie ur\u010dit\u00fdch akci\u00ed pri zostavovan\u00ed\/vydan\u00ed aplik\u00e1cie.<\/p>\n<h3>Lok\u00e1lny v\u00fdvoj a nasadenie aplik\u00e1ci\u00ed s werf (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: janu\u00e1r-febru\u00e1r apr\u00edl<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/1940\">Issues<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nHlavn\u00fdm cie\u013eom je dosiahnu\u0165 jednotn\u00fd unifikovan\u00fd konfigur\u00e1\u010dn\u00fd s\u00fabor pre nasadenie aplik\u00e1ci\u00ed ako lok\u00e1lne, tak aj v produkcii, bez zlo\u017eit\u00fdch krokov, \"z krabice\".<\/p>\n<p>Od werf je potrebn\u00fd aj tak\u00fd re\u017eim, v ktorom bude pohodln\u00e9 upravova\u0165 k\u00f3d aplik\u00e1cie a okam\u017eite z\u00edskava\u0165 sp\u00e4tn\u00fa v\u00e4zbu od funk\u010dnej aplik\u00e1cie na ladenie.<\/p>\n<h3>Nov\u00fd algoritmus \u010distenia (NOV\u00c9)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: apr\u00edl<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2212\">Issues<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nV aktu\u00e1lnej verzii werf v1.1 nie je v procese <code>cleanup<\/code> predpokladan\u00e1 \u010dinnos\u0165 \u010distenia obrazov pre sch\u00e9mu ozna\u010dovania na z\u00e1klade obsahu (content-based tagging) \u2014 tieto obrazy sa bud\u00fa hromadi\u0165.<\/p>\n<p>Taktie\u017e v aktu\u00e1lnej verzii werf (v1.0 a v1.1) sa pou\u017e\u00edvaj\u00fa r\u00f4zne politiky \u010distenia pre obrazy, ktor\u00e9 boli zverejnen\u00e9 pod\u013ea sch\u00e9m ozna\u010dovania: Git-vetva, Git-ozna\u010denie alebo Git-komit.<\/p>\n<p>Bol vymyslen\u00fd nov\u00fd unifikovan\u00fd algoritmus \u010distenia obrazov pre v\u0161etky sch\u00e9my ozna\u010dovania na z\u00e1klade hist\u00f3rie komitov v Gite:<\/p>\n<ul>\n<li> Udr\u017eiava\u0165 maxim\u00e1lne N1 obrazov s\u00favisiacich s N2 posledn\u00fdmi komitmi pre ka\u017ed\u00e9ho z git HEAD (vetvy a tagy).<\/li>\n<li> Udr\u017eiava\u0165 maxim\u00e1lne N1 obrazov-st\u00e1di\u00ed, s\u00favisiacich s N2 posledn\u00fdmi komitmi pre ka\u017ed\u00e9ho z git HEAD (vetvy a tagy).<\/li>\n<li> Uchov\u00e1va\u0165 v\u0161etky obrazy, ktor\u00e9 sa pou\u017e\u00edvaj\u00fa v ak\u00fdchko\u013evek zdrojoch klastre Kubernetes (skenuj\u00fa sa v\u0161etky kube kontexty s\u00faboru konfigur\u00e1cie a namespace&apos;y; toto spr\u00e1vanie je mo\u017en\u00e9 obmedzi\u0165 \u0161peci\u00e1lnymi mo\u017enos\u0165ami).<\/li>\n<li> Udr\u017eiava\u0165 v\u0161etky obrazy, ktor\u00e9 sa pou\u017e\u00edvaj\u00fa v manifestoch konfigur\u00e1cie zdrojov, ulo\u017een\u00fdch v Helm-vydaniach.<\/li>\n<li> Obraz m\u00f4\u017ee by\u0165 odstr\u00e1nen\u00fd, ak nie je spojen\u00fd s \u017eiadnym HEAD zo gitu (napr\u00edklad preto, \u017ee pr\u00edslu\u0161n\u00fd HEAD bol odstr\u00e1nen\u00fd) a nie je pou\u017e\u00edvan\u00fd v \u017eiadnom z manifestov v klastru Kubernetes a v vydaniach Helm.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Paraleln\u00e9 zostavovanie obrazov (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: janu\u00e1r-febru\u00e1r apr\u00edl*<\/i><\/li>\n<\/ul>\n<p>\nAktu\u00e1lna verzia werf zostavuje obrazy a artefakty, ktor\u00e9 s\u00fa op\u00edsan\u00e9 v <code>werf.yaml<\/code>, po sebe. Je potrebn\u00e9 spr\u00edstupni\u0165 proces zostavovania nez\u00e1visl\u00fdch \u0161t\u00e1di\u00ed obrazov a artefaktov, ako aj zabezpe\u010di\u0165 pohodln\u00fd a informat\u00edvny v\u00fdstup.<\/p>\n<p><i>* Pozn\u00e1mka: term\u00edn bol posunut\u00fd z d\u00f4vodu zv\u00fd\u0161enej priority na realiz\u00e1ciu distribuovanej zostavy, ktor\u00e1 prid\u00e1 viac mo\u017enost\u00ed pre horizont\u00e1lne \u0161k\u00e1lovanie, ako aj pre pou\u017eitie werf s GitHub Actions. Paraleln\u00e9 zostavovanie je \u010fal\u0161\u00edm krokom optimaliz\u00e1cie, ktor\u00fd prin\u00e1\u0161a vertik\u00e1lnu \u0161k\u00e1lovate\u013enos\u0165 pri zostavovan\u00ed jedn\u00e9ho projektu.<\/i><\/p>\n<h3>Prechod na Helm 3 (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: febru\u00e1r-marec m\u00e1j*<\/i><\/li>\n<\/ul>\n<p>\nZah\u0155\u0148a prechod na nov\u00fa k\u00f3dov\u00fa z\u00e1klad\u0148u <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/news\/t\/475722\/\">Helm 3<\/a><\/noindex> a overen\u00fd, pohodln\u00fd sp\u00f4sob migr\u00e1cie existuj\u00facich in\u0161tal\u00e1ci\u00ed.<\/p>\n<p><i>* Pozn\u00e1mka: prechod na Helm 3 neprinesie v\u00fdznamn\u00e9 nov\u00e9 mo\u017enosti do werf, preto\u017ee v\u0161etky k\u013e\u00fa\u010dov\u00e9 funkcie Helm 3 (3-way-merge a absencia tiller) s\u00fa u\u017e implementovan\u00e9 v werf. Navy\u0161e, werf m\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/differences_with_helm.html\">\u010fal\u0161ie mo\u017enosti<\/a><\/noindex> okrem uveden\u00fdch. Av\u0161ak tento prechod zost\u00e1va v na\u0161ich pl\u00e1noch a bude realizovan\u00fd.<\/i><\/p>\n<h3>Jsonnet na opis konfigur\u00e1cie Kubernetes (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: janu\u00e1r-febru\u00e1r apr\u00edl-m\u00e1j<\/i><\/li>\n<\/ul>\n<p>\nWerf bude podporova\u0165 opis konfigur\u00e1cie pre Kubernetes vo form\u00e1te Jsonnet. Z\u00e1rove\u0148 zostane werf kompatibiln\u00fd s Helm a bude mo\u017enos\u0165 v\u00fdberu form\u00e1tu opisu.<\/p>\n<p>Pr\u00ed\u010dinou je fakt, \u017ee \u0161abl\u00f3ny jazyka Go, pod\u013ea n\u00e1zoru mnoh\u00fdch, maj\u00fa vysok\u00fa prahov\u00fa hodnotu pre vstup a preh\u013eadnos\u0165 k\u00f3du t\u00fdchto \u0161abl\u00f3n tie\u017e trp\u00ed.<\/p>\n<p>Taktie\u017e sa zva\u017euje implement\u00e1cia in\u00fdch syst\u00e9mov na opis konfigur\u00e1cie Kubernetes (napr\u00edklad Kustomize).<\/p>\n<h3>Pr\u00e1ca v r\u00e1mci Kubernetes (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verzia: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: apr\u00edl-m\u00e1j m\u00e1j-j\u00fan<\/i><\/li>\n<\/ul>\n<p>\nCie\u013e: zabezpe\u010di\u0165 zostavenie obrazov a dod\u00e1vku aplik\u00e1cie pomocou runnerov v Kubernetes. T.j. zostavenie nov\u00fdch obrazov, ich publik\u00e1cia, \u010distenie a nasadenie m\u00f4\u017eu prebieha\u0165 priamo z podov Kubernetes.<\/p>\n<p>Na realiz\u00e1ciu tejto mo\u017enosti je najprv potrebn\u00e1 mo\u017enos\u0165 distribuovan\u00e9ho zostavenia obrazov <i>(pozri vy\u0161\u0161ie)<\/i>.<\/p>\n<p>Taktie\u017e je potrebn\u00e1 podpora re\u017eimu pr\u00e1ce zostavova\u010da bez Docker servera (t.j. Kaniko-podobn\u00e9 zostavenie alebo zostavenie v userspace).<\/p>\n<p>Werf bude podporova\u0165 zostavenie v Kubernetes nielen pomocou Dockerfile, ale aj pomocou svojho zostavova\u010da Stapel s inkrement\u00e1lnymi prebudovaniami a Ansible.<\/p>\n<h2>Krok smerom k otvoren\u00e9mu v\u00fdvoju<\/h2>\n<p>\nMilujeme na\u0161u komunitu (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">GitHub<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/werf_ru\">Telegram<\/a><\/noindex>) a chceme, aby \u010doraz viac \u013eud\u00ed pom\u00e1halo zlep\u0161i\u0165 werf, ch\u00e1palo, ktor\u00fdm smerom sa uber\u00e1me, a z\u00fa\u010dast\u0148ovalo sa na v\u00fdvoji.<\/p>\n<p>Predned\u00e1vnom bolo rozhodnut\u00e9 prejs\u0165 na <noindex><a rel=\"nofollow\" href=\"https:\/\/help.github.com\/en\/github\/managing-your-work-on-github\/about-project-boards\">GitHub project boards<\/a><\/noindex> aby sme otvorili pracovn\u00fd proces na\u0161ej t\u00edmu. Teraz je mo\u017en\u00e9 vidie\u0165 najbli\u017e\u0161ie pl\u00e1ny a aktu\u00e1lne pr\u00e1ce v nasleduj\u00facich oblastiach:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/9\">Dokument\u00e1cia a web<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/7\">Testovanie<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/6\">Chyby a zl\u00fd UX<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/5\">1.1<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nBola vykonan\u00e1 ve\u013ek\u00e1 pr\u00e1ca s issues:<\/p>\n<ul>\n<li> Nevhodn\u00e9 boli odstr\u00e1nen\u00e9.<\/li>\n<li> Existuj\u00face boli uveden\u00e9 do jednotn\u00e9ho form\u00e1tu, dostato\u010dn\u00e9ho po\u010dtu detailov a podrobnost\u00ed.<\/li>\n<li> Boli pridan\u00e9 nov\u00e9 issues s n\u00e1padmi a n\u00e1vrhmi.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Ako zapn\u00fa\u0165 verziu v1.1<\/h2>\n<p>\nVerzia je moment\u00e1lne dostupn\u00e1 v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf#backward-compatibility-promise\">kan\u00e1le 1.1 ea<\/a><\/noindex> (v kan\u00e1loch <i>stable<\/i> a <i>rock-solid<\/i> release sa objavia, ke\u010f sa stabilizuj\u00fa, av\u0161ak <i>ea<\/i> sama o sebe je u\u017e dos\u0165 stabiln\u00e1 na pou\u017e\u00edvanie, preto\u017ee pre\u0161la kan\u00e1lmi <i>alpha<\/i> a <i>beta<\/i>). Aktivuje sa <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/guides\/installation.html#%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-1-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D1%8B%D0%B9-multiwerf\">cez multiwerf<\/a><\/noindex> nasleduj\u00facim sp\u00f4sobom:<\/p>\n<pre><code class=\"bash\">source $(multiwerf use 1.1 ea)\nwerf COMMAND ...<\/code><\/pre>\n<p><\/p>\n<h2>Z\u00e1ver<\/h2>\n<p>\nNov\u00e1 architekt\u00fara ukladania f\u00e1z a optimaliz\u00e1cia pr\u00e1ce zostavovate\u013ea pre Stapel a Dockerfile zostavovate\u013eov otv\u00e1ra mo\u017enosti realizova\u0165 distribuovan\u00e9 a paraleln\u00e9 zostavenia v werf. Tieto mo\u017enosti \u010doskoro pribudn\u00fa v tej istej verzii v1.1 a bud\u00fa automaticky dostupn\u00e9 cez mechanizmus automatick\u00fdch aktualiz\u00e1ci\u00ed (pre pou\u017e\u00edvate\u013eov <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/guides\/installation.html#%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-1-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D1%83%D0%B5%D0%BC%D1%8B%D0%B9-multiwerf\">multiwerf<\/a><\/noindex>). <\/p>\n<p>V tejto verzii bola pridan\u00e1 strat\u00e9gia tagovania pod\u013ea obsahu obrazov \u2014 <i>content-based tagging<\/i>, \u2014 ktor\u00e1 sa stala predvolenou strat\u00e9giou. A bol prepracovan\u00fd log z\u00e1kladn\u00fdch pr\u00edkazov: <code>werf build<\/code>, <code>werf publish<\/code>, <code>werf deploy<\/code>, <code>werf dismiss<\/code>, <code>werf cleanup<\/code>.<\/p>\n<p>\u010eal\u0161\u00edm v\u00fdznamn\u00fdm krokom bude pridan\u00ed distribuovan\u00fdch zostaven\u00ed. Distribuovan\u00e9 zostavovania sa od verzie v1.0 stali prioritnej\u0161ou \u00falohou, ne\u017e paraleln\u00e9 zostavovania, preto\u017ee prid\u00e1vaj\u00fa v\u00e4\u010d\u0161iu hodnotu werf: vertik\u00e1lne \u0161k\u00e1lovanie zostavovate\u013eov a podpora efem\u00e9rnych zostavovate\u013eov v r\u00f4znych CI\/CD syst\u00e9moch, ako aj mo\u017enos\u0165 ofici\u00e1lnej podpory pre GitHub Actions. Preto sa term\u00edny realiz\u00e1cie paraleln\u00fdch zostaven\u00ed posunuli. Av\u0161ak pracujeme na tom, aby sme \u010doskoro implementovali obe mo\u017enosti.<\/p>\n<p>Sledujte novinky! A nezabudnite sa k n\u00e1m pr\u00eds\u0165 pozrie\u0165 na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">GitHub<\/a><\/noindex>, aby ste vytvorili issue, na\u0161li u\u017e existuj\u00face a dali plus, vytvorili PR alebo len sledovali rozvoj projektu.<\/p>\n<h2>P.S.<\/h2>\n<p>\nPre\u010d\u00edtajte si tie\u017e na na\u0161om blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/481306\/\">Predstavujeme werf 1.0 stable: ak\u00fd je vz\u0165ah k GitOps, status a pl\u00e1ny<\/a><\/noindex>\u00bb<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 n\u00e1\u0161 n\u00e1stroj pre CI\/CD v Kubernetes (prezenta\u010dn\u00fd a video z\u00e1znam)<\/a><\/noindex>\u00bb;<\/li>\n<li> Cyklus pozn\u00e1mok o novink\u00e1ch vo werfe:\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-way merge v werf: nasadenie v Kubernetes s Helm \u201ena steroidoch\u201c<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468049\/\">Pou\u017e\u00edvanie werfu na nasadzovanie komplexn\u00fdch Helm chartov<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Podpora monorepo a multirepo vo werf a ak\u00fd m\u00e1 s\u00favis s Docker Registry<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">S\u00fabory Docker teraz mo\u017eno vytv\u00e1ra\u0165 v werf aj pomocou be\u017en\u00e9ho Dockerfile<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>werf \u2014 \u043d\u0430\u0448\u0430 GitOps CLI-\u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 Kubernetes. \u041a\u0430\u043a \u0438 \u043e\u0431\u0435\u0449\u0430\u043b\u0438, \u0432\u044b\u0445\u043e\u0434 \u0432\u0435\u0440\u0441\u0438\u0438 v1.0 \u0437\u043d\u0430\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 werf \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u043b\u0438\u0437 v1.1, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u0438 \u0437\u0430\u0434\u0435\u043b\u043e\u043c \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 werf. \u0412\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":76765,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-76764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\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\/sk\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u0420\u0435\u043b\u0438\u0437 werf 1.1: \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee\" \/>\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=\"2020-04-04T11:42:24+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-04T11:42:24+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\udd47Verzia werf 1.1: vylep\u0161enia v zostavova\u010di dnes a pl\u00e1ny do bud\u00facnosti | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u0420\u0435\u043b\u0438\u0437 werf 1.1: \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043b\u0430\u043d\u044b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 | ProHoster","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee","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":"2020-04-04T11:42:24+00:00","article:modified_time":"2020-04-04T11:42:24+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"76764","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:30:23","updated":"2022-09-28 14:39:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/76764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=76764"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/76764\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/76765"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=76764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=76764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=76764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}