{"id":55870,"date":"2020-01-30T00:00:00","date_gmt":"2020-01-29T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian"},"modified":"2020-02-18T14:04:02","modified_gmt":"2020-02-18T11:04:02","slug":"ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian","title":{"rendered":"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/965f1944c95e2020bec512a05d980a32.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRIT 2019 toimus meie kolleegi Aleksandr Korotkovi ettekanne <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=0wvUyjexoIg\">ettekanne<\/a><\/noindex> arenduse automatiseerimisest CIANis: elu ja t\u00f6\u00f6 lihtsustamiseks kasutame oma platvormi Integro. See j\u00e4lgib \u00fclesannete eluts\u00fcklit, vabastab arendajad rutiinsetest toimingutest ja v\u00e4hendab oluliselt tootmisvigade arvu. Selles postituses t\u00e4iendame Aleksandri ettekannet ja r\u00e4\u00e4gime, kuidas me liikusime lihtsatest skriptidest open source toodete integreerimise kaudu oma platvormini ning milles meie eraldiseisev automatiseerimise meeskond tegeleb.<br \/>\n\u00a0<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nulltase<\/h2>\n<p>\n<i><b>\u201eNulltaset ei ole, ma ei tea midagi sellisest\u201c<\/b><br \/>\nMeister Shifu filmist \u201eKung Fu Panda\u201c<\/i><\/p>\n<p>CIANis sai automatiseerimine alguse 14 aastat p\u00e4rast ettev\u00f5tte asutamist. Toona oli arendusmeeskonnas 35 inimest. Raske uskuda, eks? Loomulikult mingil moel automatiseerimine ikkagi eksisteeris, kuid pideva integreerimise ja koodi juurutamise eriline suund hakkas kujunema just 2015. aastal.\u00a0<\/p>\n<p>Sel ajal oli meil suur monoliit Pythonis, C#-is ja PHP-s, mis t\u00f6\u00f6tas Linuxi\/Windosi serverites. Selle hiiglasliku deploimiseks oli meil k\u00e4sitsi k\u00e4ivitatav skriptide kogum. Samuti oli olemas monoliidi kokkupanek, mis p\u00f5hjustas valu ja kannatusi haru \u00fchinemise konfliktide, defektide parandamise ja \u201eteise \u00fclesannete kogumi koostamisprotsessis\u201c t\u00f5ttu. Lihtsustatult n\u00e4gi protsess v\u00e4lja nii:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/03c4dd97e2ba0073bab1c33f6003a9ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee ei rahuldanud meid ning soovisime luua korduvat, automatiseeritud ja hallatavat s\u00fcsteemi kokkupanekuks ja deploimiseks. Selleks vajasime CI\/CD s\u00fcsteemi ja valisime tasuta Teamcity versiooni ja tasuta Jenkins'i vahel, kuna olime nendega varem t\u00f6\u00f6tanud ja m\u00f5lemad sobisid meie funktsioonide komplektiga. Valisime Teamcity, kuna see oli uuem toode. Toona ei kasutanud me veel mikroteenuste arhitektuuri ega lootnud suurele \u00fclesannete ja projektide hulgale.<\/p>\n<h2>Me j\u00f5uame ideeni oma s\u00fcsteemist<\/h2>\n<p>\nTeamcity k\u00e4ivitamine v\u00e4hendas ainult osa k\u00e4sitsi tehtavast t\u00f6\u00f6st: j\u00e4\u00e4nud on veel Pull Requestide loomine, \u00fclesannete edendamine Jira staatustes ja \u00fclesannete valimine v\u00e4ljaande jaoks. Sellega Teamcity enam toime ei tulnud. Oli vaja valida edasise automatiseerimise tee. Me vaatasime v\u00f5imalusi skriptide kasutamiseks Teamcitys v\u00f5i kolmandate osapoolte automatiseerimiss\u00fcsteemide suunas. Kuid l\u00f5puks otsustasime, et vajame maksimaalset paindlikkust, mida pakub ainult meie enda lahendus. Nii s\u00fcndis esimene versioon sisemisest automatiseerimiss\u00fcsteemist nimega Integro.<\/p>\n<p>Teamcity tegeleb automatiseerimisega ehitamis- ja paigaldusprotsesside tasemel, samas kui Integro keskendub k\u00f5rgema taseme arendusprotsesside automatiseerimisele. Oli vaja siduda t\u00f6\u00f6 Jira \u00fclesannetega Bitbucketis olevate seotud allika-koodide t\u00f6\u00f6tlemisega. Selle etapi jooksul hakkasid Integro sees tekkima oma t\u00f6\u00f6vood erinevat t\u00fc\u00fcpi \u00fclesannete k\u00e4sitlemiseks.\u00a0<\/p>\n<p>Automatiseerimise suurenemise t\u00f5ttu \u00e4riprotsessides kasvas projektide ja Teamcity jooksude arv. Nii ilmnes uus probleem: \u00fchest tasuta Teamcity instantsist ei piisanud (3 agenti ja 100 projekti), me lisasime veel \u00fche instantsi (veel 3 agenti ja 100 projekti), siis veel \u00fche. L\u00f5puks saime s\u00fcsteemi, mis koosnes mitmest klastrist ja millega oli raske hallata:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/d95565e01e70e31f6b139dfb9b9caf95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui tekkis k\u00fcsimus neljanda instantsi kohta, m\u00f5istsime, et sellisel kujul ei saa me enam elada, kuna nelja instantsi hooldamise kulud ei mahtunud enam mingitesse raamidesse. Tekkis k\u00fcsimus tasulise Teamcity soetamisest v\u00f5i tasuta Jenkinsile eelmisest. Tegime instantside ja automatiseerimisplaanide osas arvutused ja otsustasime, et elame Jenkinsiga. Paari n\u00e4dala p\u00e4rast kolisime Jenkinsile ja vabanesime osast peavalust, mis oli seotud mitme Teamcity instantsi hooldamisega. Seet\u00f5ttu saime keskenduda Integro arendamisele ja Jenkinssi kohandamisele enda jaoks.<\/p>\n<p>Baasi automatiseerimise kasvuga (n\u00e4iteks Pull Requestide automaatne loomine, koodi katvuse kogumine ja avaldamine ning muud kontrollid) tekkis p\u00fcsiv soov loobuda k\u00e4sitsi v\u00e4ljaannetest ja usaldada see t\u00f6\u00f6 robotitele. Lisaks alustas ettev\u00f5ttesisene \u00fcleminek mikroteenustele, mis n\u00f5udsid sagedasi v\u00e4ljaandeid, ja need pidid olema omavahel eraldi. Nii j\u00f5udsime j\u00e4rk-j\u00e4rgult oma mikroteenuste automaatseteni (monoliitset j\u00e4tkame praegu k\u00e4sitsi, kuna protsess on keeruline). Kuid nagu see tavaliselt juhtub, tekkis uus keerukus.\u00a0<\/p>\n<h2>Automatiseerime testimise<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/9518ee0956922c6eb615bdef068ac525.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00e4ljaannete automatiseerimise t\u00f5ttu on arendusprotsessid kiirenend, osaliselt isegi katsetamise teatud etappide vahele j\u00e4tmise arvelt. See on aga kaasa toonud ajutise kvaliteedi languse. See n\u00e4eb v\u00e4lja tavaline, kuid koos v\u00e4ljaannete kiirenemisega oli vaja muuta ka arendusmeetodoloogiat. Piisavalt tuli m\u00f5elda testimise automatiseerimise, arendaja isiklike vastutuste loomise (siin on jutt 'idee p\u00e4he omaksmisest', mitte rahalistest karistustest) ja \u00fclesande v\u00e4ljaandmise\/mitte v\u00e4ljaandmise otsuse tegemise \u00fcle automaatse juurutamise kaudu.\u00a0<\/p>\n<p>Kvaliteediprobleemide lahendamisel j\u00f5udsime kahte olulisse otsusesse: hakkasime viima l\u00e4bi kanaristestimist ja rakendasime automaatse vea j\u00e4lgimise koos automaatse reageerimisega selle \u00fcletamisel. Esimene otsus v\u00f5imaldas leida ilmseid vigu enne koodi t\u00e4ielikku j\u00f5udmist productionisse, teine v\u00e4hendas reageerimise aega productioni probleemidele. Vead ju esinevad, kuid me kulutame suurema osa ajast ja vaevast mitte parandamisele, vaid minimiseerimisele.\u00a0<\/p>\n<h2>Automatiseerimise meeskond<\/h2>\n<p>\nPraegu on meil 130 arendajat, ja me j\u00e4tkame <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/article\/469965\/\">kasvamist<\/a><\/noindex>. J\u00e4tkuva integreerimise ja koodi kohaletoimetamise meeskond (edaspidi - Deploy and Integration ehk DI meeskond) koosneb 7 inimesest ja t\u00f6\u00f6tab 2 suunas: automatiseerimise platvormi arendamine Integro ja DevOps.\u00a0<\/p>\n<p>DevOps vastutab CIANi Dev\/Beta keskkondade eest, Integro keskkondade ees, aitab arendajatel probleemide lahendamisel ning t\u00f6\u00f6tatakse v\u00e4lja uusi l\u00e4henemisviise keskkondade suurendamiseks. Integro arendussuund tegeleb nii Integroga kui ka k\u00fclgteenustega, n\u00e4iteks Jenkins, Jira, Confluence pistikprogrammidega, ning arendab t\u00f6\u00f6tajate jaoks abit\u00f6\u00f6riistu ja rakendusi.\u00a0<\/p>\n<p>DI meeskond t\u00f6\u00f6tab koos Platvormi meeskonnaga, mis tegeleb arhitektuuri, raamatukogude ja arendusuuringute v\u00e4ljat\u00f6\u00f6tamisega ettev\u00f5ttes. Samuti v\u00f5ivad k\u00f5ik arendajad CIANi sees panustada automatiseerimisse, n\u00e4iteks luua meeskonnale mikroautomaatika v\u00f5i jagada \u00e4geda idee, kuidas automatiseerimist veelgi paremaks muuta.<\/p>\n<h2>Automaatimise kihiline kook CIANis<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/22dcd2d0cc283d53bdaac081885657f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f5iki automatiseerimises osalevaid s\u00fcsteeme saab jagada mitmeks kihiks:<\/p>\n<ol>\n<li>V\u00e4lised s\u00fcsteemid (Jira, Bitbucket jne). Nende kallal t\u00f6\u00f6tavad arendusmeeskonnad.\n<\/li>\n<li>Integro platvorm. Arendajad ei t\u00f6\u00f6ta sellega tavaliselt otse, kuid just see toetab kogu automatiseerimise t\u00f6\u00f6d.\n<\/li>\n<li>Kohaletoimetamise, orkestreerimise ja avastamise teenused (n\u00e4iteks Jenkins, Consul, Nomad). Nende abil paigaldame koodi serveritesse ja tagame, et teenused omavahel t\u00f6\u00f6taksid.\n<\/li>\n<li>F\u00fc\u00fcsiline tase (serverid, operatsioonis\u00fcsteem, k\u00f5rvutarkvara). Sellel tasemel t\u00f6\u00f6tab meie kood. See v\u00f5ib olla nii f\u00fc\u00fcsiline server kui ka virtuaalne (LXC, KVM, Docker).\n<\/li>\n<\/ol>\n<p>\nV\u00e4ljaspool seda kontseptsiooni jagame DI meeskonna sees vastutuspiirkondi. Kaks esimest taset kuuluvad Integro arendussuuna vastutusele, samas kui kaks viimast taset kuuluvad DevOpsi vastutusele. Selline jaotus v\u00f5imaldab keskenduda \u00fclesannetele, takistamata koost\u00f6\u00f6d, kuna me oleme \u00fcksteisest l\u00e4hedal ja vahetame pidevalt teadmisi ja kogemusi.<\/p>\n<h2>Integro<\/h2>\n<p>\nKeskendume Integrole ja alustame tehnoloogilisest j\u00e4rjestusest:<\/p>\n<ul>\n<li>CentOs 7\n<\/li>\n<li>Docker + Nomad + Consul + Vault\n<\/li>\n<li>Java 11 (vana Integro monoliit j\u00e4\u00e4b Java 8-le)\n<\/li>\n<li>Spring Boot 2.X + Spring Cloud Config\n<\/li>\n<li>PostgreSql 11\n<\/li>\n<li>RabbitMQ\u00a0\n<\/li>\n<li>Apache Ignite\n<\/li>\n<li>Camunda (embedded)\n<\/li>\n<li>Grafana + Graphite + Prometheus + Jaeger + ELK\n<\/li>\n<li>Veebiliides: React (CSR) + MobX\n<\/li>\n<li>SSO: Keycloak\n<\/li>\n<\/ul>\n<p>\nMeie j\u00e4rgime mikroteenuste arendamise p\u00f5him\u00f5tet, kuigi meil on olemas ka p\u00e4randina varasema versiooni Integro monoliit. Iga mikroteenus t\u00f6\u00f6tab oma docker-konteineris, teenused suhtlevad omavahel HTTP-p\u00e4ringute ja RabbitMQ s\u00f5numite kaudu. Mikroteenused leiavad \u00fcksteist Consuli kaudu ja teevad sellele p\u00e4ringu, l\u00e4bides autoriseerimise SSO (Keycloak, OAuth 2\/OpenID Connect) kaudu.<\/p>\n<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/e7630c0bd62a40f397de1bf1c1097926.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nReaalse n\u00e4itena vaatame Jenkinsiga suhtlemist, mis koosneb j\u00e4rgmistest sammudest:<\/p>\n<ol>\n<li>Workflow haldamise mikroteenus (edaspidi Flow-mikroteenus) soovib Jenkinsis ehituse k\u00e4ivitada. Selleks leiab ta Consuli kaudu IP:PORT integreerimise mikroteenuse (edaspidi Jenkins-mikroteenus) ja saadab sellele as\u00fcnkroonse p\u00e4ringu Jenkinsis ehituse k\u00e4ivitamiseks.\n<\/li>\n<li>Jenkins-mikroteenus vormib ja tagastab p\u00e4rast p\u00e4ringu saamist t\u00f6\u00f6 ID, mille abil saab hiljem t\u00f6\u00f6 tulemusi tuvastada. Samuti k\u00e4ivitab ta Jenkinsis ehituse REST API kutse kaudu.\n<\/li>\n<li>Jenkins sooritab ehituse ja p\u00e4rast selle l\u00f5ppemist saadab webhooks tulemused Jenkins-mikroteenusele.\n<\/li>\n<li>Jenkins-mikroteenus, olles saanut webhooki, koostab s\u00f5numi p\u00e4ringu t\u00f6\u00f6tlemise l\u00f5petamisest ja lisab sellele t\u00f6\u00f6tlemise tulemused. Koostatud s\u00f5num saadetakse RabbitMQ j\u00e4rjekorda.\n<\/li>\n<li>RabbitMQ kaudu j\u00f5uab avaldatud s\u00f5num Flow-mikroteenusesse, mis saab teada oma \u00fclesande t\u00f6\u00f6tlemise tulemustest, v\u00f5rreldes p\u00e4ringust ja saadud s\u00f5numist p\u00e4rit t\u00f6\u00f6 ID-d.\n<\/li>\n<\/ol>\n<p>\nPraegu on meil umbes 30 mikroteenust, mille saab jagada mitmeks r\u00fchmaks:<\/p>\n<ol>\n<li>Konfiguratsioonide haldamine.\n<\/li>\n<li>Kasutajate informeerimine ja suhtlemine (messenger'id, e-post).\n<\/li>\n<li>T\u00f6\u00f6 l\u00e4htekoodiga.\n<\/li>\n<li>Integreerimine juurutust\u00f6\u00f6riistadega (jenkins, nomad, consul jne).\n<\/li>\n<li>J\u00e4lgimine (v\u00e4ljalaskeid, vigu jne).\n<\/li>\n<li>Veebiutiliidid (UI testkeskkondade haldamiseks, statistika kogumiseks jne).\n<\/li>\n<li>Integreerimine \u00fclesandej\u00e4lgijate ja sarnaste s\u00fcsteemidega.\n<\/li>\n<li>Workflow haldamine erinevate \u00fclesannete jaoks.\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>\u00dclesande workflow<\/h2>\n<p>\nIntegro automatiseerib \u00fclesande eluts\u00fckliga seotud toimingud. Lihtsustatult m\u00f5istame \u00fclesande eluts\u00fckli all Jira \u00fclesande workflow'd. Meie arendusprotsessides on mitmeid workflow variante, s\u00f5ltuvalt projektist, \u00fclesande t\u00fc\u00fcbist ja konkreetses \u00fclesandes valitud valikutest.\u00a0<\/p>\n<p>Vaatame workflow'd, mida kasutame k\u00f5ige sagedamini:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/62555be6bab024dd30f3cf70d4fe3cba.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSkeemil osutab hammasratta kaudu, et transition kutsub Integro automaatselt esile, samas kui inimese kujukene t\u00e4hendab, et transition kutsub esile inimene k\u00e4sitsi. Vaatame \u00fcle mitu teed, kuidas \u00fclesanne v\u00f5ib selle t\u00f6\u00f6voo raames kulgeda.<\/p>\n<p>T\u00e4ielik k\u00e4sitsi testimine DEV+BETA ilma kanar\u00f6stimise testideta (tavaliselt nii lanceerime monoliiti):<\/p>\n<p><img decoding=\"async\" alt=\"Koodidest oma platvormini: kuidas me automatiseerisime arendust CIAN-is\" src=\"\/wp-content\/uploads\/2020\/01\/775528862e14817dff5f69db6de654dd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSaavad olla ka teised transition kombinatsioonid. M\u00f5nikord saab \u00fclesande teed valida Jira valikute kaudu.<\/p>\n<h2>\u00dclesande liikumine<\/h2>\n<p>\nVaatame p\u00f5hietapid, mis toimuvad \u00fclesande liikumisel t\u00f6\u00f6voos \"Testimine DEV + kanar\u00f6stimise testid\":<\/p>\n<p>1. Arendaja v\u00f5i PM loob \u00fclesande.<\/p>\n<p>2. Arendaja v\u00f5tab \u00fclesande enda toimetusse. P\u00e4rast l\u00f5petamist viib ta selle olekusse IN REVIEW.<\/p>\n<p>3. Jira saadab Webhook'i Jira mikroteenusele (vastutab Jira integreerimise eest).<\/p>\n<p>4. Jira mikroteenus saadab Flow teenusele p\u00e4ringu (vastutab sisemiste t\u00f6\u00f6voogude eest, kus t\u00f6\u00f6 toimub), et k\u00e4ivitada t\u00f6\u00f6voog.<\/p>\n<p>5. Flow teenuse sees:<\/p>\n<ul>\n<li>M\u00e4\u00e4ratakse \u00fclesannetele \u00fclevaatajad (Kasutajad mikroteenus, mis teab k\u00f5ike kasutajatest + Jira mikroteenus).<\/li>\n<li>Source mikroteenuse kaudu (teab reposte ja harusid, kuid ei tee t\u00f6\u00f6d koodiga) otsitakse reposte, kus on meie \u00fclesande haru (otsingu lihtsustamiseks vastab haru nimi Jira \u00fclesande numbrile). Enamasti on \u00fclesandel vaid \u00fcks haru \u00fches repos, see lihtsustab juurdep\u00e4\u00e4su haldamist ja v\u00e4hendab reposte omavahelist s\u00f5ltuvust.<\/li>\n<li>Iga leitud haru puhul viiakse l\u00e4bi j\u00e4rgmised toimingud:\n<p> i) Master-haru \u00fchendamine (Git mikroteenus koodi t\u00f6\u00f6tlemiseks).<br \/>\n ii) Haru lukustamine muudatuste eest arendaja poolt (Bitbucket mikroteenus).<br \/>\n iii) Sellele harule luuakse Pull Request (Bitbucket mikroteenus).<br \/>\n iv) Uus Pull Requesti s\u00f5num saadetakse arendajate vestlustesse (Notify mikroteenus teavitamiseks).<br \/>\n v) K\u00e4ivitatakse \u00fclesande kogumine, testimine ja deploy DEV-is (Jenkins mikroteenus Jenkinsiga tegelemiseks).<br \/>\n vi) Kui k\u00f5ik eelnevad punktid on edukalt l\u00f5petatud, siis Integro lisab oma Ameerika \u00dchendriikide Pull Requesti (Bitbucket mikroteenus).<\/li>\n<li>Integro ootab m\u00e4\u00e4ratud \u00fclevaatajatelt Pull Requestis Ameerika \u00dchendriikide saamist.<\/li>\n<li>Niipea kui k\u00f5ik vajalikud Ameerika \u00dchendriigid on saadud (sealhulgas automaatsete testide positiivne l\u00e4bimine), muudab Integro \u00fclesande staatust Test on Dev (Jira mikroteenus).<\/li>\n<\/ul>\n<p>\n6. Testijad viivad \u00fclesande testimise l\u00e4bi. Kui probleeme pole, siis viivad nad \u00fclesande staatusesse Ready For Build.<\/p>\n<p>7. Integro \u201en\u00e4eb\u201c, et \u00fclesanne on valmis v\u00e4ljaandmiseks ja k\u00e4ivitab selle paigaldamise kanarere\u017eiimis (Jenkins-mikroteenus). Valmidus v\u00e4ljaandmiseks m\u00e4\u00e4ratakse reeglite kogumi j\u00e4rgi. N\u00e4iteks peab \u00fclesanne olema \u00f5igel staatustaseme, teisi \u00fclesandeid ei tohiks blokeerida, aktiivseid paigaldusi ei tohiks sellele mikroteenusele hetkel olla jne.<\/p>\n<p>8. \u00dclesanne viiakse staatusele Canary (Jira-mikroteenus).<\/p>\n<p>9. Jenkins k\u00e4ivitab Nomadi kaudu \u00fclesande paigaldamise kanarere\u017eiimis (tavaliselt 1-3 instantsi) ja teavitab paigaldusest versioonide j\u00e4lgimise teenust (DeployWatch-mikroteenus).<\/p>\n<p>10. DeployWatch-mikroteenus kogub vigade tausta ja reageerib sellele, kui on vaja. Kui vigade taust \u00fcletab normi (norm kalkuleeritakse automaatselt), teavitavad arendajad Notify-mikroteenus. Kui arendaja ei reageeri 5 minuti jooksul (vajutab Revert v\u00f5i Stay), k\u00e4ivitub automaatne kanarinstantside tagasip\u00f6\u00f6ramine. Kui taust ei ole \u00fcletatud, peab arendaja k\u00e4sitsi k\u00e4ivitama \u00fclesande paigaldamise tootmises (vajutades nuppu UI-s). Kui arendaja ei k\u00e4ivita tootmises paigaldust 60 minuti jooksul, tagastatakse ka kanarinstantsid, et tagada ohutus.<\/p>\n<p>11. P\u00e4rast tootmises paigaldamise k\u00e4ivitamist:<\/p>\n<ul>\n<li>\u00dclesanne viiakse staatusele Production (Jira-mikroteenus).<\/li>\n<li>Jenkins-mikroteenus k\u00e4ivitab paigaldusprotsessi ja teavitab paigaldusest DeployWatch-mikroteenus.<\/li>\n<li>DeployWatch-mikroteenus kontrollib, et k\u00f5iki konteinerite tootmises on uuendatud (on olnud juhtumeid, kus mitte k\u00f5ik uuendatakse).<\/li>\n<li>Notify-mikroteenus saadab teate paigaldamise tulemustest tootmises.<\/li>\n<\/ul>\n<p>\n12. Arendajatel on 30 minutit aega \u00fclesande tagasiv\u00f5tmiseks tootmisest, kui mikroteenuse vale k\u00e4itumine avastatakse. Selle aja m\u00f6\u00f6dudes on \u00fclesanne automaatselt sisse viidud masterisse (Git-mikroteenus).<\/p>\n<p>13. P\u00e4rast eduka sulandumise masterisse muutub \u00fclesande staatuseks Closed (Jira-mikroteenus).<\/p>\n<p>Skeem ei pretendeeri t\u00e4ielikule detaile, kuid v\u00f5imaldab hinnata integreerimise astet protsessidesse. Me ei pea seda skeemi ideaaliks ja parandame automaatsete v\u00e4ljaannete ja paigaldamisprotsesside protsesse.<\/p>\n<h2>Mis edasi<\/h2>\n<p>\nMeil on suured plaanid automatiseerimise arendamiseks, n\u00e4iteks k\u00e4sitsi operatsioonide l\u00f5petamine monoliitide v\u00e4ljaandmise ajal, j\u00e4lgimise parendamine automaatse paigaldamise puhul, arendajate koost\u00f6\u00f6 parandamine.<\/p>\n<p>Kuid j\u00e4\u00e4me siinkohal pidama. Oleme palju teemasid automatiseerimise \u00fclevaates pinnapealselt k\u00e4sitlenud, m\u00f5ned on j\u00e4\u00e4nud \u00fcldse k\u00f5rvale, seet\u00f5ttu vastame me r\u00f5\u00f5muga k\u00fcsimustele. Ootame ettepanekuid, mida p\u00f5hjalikult k\u00e4sitleda, kirjutage kommentaarides.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/486056\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430 \u0420\u0418\u0422 2019 \u043d\u0430\u0448 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u043f\u0440\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0426\u0418\u0410\u041d: \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0443, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Integro. \u041e\u043d\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0437\u0430\u0434\u0430\u0447, \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0433\u043e\u0432 \u0432 production. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u0434\u043e\u043a\u043b\u0430\u0434 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u0443\u0442\u044c \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55870","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430 \u0420\u0418\u0422 2019.\" \/>\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\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.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\u041e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435: \u043a\u0430\u043a \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u0426\u0418\u0410\u041d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430 \u0420\u0418\u0422 2019.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian\" \/>\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-01-29T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:02+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\udd47K\u00e4sitsi skriptidest oma platvormini: kuidas me automatiseerisime arenduse CYANis | ProHoster","description":"RIT 2019.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian","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\u041e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435: \u043a\u0430\u043a \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u0426\u0418\u0410\u041d | ProHoster","og:description":"\u041d\u0430 \u0420\u0418\u0422 2019.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ot-skriptov-k-sobstvennoj-platforme-kak-my-avtomatizirovali-razrabotku-v-tsian","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-01-29T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55870","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 19:35:40","updated":"2022-09-30 17:42:13","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\/55870","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=55870"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55870\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}