{"id":31377,"date":"2019-10-31T21:40:57","date_gmt":"2019-10-31T18:40:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika\/"},"modified":"2019-10-31T21:40:57","modified_gmt":"2019-10-31T18:40:57","slug":"nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","title":{"rendered":"Realizimi yn\u00eb i Continuous Deployment n\u00eb platform\u00ebn e klientit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00eb True Engineering kemi vendosur procesin e dor\u00ebzimit t\u00eb vazhduesh\u00ebm t\u00eb azhurnimeve n\u00eb serverat e klient\u00ebve dhe duam t\u00eb ndajm\u00eb k\u00ebt\u00eb p\u00ebrvoj\u00eb.<\/p>\n<p>P\u00ebr t\u00eb filluar, ne zhvilluam nj\u00eb sistem online p\u00ebr klientin dhe e implementuam n\u00eb klas\u00ebn ton\u00eb Kubernetes. Tani zgjidhja jon\u00eb e ngarkes\u00ebs s\u00eb lart\u00eb ka kaluar n\u00eb platform\u00ebn e klientit, p\u00ebr t\u00eb cilin ne vendos\u00ebm nj\u00eb proces t\u00eb plot\u00eb automatik t\u00eb Continuous Deployment. Fal\u00eb k\u00ebsaj, ne e p\u00ebrshpejtuam koh\u00ebn p\u00ebr t\u00eb dal\u00eb n\u00eb treg \u2013 dor\u00ebzimin e ndryshimeve n\u00eb ambientin produktiv. <\/p>\n<p>N\u00eb k\u00ebt\u00eb artikull, ne do t\u00eb flasim p\u00ebr t\u00eb gjitha fazat e procesit t\u00eb Continuous Deployment (CD) ose dor\u00ebzimin e azhurnimeve n\u00eb platform\u00ebn e klientit: <\/p>\n<ol>\n<li>si fillon ky proces, <\/li>\n<li>synchronize with the client\u2019s Git repository,<\/li>\n<li>nd\u00ebrtimi i backend-it dhe frontend-it,<\/li>\n<li>implementimi automatik i aplikacionit n\u00eb mjedisin e testimit, <\/li>\n<li>implementimi automatik n\u00eb Prod. <\/li>\n<\/ol>\n<p>\nGjat\u00eb procesit do t\u00eb ndajm\u00eb detajet e konfigurimit.<\/p>\n<p><img decoding=\"async\" alt=\"Realizimi yn\u00eb i Continuous Deployment n\u00eb platform\u00ebn e klientit\" src=\"\/wp-content\/uploads\/2019\/04\/54be580319906344a6e2f091395ea7a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>1. Fillimi i CD<\/h3>\n<p>\nContinuous Deployment nisin kur zhvilluesi b\u00ebn ndryshime n\u00eb deg\u00ebn e l\u00ebshimit t\u00eb Git-repozitorit ton\u00eb. <\/p>\n<p>Aplikacioni yn\u00eb funksionon n\u00eb baz\u00eb t\u00eb nj\u00eb arkitekture mikrosh\u00ebrbimi dhe t\u00eb gjitha komponent\u00ebt e tij ruhen n\u00eb nj\u00eb repozitor. Fal\u00eb k\u00ebsaj, t\u00eb gjitha mikrosh\u00ebrbimet jan\u00eb nd\u00ebrtuar dhe instaluar, madje edhe n\u00ebse nj\u00ebra prej tyre \u00ebsht\u00eb ndryshuar. <\/p>\n<p>Ne e organizuam pun\u00ebn n\u00ebp\u00ebrmjet nj\u00eb repozitori p\u00ebr disa arsye: <\/p>\n<ul>\n<li>Leht\u00ebsia e zhvillimit \u2013 aplikacioni \u00ebsht\u00eb n\u00eb proces t\u00eb aktiv zhvillimi, prandaj mund t\u00eb punohet menj\u00ebher\u00eb me t\u00eb gjith\u00eb kodin. <\/li>\n<li>Nj\u00eb pipeline i vetme CI\/CD, q\u00eb garanton q\u00eb aplikacioni si nj\u00eb sistem i vet\u00ebm kalon t\u00eb gjitha testet dhe dor\u00ebzohet n\u00eb ambientin prodhues t\u00eb klientit. <\/li>\n<li>Eliminon ngat\u00ebrresat me versionet \u2013 ne nuk kemi nevoj\u00eb t\u00eb mbajm\u00eb nj\u00eb hart\u00eb t\u00eb versioneve t\u00eb mikrosh\u00ebrbimeve dhe t\u00eb p\u00ebrshkruajm\u00eb konfigurimin p\u00ebr secilin mikrosh\u00ebrbim n\u00eb skriptet Helm.<\/li>\n<\/ul>\n<h3>2. Synchronizimi me Git-repozitorin e kodit burimor t\u00eb klientit<\/h3>\n<p>\nNdryshimet e b\u00ebra sinkronizohen automatikisht me Git-repozitorin e klientit. Atje \u00ebsht\u00eb e vendosur nd\u00ebrtimi i aplikacionit, i cili aktivizohet pas p\u00ebrdit\u00ebsimit t\u00eb deg\u00ebs dhe implementimi n\u00eb prodhimin. T\u00eb dy proceset ndodhin n\u00eb ambientin e tyre nga Git-repozitori. <\/p>\n<p>Ne nuk mund t\u00eb punojm\u00eb drejtp\u00ebrdrejt me repozitorin e klientit, pasi na nevojiten ambientet tona p\u00ebr zhvillim dhe testim. Ne p\u00ebrdorim p\u00ebr k\u00ebto q\u00ebllime repozitorin ton\u00eb Git \u2013 ai \u00ebsht\u00eb sinkronizuar me repozitorin e tyre Git. Sa her\u00eb q\u00eb zhvilluesi ngarkon ndryshime n\u00eb deg\u00ebn p\u00ebrkat\u00ebse t\u00eb repozitorit ton\u00eb, GitLab menj\u00ebher\u00eb d\u00ebrgon k\u00ebto ndryshime te klienti.<\/p>\n<p><img decoding=\"async\" alt=\"Realizimi yn\u00eb i Continuous Deployment n\u00eb platform\u00ebn e klientit\" src=\"\/wp-content\/uploads\/2019\/04\/9e704f112649b77f0522fa60cfcfc2bb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPas k\u00ebsaj duhet t\u00eb b\u00ebhet nd\u00ebrtimi. Ai p\u00ebrb\u00ebhet nga disa faza: nd\u00ebrtimi i backend-it dhe frontend-it, testimi dhe dor\u00ebzimi n\u00eb prodhim.<\/p>\n<h3>3. Nd\u00ebrtimi i backend-it dhe frontend-it<\/h3>\n<p>\nNd\u00ebrtimi i backend-it dhe frontend-it \u00ebsht\u00eb dy detyra paralele q\u00eb kryhen n\u00eb sistemin GitLab Runner. Konfigurimi i nd\u00ebrtimit fillestar \u00ebsht\u00eb n\u00eb k\u00ebt\u00eb repozitor.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ce\/ci\/yaml\/\">Tutoria p\u00ebr shkruarjen e skriptit YAML p\u00ebr nd\u00ebrtim n\u00eb GitLab<\/a><\/noindex>.<\/p>\n<p>GitLab Runner merr kodin nga repozitori i nevojsh\u00ebm, me komand\u00ebn e nd\u00ebrtimit t\u00eb aplikacionit Java, e nd\u00ebrron dhe e d\u00ebrgon at\u00eb n\u00eb Docker registry. K\u00ebtu ne nd\u00ebrtojm\u00eb backend-in dhe frontend-in, fitojm\u00eb imazhe t\u00eb Docker-it, t\u00eb cilat i ruajm\u00eb n\u00eb repozitorin e klientit. P\u00ebr menaxhimin e imazheve Docker p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/palantir\/gradle-docker\">pluginin Gradle<\/a><\/noindex>.<\/p>\n<p>Ne sinkronizojm\u00eb versionet e imazheve tona me versionin e l\u00ebshimit q\u00eb do t\u00eb publikohet n\u00eb Docker. P\u00ebr nj\u00eb funksionim t\u00eb qet\u00eb kemi b\u00ebr\u00eb disa konfigurime:<\/p>\n<p>1. Nd\u00ebrmjet ambientit t\u00eb testimit dhe produktit, en\u00ebt nuk ri-nd\u00ebrtohen. Ne kemi b\u00ebr\u00eb paramet\u00ebrizime, q\u00eb e nj\u00ebjta en\u00eb mund t\u00eb funksionoj\u00eb pa ri-nd\u00ebrtim me t\u00eb gjitha konfigurimet, variablat e ambientit dhe sh\u00ebrbimet si n\u00eb ambientin e testimit ashtu edhe n\u00eb prodhim. <\/p>\n<p>2. P\u00ebr t\u00eb p\u00ebrdit\u00ebsuar aplikacionin p\u00ebrmes Helm duhet t\u00eb specifikohet versioni i tij. N\u00eb nd\u00ebrtimin ton\u00eb t\u00eb backend-it, frontend-it dhe p\u00ebrdit\u00ebsimin e aplikacionit \u2013 jan\u00eb tri detyra t\u00eb ndryshme, prandaj \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb p\u00ebrdoret t\u00eb nj\u00ebjtin version t\u00eb aplikacionit kudo. P\u00ebr k\u00ebt\u00eb detyr\u00eb ne p\u00ebrdorim t\u00eb dh\u00ebnat nga historia Git, pasi konfigurations e klasterit K8S dhe aplikacionit jan\u00eb n\u00eb nj\u00eb Git-repozitor.<\/p>\n<p>Ne e marrim versionin e aplikacionit nga rezultatet e ekzekutimit t\u00eb komand\u00ebs<br \/>\n<code>git describe --tags --abbrev=7<\/code>.<\/p>\n<h3>4. Implementimi automatik i t\u00eb gjitha ndryshimeve n\u00eb ambientin e testimit (UAT) <\/h3>\n<p>\nFaza e ardhshme n\u00eb k\u00ebt\u00eb skript nd\u00ebrtimi kryen p\u00ebrdit\u00ebsimin automatik t\u00eb klasterit K8S. Kjo ndodh p\u00ebr sa koh\u00eb q\u00eb t\u00eb gjith\u00eb aplikacioni \u00ebsht\u00eb nd\u00ebrtuar dhe t\u00eb gjith\u00eb artefaktet jan\u00eb publikuar n\u00eb Docker Registry. Pas k\u00ebsaj, aktivizohet p\u00ebrdit\u00ebsimi i ambientit t\u00eb testimit.<\/p>\n<p>P\u00ebrdit\u00ebsimi i klasterit aktivizohet me <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/helm\/#helm-upgrade\">Helm Update<\/a><\/noindex>. N\u00ebse ndonj\u00ebher\u00eb di\u00e7ka nuk shkon si\u00e7 \u00ebsht\u00eb parashikuar, Helm automatikisht dhe vet\u00eb do ta kthej\u00eb \u00e7do ndryshim. Funksionimin e tij nuk ka nevoj\u00eb ta kontrollosh. <\/p>\n<p>Ne ofrojm\u00eb bashk\u00eb me montimin konfigurimin e klasterit K8S. Prandaj hapi tjet\u00ebr \u00ebsht\u00eb p\u00ebrdit\u00ebsimi i tij: configMaps, deployments, services, secrets dhe \u00e7do konfigurim tjet\u00ebr K8S q\u00eb kemi ndryshuar. <\/p>\n<p>Pas k\u00ebsaj, Helm nis RollOut p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar vet\u00eb aplikacionin n\u00eb ambientin e testimit. Para se aplikacioni t\u00eb vendoset n\u00eb prodhim. Kjo b\u00ebhet n\u00eb m\u00ebnyr\u00eb q\u00eb p\u00ebrdoruesit t\u00eb kontrollojn\u00eb manualisht karakteristikat biznesore q\u00eb kemi vendosur n\u00eb ambientin e testimit.<\/p>\n<h3>5. Zhvillimi automatik i t\u00eb gjitha ndryshimeve n\u00eb Prod <\/h3>\n<p>\nP\u00ebr t\u00eb zhvilluar p\u00ebrdit\u00ebsimin n\u00eb ambientin produktiv, mbetet vet\u00ebm t\u00eb shtypni nj\u00eb buton n\u00eb GitLab \u2014 dhe kontejner\u00ebt d\u00ebrgohen menj\u00ebher\u00eb n\u00eb ambientin produktiv.<\/p>\n<p>I nj\u00ebjti aplikacion mund t\u00eb funksionoj\u00eb pa riparim n\u00eb ambiente t\u00eb ndryshme \u2014 testuese dhe n\u00eb prodhim. Ne p\u00ebrdorim t\u00eb nj\u00ebjtat artefakte, pa ndryshuar asgj\u00eb n\u00eb aplikacion, nd\u00ebrsa parametrat i caktojm\u00eb jasht\u00eb. <\/p>\n<p>Parametrizimi fleksib\u00ebl i cil\u00ebsimeve t\u00eb aplikacionit varet nga ambienti ku ky aplikacion do t\u00eb ekzekutohet. Ne kemi nxjerr\u00eb t\u00eb gjitha cil\u00ebsimet e ambienteve jasht\u00eb: gjith\u00e7ka parametrizohet p\u00ebrmes konfigurimit K8S dhe parametrave Helm. Kur Helm zhvillon montimin n\u00eb ambientin e testimit, i aplikohen parametrat e testit, nd\u00ebrsa n\u00eb ambientin produktiv \u2014 parametrat produktiv.<\/p>\n<p>M\u00eb e v\u00ebshtira ishte parametrizimi i t\u00eb gjith\u00eb sh\u00ebrbimeve dhe variablave q\u00eb varen nga ambienti dhe kalimi i tyre n\u00eb variabla mjedisi dhe p\u00ebrshkrimin e parametrave t\u00eb ambientit p\u00ebr Helm. <\/p>\n<p>N\u00eb parametrat e aplikacionit p\u00ebrdoren variabla mjedisi. Vlerat e tyre caktohen n\u00eb kontejner\u00eb me an\u00eb t\u00eb K8S configmap, e cila formohet duke p\u00ebrdorur shabllonet Go. P\u00ebr shembull, caktimi i nj\u00eb variable mjedisi p\u00ebr emrin e domain-it mund t\u00eb b\u00ebhet k\u00ebshtu:<\/p>\n<p><code>APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}<\/code><\/p>\n<p><b>.Values.global.env <\/b>\u2013 n\u00eb k\u00ebt\u00eb variab\u00ebl ruhet emri i ambientit (prod, stage, UAT).<br \/>\n<b>.Values.app.properties.app_external_domain<\/b> \u2013 n\u00eb k\u00ebt\u00eb variab\u00ebl ne n\u00eb skedarin .Values.yaml caktuam domain-in e nevojsh\u00ebm. <\/p>\n<p>Kur aplikacioni p\u00ebrdit\u00ebsohet, Helm krijon nj\u00eb skedar configmap.yaml nga shabllonet dhe plot\u00ebson vler\u00ebn e APP_EXTERNAL_DOMAIN me vler\u00ebn e duhur n\u00eb var\u00ebsi t\u00eb ambientit, ku fillon p\u00ebrdit\u00ebsimi i aplikacionit. Kjo variab\u00ebl vendoset tashm\u00eb n\u00eb kontejner. Ajo \u00ebsht\u00eb e aksesueshme nga aplikacioni, p\u00ebrkat\u00ebsisht, n\u00eb \u00e7do ambient t\u00eb aplikacionit do t\u00eb ket\u00eb nj\u00eb vler\u00eb t\u00eb ndryshme t\u00eb k\u00ebsaj variab\u00ebl. <\/p>\n<p>Kohet e fundit, n\u00eb Spring Cloud ka ardhur mb\u00ebshtetje p\u00ebr K8S, duke p\u00ebrfshir\u00eb pun\u00ebn me configMaps: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spring-cloud\/spring-cloud-kubernetes\">Spring Cloud Kubernetes<\/a><\/noindex>. Deri tani projekti po zhvillohet aktivisht dhe ndryshon n\u00eb m\u00ebnyr\u00eb drastike, nuk mund ta p\u00ebrdorim n\u00eb prodhim. Por ne e monitorojm\u00eb aktivisht dhe e p\u00ebrdorim n\u00eb konfigurimet DEV. Sa her\u00eb q\u00eb t\u00eb stabilizohet \u2014 do t\u00eb kalojm\u00eb nga p\u00ebrdorimi i variablave mjedisi n\u00eb t\u00eb.<\/p>\n<h3>N\u00eb p\u00ebrfundim<\/h3>\n<p>\nPra, Continuous Deployment \u00ebsht\u00eb i vendosur dhe po funksionon. T\u00eb gjitha p\u00ebrdit\u00ebsimet ndodhin me nj\u00eb shtypje butoni. D\u00ebrgimi i ndryshimeve n\u00eb ambientin produktiv \u00ebsht\u00eb automatik. Dhe, \u00e7ka \u00ebsht\u00eb e r\u00ebnd\u00ebsishme, p\u00ebrdit\u00ebsimet nuk ndalojn\u00eb pun\u00ebn e sistemit. <\/p>\n<p><img decoding=\"async\" alt=\"Realizimi yn\u00eb i Continuous Deployment n\u00eb platform\u00ebn e klientit\" src=\"\/wp-content\/uploads\/2019\/04\/07d609d9a40f644cfdad2bdb88652af2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Planet p\u00ebr t\u00eb ardhmen: migrazione automatike e baz\u00ebs<\/h3>\n<p>\nNe kemi filluar t\u00eb mendojm\u00eb p\u00ebr p\u00ebrmir\u00ebsimin e baz\u00ebs dhe mund\u00ebsin\u00eb p\u00ebr t\u00eb rikthyer k\u00ebto ndryshime. Sepse dy versione t\u00eb ndryshme t\u00eb aplikacionit punojn\u00eb nj\u00ebkoh\u00ebsisht: e vjetra punon, nd\u00ebrsa e reja ngrihet. Dhe ne do ta mbyllim t\u00eb vjetren vet\u00ebm kur t\u00eb sigurohemi se versioni i ri funksionon. Migronimi i baz\u00ebs duhet t\u00eb lejoj\u00eb punimin me t\u00eb dy versionet e aplikacionit. <\/p>\n<p>Prandaj, nuk mund ta ndryshojm\u00eb thjesht emrin e kolon\u00ebs ose t\u00eb dh\u00ebna t\u00eb tjera. Por mund t\u00eb krijojm\u00eb nj\u00eb kolon\u00eb t\u00eb re, t\u00eb kopjojm\u00eb n\u00eb t\u00eb dh\u00ebnat nga kolona e vjet\u00ebr dhe t\u00eb shkruajm\u00eb trigger q\u00eb do t\u00eb kopjojn\u00eb dhe p\u00ebrdit\u00ebsojn\u00eb ato n\u00eb kolon\u00ebn tjet\u00ebr gjat\u00eb p\u00ebrdit\u00ebsimit t\u00eb t\u00eb dh\u00ebnave. Dhe pas nj\u00eb montimi t\u00eb suksessh\u00ebm t\u00eb versionit t\u00eb ri t\u00eb aplikacionit, pas nj\u00eb periudhe mb\u00ebshtetje pas lan\u00e7imit, ne do t\u00eb mund t\u00eb fshijm\u00eb kolon\u00ebn e vjet\u00ebr dhe trigger-in e panevojsh\u00ebm. <\/p>\n<p>N\u00ebse versioni i ri i aplikacionit nuk funksionon si\u00e7 duhet, mund t\u00eb rikthehemi n\u00eb versionin e m\u00ebparsh\u00ebm, p\u00ebrfshir\u00eb versionin e m\u00ebparsh\u00ebm t\u00eb baz\u00ebs. Prandaj, ndryshimet tona do t\u00eb mund\u00ebsojn\u00eb pun\u00ebn n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb me disa versione t\u00eb aplikacionit. <\/p>\n<p>Ne planifikojm\u00eb t\u00eb b\u00ebjm\u00eb automatizimin e migracionit t\u00eb baz\u00ebs p\u00ebrmes K8S job, duke e integruar at\u00eb n\u00eb procesin CD. Dhe do t\u00eb ndajm\u00eb k\u00ebt\u00eb p\u00ebrvoj\u00eb n\u00eb Habr.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/447812\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0432 True Engineering \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0435\u0451 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Continuous Deployment. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 time-to-market \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23342,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31377","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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0432 True Engineering \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0435\u0451 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Continuous Deployment. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 time-to-market \u2013\" \/>\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\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\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\udd47\u041d\u0430\u0448\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Continuous Deployment \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0432 True Engineering \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0435\u0451 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Continuous Deployment. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 time-to-market \u2013\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:40:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:40:57+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\udd47Realizimi yn\u00eb i D\u00ebrgimit t\u00eb Vazhduesh\u00ebm n\u00eb platform\u00ebn e klientit | ProHoster","description":"Ne n\u00eb True Engineering kemi vendosur procesin e d\u00ebrgimit t\u00eb vazhduesh\u00ebm t\u00eb p\u00ebrdit\u00ebsimeve n\u00eb serverat e klient\u00ebve dhe duam t\u00eb ndajm\u00eb k\u00ebt\u00eb p\u00ebrvoj\u00eb. Fillimisht ne zhvilluam nj\u00eb sistem online p\u00ebr klientin dhe e vendos\u00ebm n\u00eb klasterin ton\u00eb Kubernetes. Tani zgjidhja jon\u00eb me ngarkes\u00eb t\u00eb lart\u00eb ka kaluar n\u00eb platform\u00ebn e klientit, p\u00ebr t\u00eb cil\u00ebn ne kemi vendosur procesin plot\u00ebsisht automatike t\u00eb D\u00ebrgimit t\u00eb Vazhduesh\u00ebm. Fal\u00eb k\u00ebsaj, ne e p\u00ebrshpejtuam koh\u00ebn n\u00eb treg \u2013","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","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\udd47\u041d\u0430\u0448\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Continuous Deployment \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 | ProHoster","og:description":"\u041c\u044b \u0432 True Engineering \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0435\u0451 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Continuous Deployment. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 time-to-market \u2013","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:40:57+00:00","article:modified_time":"2019-10-31T18:40:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31377","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 05:52:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:18:39","updated":"2026-01-21 05:52:19","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\/31377","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=31377"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/31377\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/23342"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=31377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=31377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=31377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}