{"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":"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/965f1944c95e2020bec512a05d980a32.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRIT 2019 meie kolleeg Aleksandr Korotkov tegi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=0wvUyjexoIg\">aruanne<\/a><\/noindex> esitluse arenduse automatiseerimisest CIANis: elu ja t\u00f6\u00f6 lihtsustamiseks kasutame oma platvormi Integro. See j\u00e4lgib \u00fclesannete eluts\u00fcklit, vabastab arendajaid rutiinsetest toimingutest ja v\u00e4hendab m\u00e4rgatavalt bugide arvu tootmisj\u00e4rgus. Selles postituses t\u00e4iendame Aleksandri ettekannet ja r\u00e4\u00e4gime, kuidas l\u00e4bisime teekonna lihtsatest skriptidest open source toodete \u00fchendamise kaudu oma platvormini ja millega tegeleb meie automatiseerimise erimeeskond.<br \/>\n\u00a0<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nulltase<\/h2>\n<p>\n<i><b>\u00abNulltaset pole, ma sellest ei tea\u00bb<\/b><br \/>\nShifu Meister filmist \u00abKung Fu Panda\u00bb<\/i><\/p>\n<p>Automatiseerimine CIANis algas 14 aastat p\u00e4rast ettev\u00f5tte asutamist. Sel ajal oli arendustiimis 35 inimest. Raske uskuda, eks? Muidugi, mingil kujul automatiseerimine siiski olemas oli, kuid eraldi suund pideva integreerimise ja koodi tarnimise osas hakkas kujunema 2015. aastal.\u00a0<\/p>\n<p>Siis oli meil suur monoliit Pythonist, C#-st ja PHP-st, mis oli paigaldatud Linuxi\/Windows serveritele. Selle koletise juurutamiseks oli meil k\u00e4sitsi k\u00e4ivitatav skriptide kogum. Samuti oli meil monoliidi kogumine, mis p\u00f5hjustas valu ja kannatusi, kuna harude liitmise konfliktid, defektide parandamised ja \u201eteise \u00fclesannete kogumiga koostamine\u201c valmistasid meeleh\u00e4rmi. \u00dcks lihtne protsess n\u00e4gi v\u00e4lja j\u00e4rgmine:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/03c4dd97e2ba0073bab1c33f6003a9ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeid see ei rahuldanud, ja me soovisime luua korduva, automatiseeritud ja hallatava koostamise ja juurutamise protsessi. Selle jaoks oli meil vaja CI\/CD s\u00fcsteemi, ning me valisime tasuta Teamcity ja tasuta Jenkins'i vahel, kuna olime nendega t\u00f6\u00f6tanud ja m\u00f5lemad pakkusid meile sobivaid funktsioone. Valisime Teamcity, kuna see tundus uuem toode. Siis me veel ei kasutanud mikroteenuste arhitektuuri ega lootnud suurele hulgale \u00fclesannetele ja projektidele.<\/p>\n<h2>J\u00f5uame oma s\u00fcsteemi idee juurde<\/h2>\n<p>\nTeamcity rakendamine v\u00e4hendas vaid osa k\u00e4sit\u00f6\u00f6st: alles j\u00e4i veel Pull Requestide loomine, \u00fclesannete edasiviimine Jira staatuste kaudu ja \u00fclesannete valimine v\u00e4ljalaskmiseks. Selle s\u00fcsteemiga Teamcity enam toime ei tulnud. Pidi valima edasise automatiseerimise tee. Kaalusime skriptide kasutamist Teamcitys v\u00f5i \u00fcleminekut kolmandate osapoolte automatiseerimiss\u00fcsteemidele. L\u00f5puks otsustasime, et vajalik on maksimaalne paindlikkus, mida suudab pakkuda vaid kohandatud lahendus. Nii sai alguse esimene versioon sisemisest automatiseerimiss\u00fcsteemist nimega Integro.<\/p>\n<p>Teamcity tegeleb automatiseerimisega protsesside k\u00e4ivitamise tasemel, nagu koostamine ja juurutamine, kuid Integro keskendus k\u00f5rgema taseme arendusprotsesside automatiseerimisele. Oli vajalik liita Jira \u00fclesannete t\u00f6\u00f6 koos Bitbucketis asuva l\u00e4htekoodiga. Sel hetkel hakkasid Integro sees arenema oma t\u00f6\u00f6vood erinevat t\u00fc\u00fcpi \u00fclesannete t\u00f6\u00f6tlemiseks.\u00a0<\/p>\n<p>T\u00e4nu \u00e4ritegevuse automatiseerimise suurenemisele on projektide ja run'ide arv Teamcitys kasvanud. Nii tuli p\u00e4evakorda uus probleem: \u00fcks tasuta Teamcity instants ei olnud piisav (3 agenti ja 100 projekti), lisasime veel \u00fche instantsi (veel 3 agenti ja 100 projekti), siis veel \u00fche. L\u00f5puks saime mitmest klastrist koosneva s\u00fcsteemi, mida oli keeruline hallata:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/d95565e01e70e31f6b139dfb9b9caf95.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui k\u00fcsiti neljanda instantsi kohta, m\u00f5istsime, et nii enam edasi elada ei saa, kuna nelja instantsi \u00fclalpidamiskulud ei mahtunud enam mingitesse raamidesse. Tuli k\u00fcsimus osta tasuline Teamcity v\u00f5i valida tasuta Jenkins. Tegime instantside ja automatiseerimise plaanide arvutused ja otsustasime, et elame Jenkinsiga. Paar n\u00e4dalat hiljem l\u00e4ksime \u00fcle Jenkinsile ja vabastasime end osaliselt Teamcity mitme instantsi haldamisega seotud muredest. Seet\u00f5ttu suutsime keskenduda Integro arendamisele ja Jenkins enda jaoks kohandamisele.<\/p>\n<p>P\u00f5hilise automatiseerimise (nt Pull Requestide automaatne loomine, koodi katvuse kogumine ja avaldamine ning muud kontrollid) kasvu t\u00f5ttu tekkis p\u00fcsiv soov v\u00e4hendada k\u00e4sitsi v\u00e4ljalaskeid ja anda see t\u00f6\u00f6 robotitele. Lisaks alustas ettev\u00f5te \u00fcleminekut mikroteenustele, mis n\u00f5udsid sagedasi ja eraldi v\u00e4ljalaseid. Nii j\u00f5udsime j\u00e4rk-j\u00e4rgult meie mikroteenuste automaatsete v\u00e4ljalasketeeni (monoliiti v\u00e4ljastame endiselt k\u00e4sitsi protsessi keerukuse t\u00f5ttu). Kuid nagu sageli juhtub, tekkis uus keerukus.\u00a0<\/p>\n<h2>Automatiseerime testimise<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/9518ee0956922c6eb615bdef068ac525.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00e4nu v\u00e4ljalaskmise automatiseerimisele on arendamisprotsessid kiirenema hakanud, osaliselt testimise teatud etappide vahelej\u00e4tmise arvelt. See on viinud ajutise kvaliteetkao tekkimiseni. K\u00f5lab labaselt, aga koos v\u00e4ljalaskmiste kiirenemisega tuli muuta ka toote arenduse metoodikat. Oli vajalik m\u00f5elda testimise automatiseerimisele, isikliku vastutuse m\u00e4\u00e4ramisele (siin on jutt \u201eidee peas hoidmisest\u201c, mitte rahalistest trahvidest) arendajatele nende kirjutatud koodi ja sealsete vigade eest, samuti otsusele \u00fclesande v\u00e4ljalaskmise\/mitte v\u00e4ljalaskmise osas automaatse juurutamise kaudu.\u00a0<\/p>\n<p>Kvaliteediprobleemide lahendamisel j\u00f5udsime kahe olulise lahenduseni: hakkasime l\u00e4biviima kanaritele katsed ja juurutame automaatset veamonitorimist automaatselt reageerimisega selle \u00fcletamisele. Esimene lahendus v\u00f5imaldas leida ilmseid vigu enne, kui kood j\u00f5uab tootmisj\u00e4rku, teine aga v\u00e4hendas reageerimisaega tootmisprotsessis. Vigu esineb, aga me kulutame suurema osa ajast ja j\u00f5ududest mitte parandamisele, vaid minimiseerimisele.\u00a0<\/p>\n<h2>Automatiseerimise meeskond<\/h2>\n<p>\nPraegu on meie ridades 130 arendajat ja me j\u00e4tkame <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/article\/469965\/\">kasvamist<\/a><\/noindex>. J\u00e4tkuva integratsiooni ja koodi kohaletoimetamise meeskond (edaspidi - Deploy and Integration meeskond v\u00f5i DI) koosneb seitsmest inimesest ja t\u00f6\u00f6tab kahes suunas: Integro automatiseerimise platvormi arendamine ja DevOps.\u00a0<\/p>\n<p>DevOps vastutab CIANi saidi Dev\/Beta keskkondade, Integro keskkondade eest, aitab arendajatel probleemide lahendamisel ning arendab uusi l\u00e4henemisviise keskkondade skaleerimiseks. Integro arendusmeeskond keskendub nii Integrole kui ka seotud teenustele, n\u00e4iteks Lisa- ja Lisade jaoks Jenkinsile, Jira, Confluence'ile, ning arendab ka abiteenuseid ja rakendusi arendajate meeskondadele.\u00a0<\/p>\n<p>DI meeskond teeb koost\u00f6\u00f6d Platvormi meeskonnaga, mis tegeleb ettev\u00f5tte sisese arengu arhitektuuri, raamatukogude ja arenduse l\u00e4henemisviiside v\u00e4ljat\u00f6\u00f6tamisega. Samuti saab iga arendaja CIANis panustada automatiseerimisse, n\u00e4iteks luua mikroomatiseerimise vastavalt meeskonna vajadustele v\u00f5i jagada h\u00e4id ideid automatiseerimise parandamiseks.<\/p>\n<h2>CIANi automatiseerimise kihiline kook<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/22dcd2d0cc283d53bdaac081885657f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f5ik automatiseerimises osalevad s\u00fcsteemid v\u00f5ib jagada mitmeks kihiks:<\/p>\n<ol>\n<li>V\u00e4line s\u00fcsteemid (Jira, Bitbucket jne). Nendega t\u00f6\u00f6tavad arendajate meeskonnad.\n<\/li>\n<li>Integro platvorm. Arendajad ei pruugi selle otseselt kasutada, kuid just tema toetab kogu automatiseerimise toimimist.\n<\/li>\n<li>Tarnimise, orkestreerimise ja avastamise teenused (n\u00e4iteks Jenkins, Consul, Nomad). Nende abil saadame koodi serveritesse ja tagame teenuste koost\u00f6\u00f6.\n<\/li>\n<li>F\u00fc\u00fcsiline kiht (serverid, operatsioonis\u00fcsteem, seotud tarkvara). Meie kood t\u00f6\u00f6tab just sellel tasemel. See v\u00f5ib olla nii f\u00fc\u00fcsiline server kui ka virtuaalne (LXC, KVM, Docker).\n<\/li>\n<\/ol>\n<p>\nSelle kontseptsiooni kohaselt jagame DI meeskonnas vastutuse alasid. Kaks esimest taset kuuluvad Integro arendussuunale, kaks viimast taset aga DevOpsi vastutusalasse. Selline jaotus v\u00f5imaldab keskenduda \u00fclesannetele ja ei sega koost\u00f6\u00f6d, kuna oleme \u00fcksteise l\u00e4hedal ja vahetame pidevalt teadmisi ning kogemusi.<\/p>\n<h2>Integro<\/h2>\n<p>\nKeskendume Integrole ning alustame tehnoloogilisest virnast:<\/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 peale)\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 (sisse embeditud)\n<\/li>\n<li>Grafana + Graphite + Prometheus + Jaeger + ELK\n<\/li>\n<li>Veebi liides: React (CSR) + MobX\n<\/li>\n<li>SSO: Keycloak\n<\/li>\n<\/ul>\n<p>\nMe j\u00e4rgime mikroteenuste arendamise p\u00f5him\u00f5tet, kuigi meil on legacy, mis on 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 Consul'i kaudu ja esitavad sellele p\u00e4ringu, l\u00e4bides autentimise SSO (Keycloak, OAuth 2\/OpenID Connect) kaudu.<\/p>\n<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/e7630c0bd62a40f397de1bf1c1097926.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nReaalse n\u00e4itena vaatleme koost\u00f6\u00f6d Jenkinsiga, mis koosneb j\u00e4rgmistest sammudest:<\/p>\n<ol>\n<li>T\u00f6\u00f6voo haldamise mikroteenus (edaspidi Flow-mikroteenus) soovib Jenkinsis koostamist alustada. Selleks leiab ta Consul'i kaudu Jenkinsiga integreerimise mikroteenuse (edaspidi Jenkins-mikroteenus) IP:PORT ja saadab sellele as\u00fcnkroonse p\u00e4ringu Jenkinsis koostamise alustamiseks.\n<\/li>\n<li>Jenkins-mikroteenus p\u00e4rast p\u00e4ringu saamist koostab ja tagastab Job ID, mille j\u00e4rgi saab hiljem tulemuse identifitseerida. Samuti k\u00e4ivitab ta Jenkinsis koostamise l\u00e4bi REST API kutse.\n<\/li>\n<li>Jenkins viib l\u00e4bi koostamise ja p\u00e4rast selle l\u00f5ppemist saadab webhook'i tulemustega tagasi Jenkins-mikroteenusele.\n<\/li>\n<li>Jenkins-mikroteenus, p\u00e4rast webhook'i saamist, koostab t\u00f6\u00f6tlemise l\u00f5ppetappide teate ja lisab sellele teostuse tulemused. Koostatud teade saadetakse RabbitMQ j\u00e4rjekorda.\n<\/li>\n<li>RabbitMQ kaudu j\u00f5uab avaldatud teade Flow-mikroteenusele, mis saab teada oma \u00fclesande t\u00f6\u00f6tlemise tulemusest, v\u00f5rreldes Job ID-d p\u00e4ringust ja saadud teates.\n<\/li>\n<\/ol>\n<p>\nPraegu on meil umbes 30 mikroteenust, mida saab jagada mitmeks grupiks:<\/p>\n<ol>\n<li>Konfigureerimise haldamine.\n<\/li>\n<li>Teabe edastamine ja suhtlemine kasutajatega (messengerid, e-post).\n<\/li>\n<li>T\u00f6\u00f6 l\u00e4htekoodiga.\n<\/li>\n<li>Integratsioon juurutust\u00f6\u00f6riistadega (jenkins, nomad, consul jne).\n<\/li>\n<li>J\u00e4lgimine (v\u00e4ljalasked, vead jne).\n<\/li>\n<li>Veebit\u00f6\u00f6riistad (kasutajaliides testkeskkondade haldamiseks, statistika kogumiseks jne).\n<\/li>\n<li>Integratsioon \u00fclesannej\u00e4lgijate ja sarnaste s\u00fcsteemidega.\n<\/li>\n<li>T\u00f6\u00f6voo haldamine erinevate \u00fclesannete jaoks.\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>\u00dclesande t\u00f6\u00f6voog<\/h2>\n<p>\nIntegro automatiseerib \u00fclesande eluts\u00fckliga seotud toimingud. Lihtsustatult m\u00f5istame \u00fclesande eluts\u00fcklina Jira t\u00f6\u00f6voogu. Meie arendusprotsessides on s\u00f5ltuvalt projektist, \u00fclesande t\u00fc\u00fcbist ja konkreetses \u00fclesandes valitud valikutest mitu t\u00f6\u00f6voo varianti.\u00a0<\/p>\n<p>Vaadakem t\u00f6\u00f6voogu, mida kasutame k\u00f5ige sagedamini:<\/p>\n<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/62555be6bab024dd30f3cf70d4fe3cba.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiagrammil n\u00e4itab hammasratas, et \u00fcleminek toimub automaatselt Integro poolt, samal ajal kui inimese kujuke t\u00e4hendab, et \u00fcleminek toimub k\u00e4sitsi inimese poolt. Vaadakem mitmeid teid, mille kaudu \u00fclesanne v\u00f5ib selles t\u00f6\u00f6voos liikuda.<\/p>\n<p>T\u00e4ielik k\u00e4sitsi testimine DEV+BETA ilma kanarakkude testideta (tavaliselt nii v\u00e4ljastame monoliiti):<\/p>\n<p><img decoding=\"async\" alt=\"Koodidelt oma platvormini: kuidas me automatisime arendust CIANis\" src=\"\/wp-content\/uploads\/2020\/01\/775528862e14817dff5f69db6de654dd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSamas v\u00f5ivad olla ka teised \u00fclemiste kombinatsioonid. M\u00f5nikord saab valida, milliseid teid \u00fclesanne j\u00e4rgib, Jira valikute kaudu.<\/p>\n<h2>\u00dclesande liikumine<\/h2>\n<p>\nVaadakem p\u00f5hietappe, mis t\u00e4idetakse \u00fclesande liikumisel t\u00f6\u00f6voos \"Testimine DEV + kanarakkude testid\":<\/p>\n<p>1. Arendaja v\u00f5i PM loob \u00fclesande.<\/p>\n<p>2. Arendaja v\u00f5tab \u00fclesande t\u00f6\u00f6le. P\u00e4rast l\u00f5petamist viib ta selle olekusse IN REVIEW.<\/p>\n<p>3. Jira saadab Webhooki Jira mikroteenusele (mis vastutab Jira integreerimise eest).<\/p>\n<p>4. Jira-mikrosvc saadab p\u00e4ringu Flow-teenusele (vastutab sisemiste t\u00f6\u00f6voogude eest, milles t\u00f6\u00f6 toimub) t\u00f6\u00f6voo k\u00e4ivitamiseks.<\/p>\n<p>5. Flow-teenuse sees:<\/p>\n<ul>\n<li>M\u00e4\u00e4ratakse \u00fclesande \u00fclevaatajad (Users-mikrosvc, mis teab k\u00f5ike kasutajatest + Jira-mikrosvc).<\/li>\n<li>Source-mikrosvc kaudu (teab reposid ja harudest, kuid ei t\u00f6\u00f6ta koodiga) otsitakse reposid, kus on meie \u00fclesande haru (otsingu lihtsustamiseks haru nimi vastab Jira \u00fclesande numbrile). Enamasti on \u00fclesandel vaid \u00fcks haru \u00fches repos, mis lihtsustab juurdep\u00e4\u00e4su haldamist ja v\u00e4hendab reposide vahelist seotust.<\/li>\n<li>Iga leitud haru jaoks teostatakse j\u00e4rgmine tegevuste j\u00e4rjestus:\n<p> i) Master-haru \u00fchtlustamine (Git-mikrosvc koodi t\u00f6\u00f6tlemiseks).<br \/>\n ii) Haru lukustatakse muudatuste eest arendaja poolt (Bitbucket-mikrosvc).<br \/>\n iii) Loome Pull Request'i sellele harule (Bitbucket-mikrosvc).<br \/>\n iv) Saadetakse teade uue Pull Request'i kohta arendajate vestlustesse (Notify-mikrosvc teavituste t\u00f6\u00f6tlemiseks).<br \/>\n v) Alustatakse \u00fclesande ehitamist, testimist ja juurutamist DEV-is (Jenkins-mikrosvc Jenkinsiga t\u00f6\u00f6tamiseks).<br \/>\n vi) Kui k\u00f5ik eelnevad punktid on edukalt l\u00f5petatud, siis Integro annab oma Approve Pull Requestis (Bitbucket-mikroteenus).<\/li>\n<li>Integro ootab Approve'i Pull Requestis m\u00e4\u00e4ratud \u00fclevaatajatelt.<\/li>\n<li>Kui k\u00f5ik vajalikud Approve'id on saadud (sealhulgas automaatsete testide positiivne l\u00e4bimine), viib Integro \u00fclesande staatuse Test on Dev (Jira-mikroteenus).<\/li>\n<\/ul>\n<p>\n6. Testijad teostavad \u00fclesande testimise. Kui probleeme ei ole, muudavad nad \u00fclesande staatuseks Ready For Build.<\/p>\n<p>7. Integro \"n\u00e4eb\", et \u00fclesanne on valmis v\u00e4lja andmiseks, ja k\u00e4ivitab selle deploy kanarie re\u017eiimis (Jenkins-mikroteenus). Valmidus v\u00e4ljaandmiseks m\u00e4\u00e4ratakse reeglite kogumi p\u00f5hjal. N\u00e4iteks peab \u00fclesanne olema sobivas staatuses, teisi \u00fclesandeid ei tohi blokeerida, aktiivseid v\u00e4ljat\u00f6\u00f6tamisi selle mikroteenuse osas ei tohi hetkel olla jne.<\/p>\n<p>8. \u00dclesanne muudetakse staatuseks Canary (Jira-mikroteenus).<\/p>\n<p>9. Jenkins k\u00e4ivitab l\u00e4bi Nomad \u00fclesande v\u00e4ljat\u00f6\u00f6tamise kanarie re\u017eiimis (tavaliselt 1-3 instantsi) ja teavitab v\u00e4ljat\u00f6\u00f6tamisest teenust, mis j\u00e4lgib v\u00e4ljalaskmisi (DeployWatch-mikroteenus).<\/p>\n<p>10. DeployWatch mikroteenus kogub veateateid ja reageerib, kui see on vajalik. Kui veateateid on liiga palju (norm arvutatakse automaatselt), teavitatakse arendajaid Notify mikroteenuse kaudu. Kui arendaja ei reageeri 5 minuti jooksul (ei vajuta Revert v\u00f5i Stay), siis k\u00e4ivitatakse automaatne tagasi t\u00f5mbamine kanarootorite instantsidele. Kui veateateid pole, peab arendaja k\u00e4sitsi k\u00e4ivitama \u00fclesande juurutamise tootmisserverisse (vajutades nuppu kasutajaliideses). Kui arendaja ei k\u00e4ivita 60 minuti jooksul juurutamist tootmisserverisse, siis kanarootorite instantsid eemaldatakse ka turvalisuse kaalutlustel.<\/p>\n<p>11. P\u00e4rast juurutamise k\u00e4ivitamist tootmisserverisse:<\/p>\n<ul>\n<li>\u00dclesanne muudetakse tootmisstaatusesse (Jira mikroteenus).<\/li>\n<li>Jenkins mikroteenus k\u00e4ivitab juurutamisprotsessi ja teavitab DeployWatch mikroteenust.<\/li>\n<li>DeployWatch mikroteenus kontrollib, et k\u00f5ik konteinerid oleksid tootmisserveris uuendatud (on olnud juhtumeid, kus mitte k\u00f5ik uuendati).<\/li>\n<li>Notify mikroteenus saadab teate juurutamise tulemustest tootmisserveris.<\/li>\n<\/ul>\n<p>\n12. Arendajatel on 30 minutit aega, et k\u00e4ivitada \u00fclesande tagasiv\u00f5tmine tootmisest, kui mikroteenus k\u00e4itub ebanormaalselt. Kui see aeg m\u00f6\u00f6dub, sisestatakse \u00fclesanne automaatselt masterisse (Git-mikroteenus).<\/p>\n<p>13. P\u00e4rast eduka merge'i toimimist masterisse muutub \u00fclesande staatuseks Closed (Jira-mikroteenus).<\/p>\n<p>Schema ei pretendeeri t\u00e4ielikule detailsusele (reaalsuses on samme veel rohkem), kuid v\u00f5imaldab hinnata integreerimise astet protsessidesse. Me ei pea seda skeemi ideaaliks ja t\u00e4iustame automatiseerimisprotsesse ja juurutamist.<\/p>\n<h2>Mis edasi<\/h2>\n<p>\nMeil on suured plaanid automatiseerimise arendamiseks, n\u00e4iteks k\u00e4sitsi toimingute l\u00f5petamine monoliitide juurutamise ajal, automaatse juurutamise k\u00e4igus j\u00e4lgimise parandamine, arendajatega suhtlemise t\u00e4iustamine.<\/p>\n<p>Kuid j\u00e4\u00e4me siinkohal peatuma. Paljusid automatiseerimise \u00fclevaate teemasid oleme katnud pinnalt, m\u00f5nedest pole \u00fcldse r\u00e4\u00e4kinud, seega vastame hea meelega k\u00fcsimustele. Ootame ettepanekuid, mida \u00fcksikasjalikumalt 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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 CIANis | ProHoster","description":"RIT 2019 konverentsil esitas meie kolleeg Aleksandr Korotkov ettekande arendusautomaatika kohta CIANis: elu ja t\u00f6\u00f6 lihtsustamiseks kasutame oma platvormi Integro. See j\u00e4lgib \u00fclesannete eluts\u00fcklit, vabastab arendajad rutiinsetest toimingutest ja v\u00e4hendab m\u00e4rgatavalt vigade arvu tootmisprotsessis. Selles postituses t\u00e4iustame Aleksandri ettekannet ja r\u00e4\u00e4gime, kuidas liikuda lihtsatelt","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 \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","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"},"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}]}}