{"id":76769,"date":"2020-04-04T13:42:27","date_gmt":"2020-04-04T11:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet"},"modified":"2020-04-04T13:42:27","modified_gmt":"2020-04-04T11:42:27","slug":"content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet","title":{"rendered":"Etiketimi e bazuar n\u00eb p\u00ebrmbajtje n\u00eb grumbulluesin werf: pse dhe si funksionon?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Etiketimi e bazuar n\u00eb p\u00ebrmbajtje n\u00eb grumbulluesin werf: pse dhe si funksionon?\" src=\"\/wp-content\/uploads\/2020\/04\/494346bbee96cc2b6c838491ba1c67fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/\">werf<\/a><\/noindex> \u2014 mjet \u00ebsht\u00eb GitOps CLI p\u00ebr ndihm\u00eb dhe dor\u00ebzimi i aplikacioneve n\u00eb Kubernetes. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">n\u00eb versionin v1.1<\/a><\/noindex> u prezantua nj\u00eb mund\u00ebsi e re n\u00eb nd\u00ebrtuesin e imazheve: etiketimi i imazheve sipas p\u00ebrmbajtjes ose <i>content-based tagging<\/i>. Deri tani, skema tipike e etiketimit n\u00eb werf parashikonte etiketimin e imazheve Docker sipas tag-\u00ebve Git, deg\u00ebve Git ose komiteteve Git. Por t\u00eb gjitha k\u00ebto skema kan\u00eb disavantazhe q\u00eb zgjidhen plot\u00ebsisht nga strategjia e re e etiketimit. Detajet p\u00ebr t\u00eb dhe pse \u00ebsht\u00eb kaq e mir\u00eb \u2014 m\u00eb posht\u00eb.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Depozita e nj\u00eb grupi mikrosh\u00ebrbimesh nga nj\u00eb depo Git<\/h2>\n<p>\nNdodh shpesh q\u00eb aplikacioni t\u00eb jet\u00eb i ndar\u00eb n\u00eb shum\u00eb sh\u00ebrbime m\u00eb shum\u00eb-m\u00eb pak t\u00eb pavarura. L\u00ebshimet e k\u00ebtyre sh\u00ebrbimeve mund t\u00eb ndodhin n\u00eb m\u00ebnyr\u00eb t\u00eb pavarur: nj\u00eb ose disa sh\u00ebrbime mund t\u00eb l\u00ebshohen n\u00eb nj\u00eb her\u00eb, nd\u00ebrsa t\u00eb tjer\u00ebt duhet t\u00eb vazhdojn\u00eb t\u00eb funksionojn\u00eb pa ndonj\u00eb ndryshim. Por nga k\u00ebndv\u00ebshtrimi i ruajtjes s\u00eb kodit dhe menaxhimit t\u00eb projektit, \u00ebsht\u00eb m\u00eb e leht\u00eb t\u00eb mbash k\u00ebto sh\u00ebrbime t\u00eb aplikacionit n\u00eb nj\u00eb depo t\u00eb vetme.<\/p>\n<p>Ka situata kur sh\u00ebrbimet jan\u00eb v\u00ebrtet t\u00eb pavarura dhe nuk lidhen me nj\u00eb aplikacion t\u00eb vet\u00ebm. N\u00eb at\u00eb rast ato do t\u00eb vendosen n\u00eb projekte t\u00eb ve\u00e7anta dhe l\u00ebshimi i tyre do t\u00eb b\u00ebhet p\u00ebrmes proceseve t\u00eb ve\u00e7anta CI\/CD n\u00eb \u00e7do projekt.<\/p>\n<p>Megjithat\u00eb, n\u00eb praktik\u00eb, zhvilluesit shpesh e ndajn\u00eb nj\u00eb aplikacion t\u00eb vetme n\u00eb disa mikrosh\u00ebrbime, por t\u00eb krijosh nj\u00eb depo dhe projekt t\u00eb ve\u00e7ant\u00eb p\u00ebr \u00e7do nj\u00eb\u2026 \u00ebsht\u00eb qart\u00eb e tepruar. P\u00ebr k\u00ebt\u00eb situat\u00eb do t\u00eb flitet m\u00eb tutje: disa nga k\u00ebto mikrosh\u00ebrbime ndodhen n\u00eb nj\u00eb depo t\u00eb vetme projekti dhe l\u00ebshimet ndodhin p\u00ebrmes nj\u00eb procesi t\u00eb vet\u00ebm n\u00eb CI\/CD.<\/p>\n<h3>Etiketimi sipas deg\u00ebs dhe tag-\u00ebve Git<\/h3>\n<p>\nSupozoni se p\u00ebrdoret strategjia m\u00eb e zakonshme e etiketimit \u2014 <i>tag-or-branch<\/i>. P\u00ebr deg\u00ebt Git, imazhet etiketohen me emrin e deg\u00ebs; p\u00ebr nj\u00eb dege, n\u00eb nj\u00eb moment t\u00eb caktuar ekziston vet\u00ebm nj\u00eb imazh i publikuar me emrin e k\u00ebsaj dege. P\u00ebr tag-\u00ebt Git, imazhet etiketohen p\u00ebrkat\u00ebsisht me emrin e tag-ut.<\/p>\n<p>Kur krijohet nj\u00eb tag i ri Git \u2014 p\u00ebr shembull, kur del nj\u00eb version i ri \u2014 p\u00ebr t\u00eb gjitha imazhet e projektit n\u00eb Docker Registry do t\u00eb krijohet nj\u00eb tag i ri Docker:<\/p>\n<ul>\n<li> <code>myregistry.org\/myproject\/frontend:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/myservice1:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/myservice2:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/myservice3:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/myservice4:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/myservice5:v1.1.10<\/code><\/li>\n<li> <code>myregistry.org\/myproject\/database:v1.1.10<\/code><\/li>\n<\/ul>\n<p>\nK\u00ebto emra t\u00eb rinj t\u00eb imazheve kalojn\u00eb p\u00ebrmes shablloneve Helm n\u00eb konfigurimin Kubernetes. Gjat\u00eb fillimit t\u00eb deploy-it me komand\u00ebn <code>werf deploy<\/code> ndodh p\u00ebrdit\u00ebsimi i fush\u00ebs <code>image<\/code> n\u00eb manifestet e burimeve Kubernetes dhe rindezja e burimeve p\u00ebrkat\u00ebse p\u00ebr shkak t\u00eb ndryshimit t\u00eb emrit t\u00eb imazhit.<\/p>\n<p><b>Problemi<\/b>: n\u00eb rastin kur p\u00ebrmbajtja e imazhit nuk ka ndryshuar nga versioni i m\u00ebparsh\u00ebm (Git-tag), por vet\u00ebm Docker-tag-u i tij \u00ebsht\u00eb ndryshuar, ndodh <i>rindezja e panevojshme<\/i> e k\u00ebtij aplikacioni dhe, si rrjedhoj\u00eb, mund t\u00eb ndodhi nj\u00eb ndales\u00eb e caktuar. Edhe pse nuk ka pasur asnj\u00eb arsye t\u00eb v\u00ebrtet\u00eb p\u00ebr t\u00eb kryer k\u00ebt\u00eb rindezje.<\/p>\n<p>Si pasoj\u00eb, me skem\u00ebn aktuale t\u00eb etiketimit, duhet t\u00eb krijohen disa depo Git t\u00eb ve\u00e7anta dhe shfaqet problemi i organizimit t\u00eb ndezjes s\u00eb k\u00ebtyre disa depo. N\u00eb p\u00ebrgjith\u00ebsi, nj\u00eb skem\u00eb e till\u00eb del e r\u00ebnd\u00eb dhe e komplikuar. \u00cbsht\u00eb m\u00eb mir\u00eb t\u00eb bashkohen shum\u00eb sh\u00ebrbime n\u00eb nj\u00eb depo t\u00eb vetme dhe t\u00eb krijohen etiketa Docker t\u00eb tilla q\u00eb t\u00eb mos ka rindezje t\u00eb panevojshme.<\/p>\n<h3>Etiketimi sipas Git-commit<\/h3>\n<p>\nN\u00eb werf gjithashtu ka nj\u00eb strategji etiketimi t\u00eb lidhur me Git-commit.<\/p>\n<p>Git-commit \u00ebsht\u00eb identifikuesi i p\u00ebrmbajtjes s\u00eb depozit\u00ebs Git dhe varet nga historia e ndryshimeve t\u00eb skedave n\u00eb depozit\u00ebn Git, prandaj duket logjike ta p\u00ebrdor\u00ebsh at\u00eb p\u00ebr etiketimin e imazheve n\u00eb Docker Registry.<\/p>\n<p>Megjithat\u00eb, etiketimi sipas Git-commit ka t\u00eb nj\u00ebjtat disavantazhe si etiketimi sipas deg\u00ebve Git ose Git-tag-eve:<\/p>\n<ul>\n<li> Mund t\u00eb ket\u00eb nj\u00eb commit t\u00eb zbraz\u00ebt, i cili nuk ndryshon skedat, por Docker-tag-u i imazhit do t\u00eb jet\u00eb ndryshuar.<\/li>\n<li> Mund t\u00eb ket\u00eb nj\u00eb merge-commit, i cili nuk ndryshon skedat, por Docker-tag-u i imazhit do t\u00eb jet\u00eb ndryshuar.<\/li>\n<li> Mund t\u00eb ket\u00eb nj\u00eb commit, i cili ndryshon ato skeda n\u00eb Git q\u00eb nuk importohen n\u00eb imazh, dhe Docker-tag-u i imazhit p\u00ebrs\u00ebri do t\u00eb ndryshoj\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Etiketimi sipas emrit t\u00eb deg\u00ebs Git nuk pasqyron versionin e imazhit.<\/h2>\n<p>\nKa edhe nj\u00eb problem tjet\u00ebr, i lidhur me strategjin\u00eb e etiketimit sipas deg\u00ebve Git.<\/p>\n<p>Etiketimi sipas emrit t\u00eb deg\u00ebs funksionon derisa commit-et e k\u00ebsaj dege p\u00ebrmbledhin radhazi n\u00eb rend kronologjik.<\/p>\n<p>N\u00ebse p\u00ebrdoruesi nis rind\u00ebrtimin e nj\u00eb komite t\u00eb vjet\u00ebr, q\u00eb lidhet me nj\u00eb deg\u00eb n\u00eb skem\u00ebn aktuale, at\u00ebher\u00eb werf do t\u00eb mbuloj\u00eb imazhin n\u00ebn etiket\u00ebn p\u00ebrkat\u00ebse t\u00eb Docker-it me versionin e ri t\u00eb rind\u00ebrtuar t\u00eb imazhit p\u00ebr komitin e vjet\u00ebr. Deployment me k\u00ebt\u00eb etiket\u00eb nga ky moment rrezikon q\u00eb gjat\u00eb rip\u00ebrs\u00ebritjes s\u00eb pod-ve t\u00eb b\u00ebj\u00eb pull t\u00eb nj\u00eb versioni tjet\u00ebr t\u00eb imazhit, duke rezultuar n\u00eb humbjen e lidhjes s\u00eb aplikacionit ton\u00eb me sistemin CI, duke u desinhronizuar.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, gjat\u00eb push\u2019ave t\u00eb nj\u00ebpasnj\u00ebshme n\u00eb nj\u00eb deg\u00eb me nj\u00eb interval t\u00eb vog\u00ebl kohor midis tyre, komiti i vjet\u00ebr mund t\u00eb grumbullohet m\u00eb von\u00eb se ai m\u00eb i ri: versioni i vjet\u00ebr i imazhit do t\u00eb mbuloj\u00eb at\u00eb m\u00eb t\u00eb ri n\u00eb etiket\u00ebn e deg\u00ebs Git. K\u00ebto probleme mund t\u00eb zgjidhen nga sistemi CI\/CD (p.sh., n\u00eb GitLab CI, nj\u00eb pipeline niset p\u00ebr serin\u00eb e komiteve t\u00eb fundit). Megjithat\u00eb, kjo nuk mb\u00ebshtetet nga t\u00eb gjith\u00eb sistemet dhe duhet t\u00eb ket\u00eb nj\u00eb m\u00ebnyr\u00eb m\u00eb t\u00eb besueshme p\u00ebr t\u00eb parandaluar nj\u00eb problem kaq themelor.<\/p>\n<h2>\u00c7far\u00eb \u00ebsht\u00eb etiketimi bazuar n\u00eb p\u00ebrmbajtje?<\/h2>\n<p>\nPra, \u00e7far\u00eb \u00ebsht\u00eb etiketimi bazuar n\u00eb p\u00ebrmbajtje \u2014 etiketimi i imazheve sipas p\u00ebrmbajtjes.<\/p>\n<p>P\u00ebr krijimin e etiketave Docker p\u00ebrdoren jo primitiv\u00ebt e Git-it (dega Git, etiketa Git\u2026), por gjurm\u00eb kontrolli t\u00eb lidhura me:<\/p>\n<ul>\n<li> <i>p\u00ebrmbajtjen e imazhit<\/i>. Identifikuesi-etiket\u00eb i imazhit pasqyron p\u00ebrmbajtjen e tij. Kur nd\u00ebrtohet nj\u00eb version i ri, ky identifikues nuk do t\u00eb ndryshoj\u00eb n\u00ebse skedar\u00ebt n\u00eb imazh nuk kan\u00eb ndryshuar;<\/li>\n<li> <i>historin\u00eb e krijimit t\u00eb k\u00ebtij imazhi n\u00eb Git<\/i>. Imazhet q\u00eb lidhen me deg\u00eb t\u00eb ndryshme Git dhe histori t\u00eb ndryshme nd\u00ebrtimi p\u00ebrmes werf, do t\u00eb ken\u00eb identifikues t\u00eb ndrysh\u00ebm etiketash.<\/li>\n<\/ul>\n<p>\nSi nj\u00eb identifikues t\u00eb till\u00eb etikete sh\u00ebrben e ashtuquajtura <b>n\u00ebnshkrimi i fazave t\u00eb imazhit<\/b>.<\/p>\n<p>\u00c7do imazh p\u00ebrb\u00ebhet nga nj\u00eb grup fazash: <code>from<\/code>, <code>before-install<\/code>, <code>git-archive<\/code>, <code>instalo<\/code>, <code>imports-after-install<\/code>, <code>before-setup<\/code>,\u2026 <code>git-latest-patch<\/code> etj. \u00c7do faz\u00eb ka nj\u00eb identifikues q\u00eb pasqyron p\u00ebrmbajtjen e saj, \u2014 <b>n\u00ebnshkrimi i faz\u00ebs<\/b> <i>(n\u00ebnshkrimi i faz\u00ebs)<\/i>.<\/p>\n<p>Imazhi p\u00ebrfundimtar, q\u00eb p\u00ebrb\u00ebhet nga k\u00ebto faza, etiketizohet me at\u00eb q\u00eb quhet n\u00ebnshkrimi i grupit t\u00eb k\u00ebtyre fazave \u2014 <b>stages signature<\/b>, \u2014 i cili \u00ebsht\u00eb p\u00ebrmbledh\u00ebs p\u00ebr t\u00eb gjitha fazat e imazhit.<\/p>\n<p>\u00c7do imazh nga konfigurimi <code>werf.yaml<\/code> n\u00eb p\u00ebrgjith\u00ebsi do t\u00eb ket\u00eb nj\u00eb t\u00eb till\u00eb n\u00ebnshkrim dhe, p\u00ebr rrjedhoj\u00eb, nj\u00eb etiket\u00eb Docker.<\/p>\n<p>N\u00ebnshkrimi i fazave zgjidh t\u00eb gjitha problemet e p\u00ebrmendura:<\/p>\n<ul>\n<li> \u00cbsht\u00eb e q\u00ebndrueshme ndaj komiteteve t\u00eb zbraz\u00ebta Git.<\/li>\n<li> \u00cbsht\u00eb e q\u00ebndrueshme ndaj komiteteve Git q\u00eb ndryshojn\u00eb skedar\u00eb q\u00eb nuk jan\u00eb t\u00eb r\u00ebnd\u00ebsish\u00ebm p\u00ebr imazhin.<\/li>\n<li> Nuk \u00e7on n\u00eb problemin e mbulimit t\u00eb versionit aktual t\u00eb imazhit gjat\u00eb rinisjes s\u00eb nd\u00ebrtimeve p\u00ebr komitetet e vjetra t\u00eb deg\u00ebs Git.<\/li>\n<\/ul>\n<p>\nTani kjo \u00ebsht\u00eb strategjia e rekomanduar p\u00ebr etiketimin dhe p\u00ebrdoret si parazgjedhje n\u00eb werf p\u00ebr t\u00eb gjitha sistemet CI.<\/p>\n<h2>Si ta aktivizoni dhe p\u00ebrdorni n\u00eb werf<\/h2>\n<p>\nOpsioni p\u00ebrkat\u00ebs u shfaq te ekipi <code>werf publish<\/code>: <code>--tag-by-stages-signature=true|false<\/code><\/p>\n<p>N\u00eb sistemin CI, strategjia e etiketimit p\u00ebrcaktohet me komand\u00ebn <code>werf ci-env<\/code>. M\u00eb par\u00eb p\u00ebr t\u00eb ishte p\u00ebrcaktuar nj\u00eb paramet\u00ebr <code>werf ci-env --tagging-strategy=tag-or-branch<\/code>. Tani, n\u00ebse e specifikoni <code>werf ci-env --tagging-strategy=stages-signature<\/code> apo jo k\u00ebt\u00eb opsion, werf do t\u00eb p\u00ebrdor\u00eb si parazgjedhje strategjin\u00eb e etiketimit <code>stages-signature<\/code>. Komanda <code>werf ci-env<\/code> do t'i vendos\u00eb automatikisht flamujt e nevojsh\u00ebm p\u00ebr komand\u00ebn <code>werf build-and-publish<\/code> (ose <code>werf publish<\/code>), p\u00ebrve\u00e7 k\u00ebsaj, nuk ka nevoj\u00eb t\u00eb tregoni opsione t\u00eb tjera p\u00ebr k\u00ebto komanda.<\/p>\n<p>P\u00ebr shembull, komanda:<\/p>\n<pre><code class=\"plaintext\">werf publish --stages-storage :local --images-repo registry.hello.com\/web\/core\/system --tag-by-stages-signature<\/code><\/pre>\n<p>\n\u2026 mund t\u00eb krijoj\u00eb imazhe t\u00eb m\u00ebposhtme:<\/p>\n<ul>\n<li> <code>registry.hello.com\/web\/core\/system\/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d<\/code><\/li>\n<li> <code>registry.hello.com\/web\/core\/system\/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6<\/code><\/li>\n<\/ul>\n<p>\nK\u00ebtu <code>4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d<\/code> \u2014 \u00ebsht\u00eb nj\u00eb n\u00ebnshkrim i fazave t\u00eb imazhit <code>backend<\/code>, nd\u00ebrsa <code>f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6<\/code> \u2014 n\u00ebnshkrim i fazave t\u00eb imazhit <code>frontend<\/code>.<\/p>\n<p>Kur p\u00ebrdoren funksione speciale <code>werf_container_image<\/code> dhe <code>werf_container_env<\/code> n\u00eb shabllonet Helm nuk \u00ebsht\u00eb e nevojshme t\u00eb ndryshoni asgj\u00eb: k\u00ebto funksione do t\u00eb gjenerojn\u00eb automatikisht emrat e sakt\u00eb t\u00eb imazheve.<\/p>\n<p>Shembulli i konfigurimit n\u00eb sistemin CI:<\/p>\n<pre><code class=\"plaintext\">type multiwerf &amp;&amp; source &lt;(multiwerf use 1.1 beta)\ntype werf &amp;&amp; source &lt;(werf ci-env gitlab)\nwerf build-and-publish|deploy<\/code><\/pre>\n<p>\nInformacione m\u00eb t\u00eb plota mbi konfigurimin jan\u00eb t\u00eb disponueshme n\u00eb dokumentacion:<\/p>\n<ul>\n<li> <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\">Referenca \u2192 Publikimi (publish)<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/reference\/plugging_into_cicd\/overview.html#stages-signature\">Puna me CI\/CD \u2192 Informacion t\u00eb p\u00ebrgjithsh\u00ebm \u2192 stages-signature<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/v1.1\/documentation\/guides\/gitlab_ci_cd_integration.html#gitlab-ciyml\">Integrimi me GitLab CI\/CD \u2192 .gitlab-ci.yml<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P\u00ebrve\u00e7 k\u00ebsaj<\/h2>\n<p><\/p>\n<ul>\n<li> Opsioni i ri <code>werf publish --tag-by-stages-signature=true|false<\/code>.<\/li>\n<li> Vlera e re e opsionit <code>werf ci-env --tagging-strategy=stages-signature|tag-or-branch<\/code> (n\u00ebse nuk specifikohet, at\u00ebher\u00eb do t\u00eb jet\u00eb nga default <code>stages-signature<\/code>).<\/li>\n<li> N\u00ebse deri m\u00eb tani ishin p\u00ebrdorur opsione etiketimi sipas Git-komit\u00ebve (<code>WERF_TAG_GIT_COMMIT<\/code> apo opsioni <code>werf publish --tag-git-commit COMMIT<\/code>), at\u00ebher\u00eb \u00ebsht\u00eb e domosdoshme t\u00eb kaloni n\u00eb strategjin\u00eb e etiketimit <i>stages-signature<\/i>.<\/li>\n<li> Projektet e reja \u00ebsht\u00eb m\u00eb mir\u00eb t'i kaloni menj\u00ebher\u00eb n\u00eb skem\u00ebn e re t\u00eb etiketimit.<\/li>\n<li> Projektet e vjetra gjat\u00eb kalimit n\u00eb werf 1.1 \u00ebsht\u00eb e d\u00ebshirueshme t\u00eb kalojn\u00eb n\u00eb skem\u00ebn e re t\u00eb etiketimit, megjithat\u00eb e vjetra <i>tag-or-branch<\/i> ende mbetet e mb\u00ebshtetur.<\/li>\n<\/ul>\n<p>\nEtiketimi t\u00eb bazuar n\u00eb p\u00ebrmbajtje zgjidh t\u00eb gjitha problemet e r\u00ebna n\u00eb artikull:<\/p>\n<ul>\n<li> Q\u00ebndrueshm\u00ebria e emrit t\u00eb etiket\u00ebs Docker ndaj Git-komit\u00ebve t\u00eb zbraz\u00ebt.<\/li>\n<li> Q\u00ebndrueshm\u00ebria e emrit t\u00eb etiket\u00ebs Docker ndaj Git-komit\u00ebve q\u00eb ndryshojn\u00eb skedar\u00eb jo relevante p\u00ebr imazhin.<\/li>\n<li> Nuk \u00e7on n\u00eb problem me z\u00ebvend\u00ebsimin e versionit aktual t\u00eb imazhit gjat\u00eb rilansimit t\u00eb nd\u00ebrtimeve p\u00ebr Git-komit\u00ebt e vjet\u00ebr p\u00ebr deg\u00ebt Git.<\/li>\n<\/ul>\n<p>\nShfryt\u00ebzoni! Dhe mos harroni t\u00eb na vizitoni n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">GitHub<\/a><\/noindex>, p\u00ebr t\u00eb krijuar nj\u00eb \u00e7\u00ebshtje ose gjetur nj\u00eb t\u00eb till\u00eb ekzistuese, t\u00eb vendosni nj\u00eb plus, t\u00eb krijoni PR ose thjesht t\u00eb ndiqni zhvillimin e projektit.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLexoni gjithashtu n\u00eb blogun ton\u00eb:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">L\u00ebshimi i werf 1.1: p\u00ebrmir\u00ebsime n\u00eb nd\u00ebrtuesin sot dhe planet p\u00ebr t\u00eb ardhmen<\/a><\/noindex>\u00bb<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/481306\/\">Paraqesim werf 1.0 stabil: \u00e7far\u00eb lidhjeje ka me GitOps, statusin dhe planet<\/a><\/noindex>\u00bb<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf - mjeti yn\u00eb p\u00ebr CI\/CD n\u00eb Kubernetes (shqyrtim dhe video prezantimi)<\/a><\/noindex>\u00bb;<\/li>\n<li> Cikli i sh\u00ebnimeve t\u00eb rinovimeve n\u00eb werf:\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-way merge n\u00eb werf: deploy n\u00eb Kubernetes me Helm \"n\u00eb steroide\"<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468049\/\">P\u00ebrdorimi i werf p\u00ebr l\u00ebshimin e Helm-chart-eve komplekse<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Mb\u00ebshtetje p\u00ebr monorepo dhe multirepo n\u00eb werf dhe \u00e7far\u00eb lidhjeje ka kjo me Docker Registry<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Tani mund t\u00eb nd\u00ebrtosh imazhe Docker n\u00eb werf edhe me Dockerfile standard<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">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. \u0412 \u0440\u0435\u043b\u0438\u0437\u0435 v1.1 \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432: \u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0438\u043b\u0438 content-based tagging. \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0442\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 werf \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0430 \u0442\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Docker-\u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043f\u043e Git-\u0442\u0435\u0433\u0443, Git-\u0432\u0435\u0442\u043a\u0435 \u0438\u043b\u0438 Git-\u043a\u043e\u043c\u043c\u0438\u0442\u0443. \u041d\u043e \u0443 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0441\u0445\u0435\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":76770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-76769","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.2 - 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\/sq\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\udd47Content-based tagging \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 werf: \u0437\u0430\u0447\u0435\u043c \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet\" \/>\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:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-04T11:42:27+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\udd47Etiketimi t\u00eb bazuar n\u00eb p\u00ebrmbajtje n\u00eb montuesin werf: pse dhe si funksionon? | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\udd47Content-based tagging \u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 werf: \u0437\u0430\u0447\u0435\u043c \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? | ProHoster","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/content-based-tagging-v-sborshhike-werf-zachem-i-kak-eto-rabotaet","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:27+00:00","article:modified_time":"2020-04-04T11:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"76769","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:22","updated":"2022-09-28 05:59:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/76769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=76769"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/76769\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/76770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=76769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=76769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=76769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}