{"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\/et\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","title":{"rendered":"Meie pideva juurutamise (Continuous Deployment) lahendus kliendi platvormil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Meil on True Engineeringis seadistatud pideva uuenduste kohaletoimetamise protsess kliendi serveritesse ning soovime seda kogemust jagada.<\/p>\n<p>Alguses t\u00f6\u00f6tasime v\u00e4lja online-s\u00fcsteemi kliendile ja juurutame selle oma Kubernetes'i klastrisse. N\u00fc\u00fcd on meie suure koormusega lahendus kolinud kliendi platvormile, mille jaoks seadistasime t\u00e4iesti automatiseeritud pideva juurutamise protsessi. Selle tulemusena suutsime kiirendada time-to-market \u2013 muudatuste kohaletoimetamist tootmiskeskkonda. <\/p>\n<p>Selles artiklis r\u00e4\u00e4gime k\u00f5ikidest pideva juurutamise (CD) protsessi etappidest, st. uuenduste kohaletoimetamisest kliendi platvormile: <\/p>\n<ol>\n<li>kuidas see protsess algab, <\/li>\n<li>s\u00fcnkroneerimine kliendi Git-repositoriga,<\/li>\n<li>tagumise ja eesmise osa kokkuv\u00f5tmine,<\/li>\n<li>rakenduse automaatne juurutamine testkeskkonnas, <\/li>\n<li>automaatne juurutamine tootmisversioonis. <\/li>\n<\/ol>\n<p>\nProtsessi k\u00e4igus jagame seadistamise detaile.<\/p>\n<p><img decoding=\"async\" alt=\"Meie pideva juurutamise (Continuous Deployment) lahendus kliendi platvormil\" 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. CD algus<\/h3>\n<p>\nPidev juurutamine algab sellest, et arendaja paneb muudatused meie Git-repositorio v\u00e4lja andmise haru. <\/p>\n<p>Meie rakendus tugineb mikroteenuste arhitektuurile ja k\u00f5ik selle komponendid on talletatud \u00fches hoidlates. Seet\u00f5ttu kogutakse ja installitakse k\u00f5ik mikroteenused, isegi kui \u00fcks neist on muutunud. <\/p>\n<p>Oleme korraldanud t\u00f6\u00f6 \u00fches hoidlates mitmel p\u00f5hjusel: <\/p>\n<ul>\n<li>Arenduse mugavus \u2014 rakendus areneb aktiivselt, seega saab t\u00f6\u00f6tada otse kogu koodiga. <\/li>\n<li>\u00dchtne CI\/CD torustik, mis tagab, et rakendus kui tervik l\u00e4bib k\u00f5ik testid ja toimetatakse kliendi prod-keskkonda. <\/li>\n<li>V\u00e4listame versioonide segaduse \u2014 meil ei ole vaja hoida mikroteenuste versioonide kaarti ja m\u00e4\u00e4rata iga mikroteenuse jaoks oma konfiguratsiooni Helm'i skriptides.<\/li>\n<\/ul>\n<h3>2. S\u00fcnkroniseerimine kliendi l\u00e4htekoodi Git-repositooriumiga<\/h3>\n<p>\nTehtud muudatused s\u00fcnkroniseeritakse automaatselt kliendi Git-repositooriumiga. Seal on seadistatud rakenduse koostamine, mis k\u00e4ivitub p\u00e4rast haru uuendamist, ja juurutamine prod. M\u00f5lemad protsessid toimuvad nende keskkonnas Git-repositooriumist. <\/p>\n<p>Me ei saa t\u00f6\u00f6tada kliendi repositooriumiga otse, kuna meil on vaja oma arendus- ja testimiskeskkondi. Me kasutame selleks oma Git-repositooriumi, mis on s\u00fcnkroonitud nende Git-repositooriumiga. Kui arendaja paneb muudatused vastavasse meie repositooriumi haru, saadab GitLab need muudatused kohe kliendile.<\/p>\n<p><img decoding=\"async\" alt=\"Meie pideva juurutamise (Continuous Deployment) lahendus kliendi platvormil\" src=\"\/wp-content\/uploads\/2019\/04\/9e704f112649b77f0522fa60cfcfc2bb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e4rast seda tuleb teha kogumine. See koosneb mitmest etapist: tagak\u00fclje ja esik\u00fclje kogumisest, testimisest ja tootmiseks saatmisest.<\/p>\n<h3>3. Tagak\u00fclje ja esik\u00fclje kogumine<\/h3>\n<p>\nTagak\u00fclje ja esik\u00fclje kogumine on kaks paralleelset \u00fclesannet, mis t\u00e4idetakse GitLab Runneri s\u00fcsteemis. Algse kogumise konfigureerimine asub samas repositooriumis.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ce\/ci\/yaml\/\">YAML-skripti kirjutamise \u00f5petus GitLabis<\/a><\/noindex>.<\/p>\n<p>GitLab Runner toob koodi vajalikust repositooriumist, kogumist Java-rakendusele t\u00e4idab ja saadab selle Docker registry. Siin me kogume tagak\u00fclje ja esik\u00fclje, saame Docker-pildid, mille viime kliendi repositooriumisse. Docker-piltide haldamiseks kasutame <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/palantir\/gradle-docker\">Gradle'i plugina<\/a><\/noindex>.<\/p>\n<p>S\u00fcnkroniseerime oma piltide versioonid selle versiooniga, mis tuleb v\u00e4lja Dockerisse. Sujuva toimimise tagamiseks oleme sisse viinud m\u00f5ned seadistused:<\/p>\n<p>1. Testkeskkonna ja tootmis\u00fcksuste vahel ei toimu konteinerite uuesti koostamist. Oleme teinud parametreerimise, et sama konteiner saaks t\u00f6\u00f6tada erinevate seadistuste, muutujate ja teenustega nii testkeskkonnas kui ka tootmises ilma uuesti koostamata. <\/p>\n<p>2. Rakenduse uuendamiseks l\u00e4bi Helm tuleb m\u00e4\u00e4rata selle versioon. Meil on backend'i, frontend'i ja rakenduse uuendamine \u2013 see on kolm erinevat \u00fclesannet, seega on oluline kasutada igas kohas sama rakenduse versiooni. Selle \u00fclesande jaoks kasutame andmeid Git'i ajaloost, kuna meie K8S klastri ja rakenduse konfiguratsioon asuvad samas Git'i hoidis.<\/p>\n<p>Rakenduse versiooni saame k\u00e4su t\u00e4itmise tulemustest<br \/>\n<code>git describe --tags --abbrev=7<\/code>.<\/p>\n<h3>4. K\u00f5ikide muudatuste automaatne juurutamine testkeskkonnas (UAT) <\/h3>\n<p>\nJ\u00e4rgmine etapp selles koostamis skriptis on automaatne K8S klastri v\u00e4rskendamine. See toimub tingimusel, et k\u00f5ik rakendused on kokku pandud ja k\u00f5ik artefaktid on avaldatud Docker Registry's. P\u00e4rast seda k\u00e4ivitatakse testi keskkonna v\u00e4rskendamine.<\/p>\n<p>Klastri v\u00e4rskendamine k\u00e4ivitatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/helm.sh\/docs\/helm\/#helm-upgrade\">Helm Update<\/a><\/noindex>. Kui midagi ei l\u00e4he plaanip\u00e4raselt, tagastab Helm automaatselt k\u00f5ik oma muudatused. Selle t\u00f6\u00f6d ei pea j\u00e4lgima. <\/p>\n<p>Meie koostamisega kaasas on K8S klastri konfigureerimine. Seega j\u00e4rgmiseks sammuks v\u00e4rskendatakse seda: configMaps, deployments, services, secrets ja k\u00f5ik muud K8S konfiguratsioonid, mida oleme muutnud. <\/p>\n<p>P\u00e4rast seda k\u00e4ivitab Helm RollOut v\u00e4rskenduse rakendusele testikeskkonnas. Enne, kui rakendus viiakse tootmisettev\u00f5ttesse. See toimub selleks, et kasutajad saaksid k\u00e4sitsi kontrollida \u00e4rifunktsioone, mille me testikeskkonda v\u00e4lja panime.<\/p>\n<h3>5. K\u00f5ikide muudatuste automaatne juurutamine tootmisse <\/h3>\n<p>\nEt juurutada v\u00e4rskendust tootmiskeskkonda, peab lihtsalt vajutama \u00fchele nupule GitLab'is \u2014 ja konteinerid toimetatakse kohe tootmiskeskkonda.<\/p>\n<p>Sama rakendus saab t\u00f6\u00f6tada erinevates keskkondades \u2014 test- ja tootmises \u2014 ilma rekodeerimiseta. Kasutame samu artefakte, muutes rakenduses midagi, samas kui parameetrid m\u00e4\u00e4ratakse v\u00e4ljaspool. <\/p>\n<p>Rakenduse seadete paindlik parametriseerimine s\u00f5ltub keskkonnast, kus rakendus hakkab t\u00f6\u00f6tama. Oleme viinud k\u00f5ik keskkonna seadistused v\u00e4ljapoole: k\u00f5ik parametreeritakse K8S konfiguratsiooni ja Helm parameetrite kaudu. Kui Helm paigaldab kokkuv\u00f5tte testkeskkonda, rakendatakse sellele testparameetreid, tootmises aga tootmisparameetreid.<\/p>\n<p>K\u00f5ige keerulisem oli parametriseerida k\u00f5ik kasutatavad teenused ja muutujad, mis s\u00f5ltuvad keskkonnast, ning muuta need keskkonna muutujateks ja Helm parameetrite konfiguratsioonikirjelduseks. <\/p>\n<p>Rakenduse parameetrites kasutatakse keskkonna muutujaid. Nende v\u00e4\u00e4rtused m\u00e4\u00e4ratakse konteinerites K8S configmap'i abil, mis malleb Go-mallide abil. N\u00e4iteks saab keskkonna muutuja m\u00e4\u00e4rata domeeninime jaoks j\u00e4rgmiselt:<\/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 selles muutuja salvestatakse keskkonna nimi (prod, stage, UAT).<br \/>\n<b>.Values.app.properties.app_external_domain<\/b> \u2013 selles muutuja m\u00e4\u00e4rame failis .Values.yaml soovitud domeeni <\/p>\n<p>Rakenduse uuendamisel loob Helm configmap.yaml faili mallidest ja t\u00e4idab APP_EXTERNAL_DOMAIN v\u00e4\u00e4rtuse vastavalt sellele, millises keskkonnas rakenduse uuendamine k\u00e4ivitatakse. See muutuja m\u00e4\u00e4ratakse juba konteineris. Rakendus p\u00e4\u00e4seb sellele juurde, seega on igas rakenduse keskkonnas selle muutuja v\u00e4\u00e4rtus erinev. <\/p>\n<p>Suhteliselt hiljuti ilmus Spring Cloudisse K8S-i toetus, sealhulgas t\u00f6\u00f6 configMaps'iga: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spring-cloud\/spring-cloud-kubernetes\">Spring Cloud Kubernetes<\/a><\/noindex>. Kuna projekt areneb aktiivselt ja muutub kardinaalselt, ei saa me seda prod'is kasutada. Kuid j\u00e4lgime aktiivselt selle seisundit ja kasutame seda DEV konfiguratsioonides. Kui see stabiliseerub, l\u00fclitume keskkonna muutujate kasutamiselt selle peale.<\/p>\n<h3>Kokku<\/h3>\n<p>\nNii et pidev juurutamine on seadistatud ja t\u00f6\u00f6tab. K\u00f5ik uuendused toimuvad \u00fche nupuvajutusega. Muudatuste tarnimine tootmisringkonda on automaatne. Ja mis k\u00f5ige t\u00e4htsam, uuendused ei peata s\u00fcsteemi t\u00f6\u00f6d. <\/p>\n<p><img decoding=\"async\" alt=\"Meie pideva juurutamise (Continuous Deployment) lahendus kliendi platvormil\" src=\"\/wp-content\/uploads\/2019\/04\/07d609d9a40f644cfdad2bdb88652af2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Tuleviku plaanid: automaatne andmebaasi migratsioon<\/h3>\n<p>\nOleme m\u00f5elnud andmebaasi uuendamisele ja v\u00f5imalustele need muutused tagasi p\u00f6\u00f6rduda. L\u00f5ppude l\u00f5puks t\u00f6\u00f6tavad samal ajal kaks erinevat versiooni rakendusest: vana versioon t\u00f6\u00f6tab ja uus t\u00f5stetakse \u00fcles. Vana versioon l\u00fclitame v\u00e4lja alles siis, kui oleme kindlad, et uus versioon t\u00f6\u00f6tab. Andmebaasi migratsioon peab v\u00f5imaldama t\u00f6\u00f6tada m\u00f5lema rakenduse versiooniga. <\/p>\n<p>Seet\u00f5ttu ei saa me lihtsalt COLUMNi nime v\u00f5i teisi andmeid muuta. Kuid saame luua uue veeru, kopeerida andmed vanast veerust ja kirjutada k\u00e4ivitajad, mis andmete uuendamise korral samal ajal kopeerivad ja uuendavad need teises veerus. Ja p\u00e4rast uue rakendusversiooni edukat juurutamist, p\u00e4rast post-launch toe perioodi, saame vana veeru ja enam mitte vajalikud k\u00e4ivitajad eemaldada. <\/p>\n<p>Kui uus rakendusversioon t\u00f6\u00f6tab eba\u00f5igesti, saame naasta varasema versiooni juurde, sealhulgas varasema andmebaasi versiooni. \u00dches\u00f5naga, meie muudatused v\u00f5imaldavad t\u00f6\u00f6tada samaaegselt mitme rakenduse versiooniga. <\/p>\n<p>K\u00fcsimus on, kuidas planeeerime andmebaasi migreerimise automatiseerimist K8S t\u00f6\u00f6 jooksul, integreerides selle CD protsessiga. Jagame kindlasti seda kogemust Habras.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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\/et\/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\udd47 Meie pideva juurutamise lahendus kliendi platvormile | ProHoster","description":"True Engineeringus oleme seadnud \u00fcles pideva uuenduste kohaletoimetamise protsessi kliendi serveritesse ja tahame seda kogemust jagada. Alguses arendasime v\u00e4lja veebip\u00f5hise s\u00fcsteemi kliendile ja juurutame selle oma Kubernetes klastris. N\u00fc\u00fcd on meie k\u00f5rgelt koormatud lahendus kolinud kliendi platvormile, mille jaoks oleme seadnud \u00fcles t\u00e4ielikult automatiseeritud pideva juurutamise protsessi. T\u00e4nu sellele oleme kiirendanud turule mineku aega \u2013","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nasha-realizatsiya-continuous-deployment-na-platformu-zakazchika","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/31377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=31377"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/31377\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/23342"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=31377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=31377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=31377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}