{"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\/cs\/blog\/administrirovanie\/reliz-werf-1-1-uluchsheniya-v-sborshhike-segodnya-i-plany-na-budushhee","title":{"rendered":"Vyd\u00e1n\u00ed werf 1.1: vylep\u0161en\u00ed ve sb\u011brn\u00e9m n\u00e1stroji dnes a pl\u00e1ny do budoucna","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vyd\u00e1n\u00ed werf 1.1: vylep\u0161en\u00ed ve sb\u011brn\u00e9m n\u00e1stroji dnes a pl\u00e1ny do budoucna\" 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 na\u0161e GitOps CLI n\u00e1stroj s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem pro sestavov\u00e1n\u00ed a dod\u00e1v\u00e1n\u00ed aplikac\u00ed na Kubernetes. Jak jsme sl\u00edbili, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/481306\/\">vyd\u00e1n\u00ed verze v1.0<\/a><\/noindex> ozna\u010dilo za\u010d\u00e1tek p\u0159id\u00e1v\u00e1n\u00ed nov\u00fdch funkc\u00ed do werf a p\u0159ehodnocen\u00ed osv\u011bd\u010den\u00fdch p\u0159\u00edstup\u016f. Nyn\u00ed s radost\u00ed p\u0159edstavujeme verzi v1.1, kter\u00e1 je velk\u00fdm krokem vp\u0159ed a z\u00e1kladn\u00edm kamenem pro budoucnost. <i>sestavova\u010de<\/i> werf. Verze je moment\u00e1ln\u011b k dispozici na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf#backward-compatibility-promise\">kan\u00e1lu 1.1 ea<\/a><\/noindex>.<\/p>\n<p>Z\u00e1kladem vyd\u00e1n\u00ed je nov\u00e1 architektura \u00falo\u017ei\u0161t\u011b f\u00e1z\u00ed a optimalizace v\u00fdkonu obou sestavova\u010d\u016f (pro Stapel a Dockerfile). Nov\u00e1 architektura \u00falo\u017ei\u0161t\u011b otev\u00edr\u00e1 mo\u017enosti pro realizaci distribuovan\u00fdch sestaven\u00ed z v\u00edce hostitel\u016f a paraleln\u00edch sestaven\u00ed na jednom hostiteli.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Optimalizace v\u00fdkonu zahrnuje odstran\u011bn\u00ed nadbyte\u010dn\u00fdch v\u00fdpo\u010dt\u016f p\u0159i v\u00fdpo\u010dtu podpis\u016f f\u00e1z\u00ed a zm\u011bnu mechanism\u016f v\u00fdpo\u010dtu kontroln\u00edch sou\u010dt\u016f soubor\u016f na efektivn\u011bj\u0161\u00ed. Tato optimalizace zkracuje pr\u016fm\u011brnou dobu sestaven\u00ed projektu pomoc\u00ed werf. A pr\u00e1zdn\u00e1 sestaven\u00ed, kdy v\u0161echny f\u00e1ze existuj\u00ed v cache, <i>stages-storage<\/i>, jsou nyn\u00ed skute\u010dn\u011b rychl\u00e1. V\u011bt\u0161ina p\u0159\u00edpad\u016f op\u011btovn\u00e9ho spu\u0161t\u011bn\u00ed sestaven\u00ed prob\u011bhne rychleji ne\u017e za 1 sekundu! To se tak\u00e9 t\u00fdk\u00e1 a verifika\u010dn\u00edch procedur f\u00e1z\u00ed b\u011bhem pr\u00e1ce t\u00fdm\u016f. <code>werf deploy<\/code> a <code>werf run<\/code>.<\/p>\n<p>Tak\u00e9 v t\u00e9to verzi se objevila strategie ozna\u010dov\u00e1n\u00ed obraz\u016f na z\u00e1klad\u011b obsahu \u2014 <i>content-based tagging<\/i>, kter\u00e1 je nyn\u00ed nastavena jako v\u00fdchoz\u00ed a je jedn\u00edm z nejv\u00edce doporu\u010dovan\u00fdch p\u0159\u00edstup\u016f.<\/p>\n<p>Pod\u00edvejme se podrobn\u011bji na kl\u00ed\u010dov\u00e9 novinky v werf v1.1 a z\u00e1rove\u0148 si pov\u00edme o pl\u00e1nech do budoucna.<\/p>\n<h2>Co se zm\u011bnilo ve werf v1.1?<\/h2>\n<p><\/p>\n<h3>Nov\u00fd form\u00e1t pojmenov\u00e1n\u00ed f\u00e1z\u00ed a algoritmus v\u00fdb\u011bru f\u00e1z\u00ed z cache<\/h3>\n<p>\nNov\u00e9 pravidlo generov\u00e1n\u00ed n\u00e1zvu f\u00e1ze. Nyn\u00ed ka\u017ed\u00e9 sestaven\u00ed f\u00e1ze generuje unik\u00e1tn\u00ed n\u00e1zev f\u00e1ze, kter\u00fd se skl\u00e1d\u00e1 z dvou \u010d\u00e1st\u00ed: podpisu (jak tomu bylo v v1.0) a unik\u00e1tn\u00edho \u010dasov\u00e9ho identifik\u00e1toru.<\/p>\n<p>Nap\u0159\u00edklad cel\u00e9 jm\u00e9no obrazu f\u00e1ze m\u016f\u017ee vypadat takto:<\/p>\n<p><code>werf-stages-storage\/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835<\/code><\/p>\n<p>\u2026 nebo v obecn\u00e9m tvaru:<\/p>\n<p><code>werf-stages-storage\/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC<\/code><\/p>\n<p>Zde:<\/p>\n<ul>\n<li> <code>SIGNATURE<\/code> \u2014 to je podpis f\u00e1ze, kter\u00fd p\u0159edstavuje identifik\u00e1tor obsahu f\u00e1ze a z\u00e1vis\u00ed na historii zm\u011bn v Gitu, kter\u00e9 vedly k tomuto obsahu;<\/li>\n<li> <code>TIMESTAMP_MILLISEC<\/code> \u2014 to je zaru\u010den\u011b unik\u00e1tn\u00ed identifik\u00e1tor obrazu, kter\u00fd se generuje v okam\u017eiku sestaven\u00ed nov\u00e9ho obrazu.<\/li>\n<\/ul>\n<p>\nAlgoritmus v\u00fdb\u011bru f\u00e1z\u00ed z cache je zalo\u017een na kontrole souvislosti Git commit\u016f:<\/p>\n<ol>\n<li> Werf vypo\u010d\u00edt\u00e1v\u00e1 podpis ur\u010dit\u00e9 f\u00e1ze.<\/li>\n<li> V <i>stages-storage<\/i> m\u016f\u017ee existovat n\u011bkolik f\u00e1z\u00ed se stejn\u00fdm podpisem. Werf vyb\u00edr\u00e1 v\u0161echny vhodn\u00e9 f\u00e1ze podle podpisu.<\/li>\n<li> Pokud je aktu\u00e1ln\u00ed f\u00e1ze spojena s Gitem (git-archive, u\u017eivatelsk\u00e1 f\u00e1ze s Git patchy: <code>install<\/code>, <code>beforeSetup<\/code>, <code>setup<\/code>; nebo git-latest-patch), pak werf vybere pouze ty f\u00e1ze, kter\u00e9 jsou spojeny s commitem, kter\u00fd je p\u0159edkem aktu\u00e1ln\u00edho commitu (pro kter\u00fd byla vyvol\u00e1na stavba).<\/li>\n<li> Z zb\u00fdvaj\u00edc\u00edch vhodn\u00fdch f\u00e1z\u00ed se vyb\u00edr\u00e1 jedna \u2014 nejstar\u0161\u00ed podle data vytvo\u0159en\u00ed.<\/li>\n<\/ol>\n<p>\nF\u00e1ze pro r\u016fzn\u00e9 Git v\u011btve m\u016f\u017ee m\u00edt stejn\u00fd podpis. Ale werf zamez\u00ed pou\u017e\u00edv\u00e1n\u00ed cache spojen\u00e9 s r\u016fzn\u00fdmi v\u011btvemi mezi t\u011bmito v\u011btvemi, i kdy\u017e se podpisy shoduj\u00ed.<\/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 Dokumentace<\/a><\/noindex>.<\/p>\n<h3>Nov\u00fd algoritmus tvorby a ukl\u00e1d\u00e1n\u00ed f\u00e1z\u00ed do \u00falo\u017ei\u0161t\u011b f\u00e1z\u00ed<\/h3>\n<p>\nPokud b\u011bhem v\u00fdb\u011bru f\u00e1z\u00ed z cache werf nenajde vhodnou f\u00e1zi, zah\u00e1j\u00ed se proces stavby nov\u00e9 f\u00e1ze.<\/p>\n<p>Poznamenejme, \u017ee n\u011bkolik proces\u016f (na jednom nebo v\u00edce hostitel\u00edch) m\u016f\u017ee zah\u00e1jit stavbu jedn\u00e9 a t\u00e9 sam\u00e9 f\u00e1ze p\u0159ibli\u017en\u011b ve stejnou dobu. Werf pou\u017e\u00edv\u00e1 algoritmus optimistick\u00e9 blokace <i>stages-storage<\/i> p\u0159i ukl\u00e1d\u00e1n\u00ed \u010derstv\u011b postaven\u00e9ho obrazu v <i>stages-storage<\/i>. Tak\u017ee, kdy\u017e je nov\u00e1 f\u00e1ze hotov\u00e1, werf blokuje <i>stages-storage<\/i> a ulo\u017e\u00ed tam \u010derstv\u011b postaven\u00fd obraz pouze v p\u0159\u00edpad\u011b, \u017ee tam je\u0161t\u011b neexistuje vhodn\u00fd obraz <i>(podle podpisu a dal\u0161\u00edch parametr\u016f \u2014 viz nov\u00fd algoritmus v\u00fdb\u011bru f\u00e1z\u00ed z cache)<\/i>.<\/p>\n<p>\u010cerstv\u011b postaven\u00fd obraz bude m\u00edt zaru\u010den\u011b unik\u00e1tn\u00ed identifik\u00e1tor podle <code>TIMESTAMP_MILLISEC<\/code> <i>(viz nov\u00fd form\u00e1t pojmenov\u00e1n\u00ed f\u00e1z\u00ed)<\/i>. V p\u0159\u00edpad\u011b, \u017ee v <i>stages-storage<\/i> bude nalezen vhodn\u00fd obraz, werf odm\u00edtne \u010derstv\u011b postaven\u00fd obraz a pou\u017eije obraz z cache.<\/p>\n<p>Jin\u00fdmi slovy: prvn\u00ed proces, kter\u00fd dokon\u010d\u00ed stavbu obrazu (nejrychlej\u0161\u00ed), z\u00edsk\u00e1 pr\u00e1vo ulo\u017eit ho do stages-storage (a pak tento jedin\u00fd obraz bude pou\u017e\u00edv\u00e1n pro v\u0161echny stavby). Pomalej\u0161\u00ed proces stavby nikdy nezablokuje rychlej\u0161\u00ed proces od ukl\u00e1d\u00e1n\u00ed v\u00fdsledk\u016f stavby aktu\u00e1ln\u00ed f\u00e1ze a p\u0159echodu k stavb\u011b dal\u0161\u00ed.<\/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 Dokumentace<\/a><\/noindex>.<\/p>\n<h3>Vylep\u0161ena v\u00fdkonnost sestavova\u010de Dockerfile<\/h3>\n<p>\nV sou\u010dasn\u00e9 dob\u011b se pipeline f\u00e1z\u00ed pro obraz sestavovan\u00fd z Dockerfile skl\u00e1d\u00e1 z jedn\u00e9 f\u00e1ze \u2014 <code>dockerfile<\/code>. P\u0159i v\u00fdpo\u010dtu podpisu se bere v \u00favahu kontroln\u00ed suma soubor\u016f <code>context<\/code>, kter\u00e9 budou pou\u017eity p\u0159i sestavov\u00e1n\u00ed. P\u0159ed t\u00edmto vylep\u0161en\u00edm werf rekurzivn\u011b proch\u00e1zel v\u0161echny soubory a z\u00edsk\u00e1val kontroln\u00ed sou\u010det, kdy\u017e se\u010d\u00edtal kontext a mod ka\u017ed\u00e9ho souboru. Od verz\u00ed v1.1 m\u016f\u017ee werf vyu\u017e\u00edvat vypo\u010d\u00edtan\u00e9 kontroln\u00ed sou\u010dty ulo\u017een\u00e9 v Git repozit\u00e1\u0159i.<\/p>\n<p>Na z\u00e1klad\u011b algoritmu je \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/docs\/git-ls-tree\">git ls-tree<\/a><\/noindex>. Algoritmus zohled\u0148uje z\u00e1znamy v <code>.dockerignore<\/code> a proch\u00e1z\u00ed rekurzivn\u011b stromem soubor\u016f pouze v p\u0159\u00edpad\u011b pot\u0159eby. T\u00edmto zp\u016fsobem jsme se zbavili \u010dten\u00ed souborov\u00e9ho syst\u00e9mu, a z\u00e1vislost algoritmu na velikosti <code>context<\/code> nen\u00ed rozhoduj\u00edc\u00ed.<\/p>\n<p>Algoritmus tak\u00e9 kontroluje untracked soubory a v p\u0159\u00edpad\u011b pot\u0159eby je zahrnuje do kontroln\u00edho sou\u010dtu.<\/p>\n<h3>Byla vylep\u0161ena v\u00fdkonnost p\u0159i importu soubor\u016f<\/h3>\n<p>\nVe verz\u00edch werf v1.1 se p\u0159i <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/configuration\/stapel_image\/import_directive.html\">importu soubor\u016f z artefakt\u016f a obraz\u016f<\/a><\/noindex>. D\u0159\u00edve byl import prov\u00e1d\u011bn ve dvou kroc\u00edch pomoc\u00ed montov\u00e1n\u00ed adres\u00e1\u0159e z hostitelsk\u00e9ho syst\u00e9mu.<\/p>\n<p>V\u00fdkon import\u016f v macOS ji\u017e nen\u00ed omezen Docker volumes, a importy se prov\u00e1d\u011bj\u00ed ve stejn\u00e9m \u010dase jako v Linuxu a Windows.<\/p>\n<h3>Ozna\u010dov\u00e1n\u00ed na b\u00e1zi obsahu<\/h3>\n<p>\nWerf v1.1 podporuje takzvan\u00e9 ozna\u010dov\u00e1n\u00ed podle obsahu obrazu \u2014 <i>content-based tagging<\/i>. Tagy v\u00fdsledn\u00fdch Docker obraz\u016f z\u00e1vis\u00ed na obsahu t\u011bchto obraz\u016f.<\/p>\n<p>P\u0159i spu\u0161t\u011bn\u00ed p\u0159\u00edkazu <code>werf publish --tags-by-stages-signature<\/code> nebo <code>werf ci-env --tagging-strategy=stages-signature<\/code> budou ozna\u010deny publikovan\u00e9 obrazy takzvanou <b>podpisem f\u00e1z\u00ed<\/b> obrazu. Ka\u017ed\u00fd obraz je ozna\u010den svou vlastn\u00ed f\u00e1z\u00ed podpisu tohoto obrazu, kter\u00e1 je vypo\u010d\u00edt\u00e1na podle stejn\u00fdch pravidel jako b\u011b\u017en\u00fd podpis ka\u017ed\u00e9 f\u00e1ze samostatn\u011b, ale je to generalizovan\u00fd identifik\u00e1tor obrazu.<\/p>\n<p>Podpis f\u00e1ze obrazu z\u00e1vis\u00ed na:<\/p>\n<ol>\n<li> obsahu tohoto obrazu;<\/li>\n<li> historii zm\u011bn v Gitu, kter\u00e9 vedly k tomuto obsahu.<\/li>\n<\/ol>\n<p>\nV Git repozit\u00e1\u0159i jsou v\u017edy pr\u00e1zdn\u00e9 commity, kter\u00e9 nem\u011bn\u00ed obsah soubor\u016f obrazu. Nap\u0159\u00edklad commity pouze se koment\u00e1\u0159i nebo slou\u010dovac\u00ed commity, nebo commity, kter\u00e9 m\u011bn\u00ed ty soubory v Gitu, kter\u00e9 nebudou importov\u00e1ny do obrazu.<\/p>\n<p>Pou\u017eit\u00ed ozna\u010dov\u00e1n\u00ed zalo\u017een\u00e9ho na obsahu \u0159e\u0161\u00ed probl\u00e9my s nadbyte\u010dn\u00fdmi restarty pod\u016f aplikace v Kubernetes zp\u016fsoben\u00fdmi zm\u011bnami n\u00e1zvu obrazu, i kdy\u017e se obsah obrazu nezm\u011bnil. Mimochodem, to je jedna z p\u0159\u00ed\u010din, kter\u00e9 br\u00e1n\u00ed uchov\u00e1v\u00e1n\u00ed mnoha mikroslu\u017eeb jedn\u00e9 aplikace v jednom Git repozit\u00e1\u0159i.<\/p>\n<p>Z\u00e1rove\u0148 je ozna\u010dov\u00e1n\u00ed zalo\u017een\u00e9 na obsahu spolehliv\u011bj\u0161\u00ed metodou ozna\u010dov\u00e1n\u00ed ne\u017e ozna\u010dov\u00e1n\u00ed podle Git v\u011btv\u00ed, proto\u017ee obsah v\u00fdsledn\u00fdch obraz\u016f nez\u00e1vis\u00ed na po\u0159ad\u00ed prov\u00e1d\u011bn\u00ed pipeline v CI syst\u00e9mech p\u0159i sestavov\u00e1n\u00ed n\u011bkolika commit\u016f stejn\u00e9 v\u011btve.<\/p>\n<p><b>Je d\u016fle\u017eit\u00e9<\/b>: od tohoto okam\u017eiku <i>stages-signature<\/i> \u2014 to je <b>jedin\u00e1 doporu\u010den\u00e1 strategie tagov\u00e1n\u00ed<\/b>. Ta bude jako v\u00fdchoz\u00ed pou\u017eita v t\u00fdmu <code>werf ci-env<\/code> (pokud nen\u00ed v\u00fdslovn\u011b uvedena jin\u00e1 tagovac\u00ed sch\u00e9ma).<\/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 Dokumentace<\/a><\/noindex>. Tato funkce bude tak\u00e9 v\u011bnov\u00e1na samostatn\u00e9 publikaci. <b>AKTUALIZOV\u00c1NO<\/b> (3. dubna): \u010cl\u00e1nek s podrobnostmi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">byla vyd\u00e1na<\/a><\/noindex>.<\/p>\n<h3>\u00darovn\u011b logov\u00e1n\u00ed<\/h3>\n<p>\nU\u017eivatel m\u00e1 nyn\u00ed mo\u017enost ovl\u00e1dat v\u00fdstup, nastavovat \u00farove\u0148 logov\u00e1n\u00ed a pracovat s ladic\u00edmi informacemi. P\u0159id\u00e1ny mo\u017enosti <code>--log-quiet<\/code>, <code>--log-verbose<\/code>, <code>--log-debug<\/code>.<\/p>\n<p>Ve v\u00fdstupu je ve v\u00fdchoz\u00edm nastaven\u00ed minimum informac\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Vyd\u00e1n\u00ed werf 1.1: vylep\u0161en\u00ed ve sb\u011brn\u00e9m n\u00e1stroji dnes a pl\u00e1ny do budoucna\" src=\"\/wp-content\/uploads\/2020\/04\/58e981b2e0c579ddde817eadc1732874.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u0159i pou\u017eit\u00ed podrobn\u00e9ho v\u00fdstupu (<code>--log-verbose<\/code>) lze sledovat, jak werf funguje:<\/p>\n<p><img decoding=\"async\" alt=\"Vyd\u00e1n\u00ed werf 1.1: vylep\u0161en\u00ed ve sb\u011brn\u00e9m n\u00e1stroji dnes a pl\u00e1ny do budoucna\" 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>), krom\u011b ladic\u00edch informac\u00ed werf, obsahuje tak\u00e9 logy pou\u017e\u00edvan\u00fdch knihoven. Nap\u0159\u00edklad lze vid\u011bt, jak prob\u00edh\u00e1 interakce s Docker Registry, a tak\u00e9 zaznamenat m\u00edsta, kde se vynakl\u00e1d\u00e1 zna\u010dn\u00e9 mno\u017estv\u00ed \u010dasu:<\/p>\n<p><img decoding=\"async\" alt=\"Vyd\u00e1n\u00ed werf 1.1: vylep\u0161en\u00ed ve sb\u011brn\u00e9m n\u00e1stroji dnes a pl\u00e1ny do budoucna\" src=\"\/wp-content\/uploads\/2020\/04\/99c1f3c2ab3803ff11fae1f2d5c9a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Dal\u0161\u00ed pl\u00e1ny<\/h2>\n<p>\n<b>Pozor!<\/b> N\u00ed\u017ee popsan\u00e9 mo\u017enosti s ozna\u010den\u00edm <b>v1.1<\/b> budou k dispozici ji\u017e v t\u00e9to verzi, mnoh\u00e9 z nich \u2014 v bl\u00edzk\u00e9 dob\u011b. Aktualizace p\u0159ijdou prost\u0159ednictv\u00edm automatick\u00fdch aktualizac\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\">p\u0159i pou\u017eit\u00ed multiwerf<\/a><\/noindex>. Tyto mo\u017enosti se net\u00fdkaj\u00ed stabiln\u00ed \u010d\u00e1sti funkc\u00ed v1.1, jejich uveden\u00ed nevy\u017eaduje ru\u010dn\u00ed z\u00e1sah u\u017eivatele do ji\u017e existuj\u00edc\u00edch konfigurac\u00ed.<\/p>\n<h3>\u00dapln\u00e1 podpora r\u016fzn\u00fdch implementac\u00ed Docker Registry (NOV\u00c9)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: b\u0159ezen<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2199\">Issue<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nC\u00edlem je, aby u\u017eivatel mohl pou\u017e\u00edvat libovolnou implementaci bez omezen\u00ed p\u0159i pou\u017e\u00edv\u00e1n\u00ed werf. <\/p>\n<p>V sou\u010dasn\u00e9 dob\u011b jsme identifikovali n\u00e1sleduj\u00edc\u00ed sadu \u0159e\u0161en\u00ed, pro kter\u00e1 garantujeme plnou 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>\nHv\u011bzdi\u010dkou jsou ozna\u010dena \u0159e\u0161en\u00ed, kter\u00e1 jsou v sou\u010dasn\u00e9 dob\u011b pln\u011b podporov\u00e1na werf. Pro ostatn\u00ed existuje podpora, ale s omezen\u00edmi.<\/p>\n<p>Lze vy\u010dlenit dva hlavn\u00ed probl\u00e9my:<\/p>\n<ul>\n<li> N\u011bkter\u00e1 \u0159e\u0161en\u00ed nepodporuj\u00ed odstran\u011bn\u00ed tag\u016f prost\u0159ednictv\u00edm Docker Registry API, co\u017e br\u00e1n\u00ed u\u017eivatel\u016fm pou\u017e\u00edvat automatick\u00e9 \u010di\u0161t\u011bn\u00ed implementovan\u00e9 ve werf. To plat\u00ed pro AWS ECR, Docker Hub a GitHub Packages.<\/li>\n<li> N\u011bkter\u00e1 \u0159e\u0161en\u00ed nepodporuj\u00ed takzvan\u00e9 nested repositories (Docker Hub, GitHub Packages a Quay) nebo podporuj\u00ed, ale u\u017eivatel je mus\u00ed vytv\u00e1\u0159et ru\u010dn\u011b pomoc\u00ed UI nebo API (AWS ECR).<\/li>\n<\/ul>\n<p>\nTyto a dal\u0161\u00ed probl\u00e9my pl\u00e1nujeme \u0159e\u0161it pomoc\u00ed nativn\u00edch API t\u011bchto \u0159e\u0161en\u00ed. Tato \u00faloha zahrnuje tak\u00e9 pokryt\u00ed testy cel\u00e9ho pracovn\u00edho cyklu werf pro ka\u017ed\u00e9 z nich.<\/p>\n<h3>Distribuovan\u00e1 sestava obraz\u016f (\u2191)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.2 v1.1 (priorita implementace t\u00e9to funkce byla zv\u00fd\u0161ena)<\/i><\/li>\n<li> <i>Term\u00edny: b\u0159ezen-duben b\u0159ezen<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/1614\">Issue<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nV sou\u010dasnosti lze werf v1.0 a v1.1 pou\u017e\u00edvat pouze na jednom dedikovan\u00e9m hostu pro operace sestaven\u00ed a publikov\u00e1n\u00ed obraz\u016f a nasazen\u00ed aplikace do Kubernetes.<\/p>\n<p>Chcete-li otev\u0159\u00edt mo\u017enosti distribuovan\u00e9 pr\u00e1ce werf, kdy jsou sestaven\u00ed a nasazen\u00ed aplikac\u00ed do Kubernetes spu\u0161t\u011bny na n\u011bkolika n\u00e1hodn\u00fdch hostech a tyto hosty si mezi sestaven\u00edmi uchov\u00e1vaj\u00ed sv\u00e9 stavy (do\u010dasn\u00ed runner\u2019y), vy\u017eaduje werf implementaci mo\u017enosti pou\u017e\u00edv\u00e1n\u00ed Docker Registry jako \u00falo\u017ei\u0161t\u011b f\u00e1z\u00ed.<\/p>\n<p>D\u0159\u00edve, kdy\u017e byl projekt werf je\u0161t\u011b naz\u00fdv\u00e1n dapp, byla takov\u00e1 mo\u017enost. Av\u0161ak pot\u00fdkali jsme se s \u0159adou probl\u00e9m\u016f, kter\u00e9 je t\u0159eba zohlednit p\u0159i implementaci t\u00e9to funkce ve werf.<\/p>\n<p><b>Pozn\u00e1mka<\/b>. Tato mo\u017enost nevy\u017eaduje b\u011bh sestavovatele uvnit\u0159 pod\u016f Kubernetes, proto\u017ee je pot\u0159eba zbavit se z\u00e1vislosti na lok\u00e1ln\u00edm Docker serveru (v podu Kubernetes nen\u00ed p\u0159\u00edstup k lok\u00e1ln\u00edmu Docker serveru, proto\u017ee samotn\u00fd proces b\u011b\u017e\u00ed v kontejneru a pr\u00e1ce s Docker serverem p\u0159es s\u00ed\u0165 werf nen\u00ed podporov\u00e1na a nebude podporov\u00e1na). Podpora pro pr\u00e1ci v Kubernetes bude implementov\u00e1na samostatn\u011b.<\/p>\n<h3>Ofici\u00e1ln\u00ed podpora GitHub Actions (NOVINKA)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: b\u0159ezen<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2210\">Issue<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nZahrnuje dokumentaci werf (\u010d\u00e1sti <i>reference<\/i> a <i>guide<\/i>), stejn\u011b jako ofici\u00e1ln\u00ed GitHub Action pro pr\u00e1ci s werf.<\/p>\n<p>Krom\u011b toho to umo\u017en\u00ed, aby werf fungoval na efem\u00e9rn\u00edch b\u011b\u017ec\u00edch.<\/p>\n<p>Mechanika interakce u\u017eivatele s CI syst\u00e9mem bude zalo\u017eena na nastavov\u00e1n\u00ed label\u016f na pull requesty pro iniciaci ur\u010dit\u00fdch akc\u00ed p\u0159i sestaven\u00ed\/vyd\u00e1n\u00ed aplikace.<\/p>\n<h3>Lok\u00e1ln\u00ed v\u00fdvoj a nasazen\u00ed aplikac\u00ed s werf (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: leden-\u00fanor duben<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/1940\">Issue<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nHlavn\u00edm c\u00edlem je dos\u00e1hnout jednotn\u00e9ho unifikovan\u00e9ho nastaven\u00ed pro nasazen\u00ed aplikac\u00ed jak lok\u00e1ln\u011b, tak v produkci, bez slo\u017eit\u00fdch \u00fakon\u016f, \u201ez krabice\u201c.<\/p>\n<p>Od werf se tak\u00e9 vy\u017eaduje takov\u00fd re\u017eim pr\u00e1ce, ve kter\u00e9m bude pohodln\u00e9 upravovat k\u00f3d aplikace a okam\u017eit\u011b z\u00edskat zp\u011btnou vazbu z b\u011b\u017e\u00edc\u00ed aplikace pro lad\u011bn\u00ed.<\/p>\n<h3>Nov\u00fd algoritmus \u010di\u0161t\u011bn\u00ed (NOV\u00c9)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: duben<\/i><\/li>\n<li> <i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/issues\/2212\">Issue<\/a><\/noindex><\/i><\/li>\n<\/ul>\n<p>\nV aktu\u00e1ln\u00ed verzi werf v1.1 v procedu\u0159e <code>cleanup<\/code> nen\u00ed zaji\u0161t\u011bno \u010di\u0161t\u011bn\u00ed obraz\u016f pro sch\u00e9ma ozna\u010dov\u00e1n\u00ed na z\u00e1klad\u011b obsahu (content-based tagging) \u2014 tyto obrazy se budou hromadit.<\/p>\n<p>Tak\u00e9 v aktu\u00e1ln\u00ed verzi werf (v1.0 a v1.1) se pou\u017e\u00edvaj\u00ed r\u016fzn\u00e9 politiky \u010di\u0161t\u011bn\u00ed pro obrazy publikovan\u00e9 podle sch\u00e9mat ozna\u010dov\u00e1n\u00ed: Git-v\u011btve, Git-\u0161t\u00edtky nebo Git-commity.<\/p>\n<p>Byl navr\u017een nov\u00fd unifikovan\u00fd algoritmus \u010di\u0161t\u011bn\u00ed obraz\u016f pro v\u0161echna sch\u00e9mata ozna\u010dov\u00e1n\u00ed na z\u00e1klad\u011b historie commit\u016f v Git:<\/p>\n<ul>\n<li> Udr\u017eovat maxim\u00e1ln\u011b N1 obraz\u016f spojen\u00fdch s N2 posledn\u00edmi commity pro ka\u017ed\u00fd git HEAD (v\u011btve a \u0161t\u00edtky).<\/li>\n<li> Udr\u017eovat maxim\u00e1ln\u011b N1 obraz\u016f-f\u00e1z\u00ed spojen\u00fdch s N2 posledn\u00edmi commity pro ka\u017ed\u00fd git HEAD (v\u011btve a \u0161t\u00edtky).<\/li>\n<li> Uchov\u00e1vat v\u0161echny obrazy, kter\u00e9 se pou\u017e\u00edvaj\u00ed v jak\u00fdchkoli prost\u0159edc\u00edch Kubernetes clusteru (skenuj\u00ed se v\u0161echny kube kontexty konfigura\u010dn\u00edho souboru a namespace; toto chov\u00e1n\u00ed lze omezit speci\u00e1ln\u00edmi mo\u017enostmi).<\/li>\n<li> Udr\u017eovat v\u0161echny obrazy, kter\u00e9 se pou\u017e\u00edvaj\u00ed v manifestech konfigurace zdroj\u016f ulo\u017een\u00fdch v Helm-releases.<\/li>\n<li> Obraz m\u016f\u017ee b\u00fdt odstran\u011bn, pokud nen\u00ed spojen s \u017e\u00e1dn\u00fdm HEAD z git (nap\u0159\u00edklad proto\u017ee p\u0159\u00edslu\u0161n\u00fd HEAD byl smaz\u00e1n) a nen\u00ed pou\u017eit v \u017e\u00e1dn\u00e9m z manifest\u016f v clusteru Kubernetes a v releases Helm.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Paraleln\u00ed sestaven\u00ed obraz\u016f (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.1<\/i><\/li>\n<li> <i>Term\u00edny: leden-\u00fanor duben*<\/i><\/li>\n<\/ul>\n<p>\nAktu\u00e1ln\u00ed verze werf sestavuje obrazy a artefakty, kter\u00e9 jsou pops\u00e1ny v <code>werf.yaml<\/code>, postupn\u011b. Je nutn\u00e9 paralelizovat proces sestaven\u00ed nez\u00e1visl\u00fdch f\u00e1z\u00ed obraz\u016f a artefakt\u016f, stejn\u011b jako zajistit pohodln\u00fd a informativn\u00ed v\u00fdstup.<\/p>\n<p><i>* Pozn\u00e1mka: term\u00edn byl posunut kv\u016fli zv\u00fd\u0161en\u00e9 priorit\u011b realizace distribuovan\u00e9ho sestaven\u00ed, kter\u00e9 p\u0159id\u00e1 v\u00edce mo\u017enost\u00ed pro horizont\u00e1ln\u00ed \u0161k\u00e1lov\u00e1n\u00ed a tak\u00e9 pou\u017eit\u00ed werf s GitHub Actions. Paraleln\u00ed sestaven\u00ed je dal\u0161\u00edm krokem optimalizace, kter\u00fd poskytne vertik\u00e1ln\u00ed \u0161k\u00e1lovatelnost p\u0159i sestavov\u00e1n\u00ed jednoho projektu.<\/i><\/p>\n<h3>P\u0159echod na Helm 3 (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: \u00fanor-b\u0159ezen kv\u011bten*<\/i><\/li>\n<\/ul>\n<p>\nZahrnuje p\u0159echod na novou k\u00f3dovou z\u00e1kladnu <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/news\/t\/475722\/\">Helm 3<\/a><\/noindex> a osv\u011bd\u010den\u00fd, pohodln\u00fd zp\u016fsob migrace existuj\u00edc\u00edch instalac\u00ed.<\/p>\n<p><i>* Pozn\u00e1mka: p\u0159echod na Helm 3 nep\u0159id\u00e1 z\u00e1sadn\u00ed mo\u017enosti do werf, proto\u017ee v\u0161echny kl\u00ed\u010dov\u00e9 funkce Helm 3 (3-way-merge a absence tiller) jsou ji\u017e v werf implementov\u00e1ny. Nav\u00edc m\u00e1 werf <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/differences_with_helm.html\">dal\u0161\u00ed mo\u017enosti<\/a><\/noindex> krom\u011b uveden\u00fdch. Tento p\u0159echod v\u0161ak z\u016fst\u00e1v\u00e1 v na\u0161ich pl\u00e1nech a bude realizov\u00e1n.<\/i><\/p>\n<h3>Jsonnet pro popis konfigurace Kubernetes (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: leden-\u00fanor, duben-kv\u011bten<\/i><\/li>\n<\/ul>\n<p>\nWerf bude podporovat popis konfigurace pro Kubernetes ve form\u00e1tu Jsonnet. P\u0159itom werf z\u016fstane kompatibiln\u00ed s Helm a bude mo\u017enost volby form\u00e1tu popisu.<\/p>\n<p>D\u016fvodem je skute\u010dnost, \u017ee \u0161ablony jazyka Go maj\u00ed podle mnoha lid\u00ed vysok\u00fd vstupn\u00ed prah a srozumitelnost k\u00f3du t\u011bchto \u0161ablon tak\u00e9 trp\u00ed.<\/p>\n<p>Tak\u00e9 se zva\u017euje mo\u017enost zaveden\u00ed dal\u0161\u00edch syst\u00e9m\u016f popisu konfigurace Kubernetes (nap\u0159. Kustomize).<\/p>\n<h3>Pr\u00e1ce uvnit\u0159 Kubernetes (\u2193)<\/h3>\n<p><\/p>\n<ul>\n<li> <i>Verze: v1.2<\/i><\/li>\n<li> <i>Term\u00edny: duben-kv\u011bten, kv\u011bten-\u010derven<\/i><\/li>\n<\/ul>\n<p>\nC\u00edl: zajistit sestaven\u00ed obraz\u016f a dod\u00e1n\u00ed aplikace s pou\u017eit\u00edm runner\u016f v Kubernetes. T.j. sestaven\u00ed nov\u00fdch obraz\u016f, jejich publikace, \u010di\u0161t\u011bn\u00ed a nasazen\u00ed m\u016f\u017ee prob\u00edhat p\u0159\u00edmo z pod\u016f Kubernetes.<\/p>\n<p>K realizaci t\u00e9to mo\u017enosti je nejprve pot\u0159eba schopnost distribuovan\u00e9ho sestaven\u00ed obraz\u016f <i>(viz. v\u00fd\u0161e)<\/i>.<\/p>\n<p>Tak\u00e9 je pot\u0159eba podpora re\u017eimu pr\u00e1ce sestavova\u010de bez Docker serveru (t.j. sestaven\u00ed podobn\u00e9 Kaniko nebo sestaven\u00ed v userspace).<\/p>\n<p>Werf bude podporovat sestavov\u00e1n\u00ed v Kubernetes nejen pomoc\u00ed Dockerfile, ale tak\u00e9 pomoc\u00ed sv\u00e9ho sestavova\u010de Stapel s inkrement\u00e1ln\u00edmi p\u0159estavbami a Ansible.<\/p>\n<h2>Krok sm\u011brem k otev\u0159en\u00e9mu v\u00fdvoji<\/h2>\n<p>\nMilujeme na\u0161e spole\u010denstv\u00ed (<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 \u010d\u00edm d\u00e1l v\u00edce lid\u00ed pom\u00e1halo zlep\u0161ovat werf, rozum\u011blo sm\u011bru, kter\u00fdm se ub\u00edr\u00e1me, a \u00fa\u010dastnilo se v\u00fdvoje.<\/p>\n<p>Docela ned\u00e1vno bylo rozhodnuto p\u0159ej\u00edt 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> abychom odhalili pracovn\u00ed proces na\u0161eho t\u00fdmu. Nyn\u00ed je mo\u017en\u00e9 vid\u011bt nejbli\u017e\u0161\u00ed pl\u00e1ny a tak\u00e9 sou\u010dasn\u00e9 pr\u00e1ce na n\u00e1sleduj\u00edc\u00edch oblastech:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/9\">Dokumentace a web<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/7\">Testov\u00e1n\u00ed<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/projects\/6\">Chyby a \u0161patn\u00e9 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>\nByla odvedena velk\u00e1 pr\u00e1ce s issues:<\/p>\n<ul>\n<li> Zru\u0161eny neaktu\u00e1ln\u00ed.<\/li>\n<li> Existuj\u00edc\u00ed byly uvedeny do jednotn\u00e9ho form\u00e1tu, dostate\u010dn\u00e9ho po\u010dtu podrobnost\u00ed a detail\u016f.<\/li>\n<li> Byly p\u0159id\u00e1ny nov\u00e9 issues s n\u00e1pady a n\u00e1vrhy.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Jak zahrnout verzi v1.1<\/h2>\n<p>\nVerze je v sou\u010dasnosti dostupn\u00e1 na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf#backward-compatibility-promise\">kan\u00e1lu 1.1 ea<\/a><\/noindex> (v kan\u00e1lech <i>stable<\/i> a <i>rock-solid<\/i> vyd\u00e1n\u00ed se objev\u00ed, jakmile se stabilizuj\u00ed, nicm\u00e9n\u011b <i>ea<\/i> sama o sob\u011b je ji\u017e dostate\u010dn\u011b stabiln\u00ed pro pou\u017eit\u00ed, proto\u017ee pro\u0161la kan\u00e1ly <i>alpha<\/i> a <i>beta<\/i>). Aktivov\u00e1no <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\">p\u0159es multiwerf<\/a><\/noindex> n\u00e1sleduj\u00edc\u00edm zp\u016fsobem:<\/p>\n<pre><code class=\"bash\">source $(multiwerf use 1.1 ea)\nwerf COMMAND ...<\/code><\/pre>\n<p><\/p>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>\nNov\u00e1 architektura \u00falo\u017ei\u0161t\u011b f\u00e1z\u00ed a optimalizace pr\u00e1ce sestavova\u010de pro Stapel a Dockerfile sestavova\u010de otev\u00edraj\u00ed mo\u017enosti implementovat distribuovan\u00e9 a paraleln\u00ed sestavy v werf. Tyto mo\u017enosti se brzy objev\u00ed ve stejn\u00e9 verzi v1.1 a budou automaticky dostupn\u00e9 prost\u0159ednictv\u00edm mechanismu automatick\u00fdch aktualizac\u00ed (pro u\u017eivatele <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 t\u00e9to verzi byla p\u0159id\u00e1na strategie tagov\u00e1n\u00ed podle obsahu obraz\u016f \u2014 <i>content-based tagging<\/i>, \u2014 kter\u00e1 se stala v\u00fdchoz\u00ed strategi\u00ed. Tak\u00e9 byl p\u0159epracov\u00e1n log hlavn\u00edch p\u0159\u00edkaz\u016f: <code>werf build<\/code>, <code>werf publish<\/code>, <code>werf deploy<\/code>, <code>werf dismiss<\/code>, <code>werf cleanup<\/code>.<\/p>\n<p>Dal\u0161\u00edm v\u00fdznamn\u00fdm krokem bude p\u0159id\u00e1n\u00ed distribuovan\u00fdch sestav. Distribuovan\u00e9 sestavy se od verze v1.0 staly prioritn\u011bj\u0161\u00ed \u00falohou ne\u017e paraleln\u00ed sestavy, proto\u017ee p\u0159id\u00e1vaj\u00ed v\u011bt\u0161\u00ed hodnotu werf: vertik\u00e1ln\u00ed \u0161k\u00e1lov\u00e1n\u00ed sestavova\u010d\u016f a podpora efem\u00e9rn\u00edch sestavova\u010d\u016f v r\u016fzn\u00fdch CI\/CD syst\u00e9mech, jako\u017e i mo\u017enost ofici\u00e1ln\u00ed podpory GitHub Actions. Proto byly term\u00edny realizace paraleln\u00edch sestav posunuty. Pracujeme v\u0161ak na tom, abychom co nejd\u0159\u00edve implementovali ob\u011b mo\u017enosti.<\/p>\n<p>Sledujte novinky! A nezapome\u0148te se k n\u00e1m pod\u00edvat na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">GitHub<\/a><\/noindex>, abyste vytvo\u0159ili issue, na\u0161li ji\u017e existuj\u00edc\u00ed a dali mu plus, vytvo\u0159ili PR nebo jen sledovali v\u00fdvoj projektu.<\/p>\n<h2>P.S.<\/h2>\n<p>\nP\u0159e\u010dt\u011bte si tak\u00e9 n\u00e1\u0161 blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/481306\/\">P\u0159edstavujeme werf 1.0 stable: co m\u00e1 spole\u010dn\u00e9ho s GitOps, stav 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 pro CI\/CD v Kubernetes (p\u0159ehled a video p\u0159edn\u00e1\u0161ky)<\/a><\/noindex>\u00bb;<\/li>\n<li> Cyklus pozn\u00e1mek o nov\u00fdch funkc\u00edch ve werf:\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-cestn\u00e9 slou\u010den\u00ed v werf: nasazen\u00ed v Kubernetes s Helmem \u201ena steroidech\u201c<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468049\/\">Pou\u017eit\u00ed werf pro nasazen\u00ed komplexn\u00edch Helm chart\u016f<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Podpora monorepo a multirepo v werf a jak to souvis\u00ed s Docker Registry<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Sestavovat Docker obrazy v werf nyn\u00ed lze i podle b\u011b\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.3 - 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\/cs\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Vyd\u00e1n\u00ed werf 1.1: zlep\u0161en\u00ed v sestavova\u010di dnes a pl\u00e1ny do budoucna | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/76764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=76764"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/76764\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/76765"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=76764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=76764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=76764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}