Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Sa RIT 2019, gihimo sa among kauban nga si Alexander Korotkov pagtaho bahin sa automation sa kalamboan sa CIAN: aron pasimplehon ang kinabuhi ug trabaho, gigamit namo ang among kaugalingong Integro nga plataporma. Gisubay niini ang siklo sa kinabuhi sa mga buluhaton, gihupay ang mga nag-develop sa naandan nga mga operasyon ug hinungdanon nga pagkunhod sa gidaghanon sa mga bug sa produksiyon. Sa kini nga post, among kompletohon ang taho ni Alexander ug isulti kanimo kung giunsa kami gikan sa yano nga mga script hangtod sa paghiusa sa mga bukas nga gigikanan nga mga produkto pinaagi sa among kaugalingon nga plataporma ug kung unsa ang gibuhat sa among bulag nga koponan sa automation.
 

Zero nga lebel

"Wala'y butang nga zero level, wala ko kahibalo sa ingon nga butang"
Master Shifu gikan sa pelikula nga "Kung Fu Panda"

Ang automation sa CIAN nagsugod 14 ka tuig pagkahuman natukod ang kompanya. Niadtong panahona adunay 35 ka tawo sa development team. Lisod tuohan, di ba? Siyempre, ang automation naglungtad sa usa ka porma, apan ang usa ka bulag nga direksyon alang sa padayon nga panagsama ug paghatud sa code nagsugod sa pagporma sa 2015. 

Nianang panahona, kami adunay usa ka dako nga monolith sa Python, C# ug PHP, nga gipakatap sa mga server sa Linux/Windows. Aron ma-deploy kini nga monster, kami adunay usa ka set sa mga script nga among gipadagan nga mano-mano. Adunay usab ang asembliya sa monolith, nga nagdala sa kasakit ug pag-antos tungod sa mga panagbangi sa dihang gihiusa ang mga sanga, pagtul-id sa mga depekto, ug pagtukod pag-usab "uban ang lainlaing mga buluhaton sa pagtukod." Ang usa ka gipasimple nga proseso ingon niini:

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Wala kami nalipay niini, ug gusto namon nga maghimo usa ka mabalikbalik, awtomatiko ug madumala nga proseso sa pagtukod ug pag-deploy. Alang niini, nanginahanglan kami usa ka sistema sa CI / CD, ug gipili namon ang libre nga bersyon sa Teamcity ug ang libre nga bersyon sa Jenkins, tungod kay kami nagtrabaho kauban nila ug parehas nga nahiangay kanamo sa mga termino sa set sa mga gimbuhaton. Gipili namo ang Teamcity isip usa ka bag-o nga produkto. Niadtong panahona, wala pa kami mogamit sa arkitektura sa microservice ug wala magdahom nga daghang buluhaton ug proyekto.

Miabot kami sa ideya sa among kaugalingong sistema

Ang pagpatuman sa Teamcity nagtangtang lamang sa bahin sa manual nga trabaho: ang nahabilin mao ang paghimo sa Pull Requests, pag-promote sa mga isyu pinaagi sa status sa Jira, ug pagpili sa mga isyu alang sa pagpagawas. Ang sistema sa Teamcity dili na makasagubang niini. Gikinahanglan ang pagpili sa dalan sa dugang nga automation. Among gikonsiderar ang mga kapilian sa pagtrabaho sa mga script sa Teamcity o pagbalhin ngadto sa mga third-party nga sistema sa automation. Apan sa katapusan nakahukom kami nga kinahanglan namon ang labing taas nga pagka-flexible, nga ang among kaugalingon nga solusyon lamang ang makahatag. Ingon niini ang unang bersyon sa internal nga sistema sa automation nga gitawag og Integro.

Ang Teamcity naghisgot sa automation sa lebel sa paglansad sa mga proseso sa pagtukod ug pag-deploy, samtang ang Integro naka-focus sa top-level nga automation sa mga proseso sa kalamboan. Kinahanglan nga ikombinar ang trabaho sa mga isyu sa Jira sa pagproseso sa kaubang source code sa Bitbucket. Niini nga yugto, ang Integro nagsugod nga adunay kaugalingon nga mga agianan sa trabaho alang sa pagtrabaho sa mga buluhaton sa lainlaing mga lahi. 

Tungod sa pag-uswag sa automation sa mga proseso sa negosyo, ang gidaghanon sa mga proyekto ug dagan sa Teamcity misaka. Busa niabot ang usa ka bag-ong problema: ang usa ka libre nga pananglitan sa Teamcity dili igo (3 ka ahente ug 100 ka proyekto), midugang kami ug laing pananglitan (3 pa ka ahente ug 100 ka proyekto), unya lain pa. Ingon usa ka sangputanan, nakuha namon ang usa ka sistema sa daghang mga pungpong, nga lisud pagdumala:

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Sa dihang mitungha ang pangutana sa ika-4 nga higayon, nakaamgo kami nga dili na kami makapadayon sa pagpuyo nga sama niini, tungod kay ang kinatibuk-ang gasto sa pagsuporta sa 4 nga mga higayon wala na sa sulod sa bisan unsang mga limitasyon. Ang pangutana mitungha bahin sa pagpalit sa bayad nga Teamcity o pagpili sa libre nga Jenkins. Naghimo kami mga kalkulasyon sa mga higayon ug mga plano sa automation ug nakahukom nga kami magpuyo sa Jenkins. Pagkahuman sa pila ka semana, mibalhin kami sa Jenkins ug giwagtang ang pipila ka sakit sa ulo nga may kalabotan sa pagpadayon sa daghang mga higayon sa Teamcity. Busa, naka-focus kami sa pagpalambo sa Integro ug pag-customize sa Jenkins para sa among kaugalingon.

Uban sa pag-uswag sa batakang automation (sa porma sa awtomatik nga paghimo sa Pull Requests, pagkolekta ug pagmantala sa Code coverage ug uban pang mga tseke), adunay dakong tinguha nga biyaan ang mga manual release kutob sa mahimo ug ihatag kini nga trabaho ngadto sa mga robot. Dugang pa, ang kompanya nagsugod sa pagbalhin sa mga microservice sa sulod sa kompanya, nga nanginahanglan kanunay nga pagpagawas, ug gilain gikan sa usag usa. Mao kini ang paagi nga anam-anam namong naabot ang mga awtomatik nga pagpagawas sa among mga microservice (karon among gi-release ang monolith nga mano-mano tungod sa kakomplikado sa proseso). Apan, sama sa kasagarang mahitabo, mitungha ang bag-ong kakomplikado. 

Gi-automate namo ang pagsulay

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Tungod sa pag-automate sa mga pagpagawas, ang mga proseso sa pag-uswag mikusog, nga bahin tungod sa paglaktaw sa pipila nga mga yugto sa pagsulay. Ug kini misangpot sa usa ka temporaryo nga pagkawala sa kalidad. Morag gamay ra kini, apan kauban ang pagpadali sa mga pagpagawas, kinahanglan nga usbon ang pamaagi sa pagpauswag sa produkto. Kinahanglan nga hunahunaon ang bahin sa automation sa pagsulay, pagsilsil sa personal nga responsibilidad (dinhi naghisgot kami bahin sa "pagdawat sa ideya sa ulo", dili mga multa sa kwarta) sa developer alang sa gipagawas nga code ug mga bug sa sulod niini, ingon man ang desisyon sa buhian/dili buhian ang usa ka buluhaton pinaagi sa awtomatikong pag-deploy. 

Ang pagwagtang sa mga problema sa kalidad, miabut kami sa duha ka importante nga mga desisyon: nagsugod kami sa pagpahigayon sa canary testing ug gipaila ang awtomatik nga pag-monitor sa sayop nga background nga adunay awtomatik nga tubag sa sobra niini. Ang una nga solusyon nagpaposible nga makit-an ang klaro nga mga sayup sa wala pa ang code hingpit nga gipagawas sa produksiyon, ang ikaduha nakunhuran ang oras sa pagtubag sa mga problema sa produksiyon. Ang mga sayop, siyempre, mahitabo, apan atong gigugol ang kadaghanan sa atong panahon ug paningkamot dili sa pagkorihir niini, kondili sa pagpamenos niini. 

Automation Team

Karon kami adunay usa ka kawani sa 130 nga mga developer, ug nagpadayon kami sa pagtubo. Ang team alang sa padayon nga integrasyon ug paghatud sa code (gitawag dinhi nga Deploy and Integration o DI team) naglangkob sa 7 ka tawo ug nagtrabaho sa 2 ka direksyon: pagpalambo sa Integro automation platform ug DevOps. 

Ang DevOps maoy responsable sa Dev/Beta nga palibot sa CIAN site, ang Integro environment, nagtabang sa mga developers sa pagsulbad sa mga problema ug paghimo og bag-ong mga pamaagi sa pag-scale sa mga environment. Ang direksyon sa pagpalambo sa Integro naghisgot sa mismong Integro ug mga may kalabutan nga serbisyo, pananglitan, mga plugins para sa Jenkins, Jira, Confluence, ug nagpalambo usab sa mga auxiliary utilities ug mga aplikasyon alang sa mga development team. 

Ang DI team nakigtambayayong sa Platform team, nga nagpalambo sa arkitektura, mga librarya, ug mga pamaagi sa pagpalambo sa sulod. Sa samang higayon, ang bisan unsang developer sulod sa CIAN mahimong makatampo sa automation, pananglitan, paghimo og micro-automation nga mohaum sa mga panginahanglan sa team o mopaambit og cool nga ideya kon unsaon paghimo nga mas maayo ang automation.

Layer cake sa automation sa CIAN

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Ang tanan nga mga sistema nga nahilambigit sa automation mahimong bahinon sa daghang mga layer:

  1. Mga eksternal nga sistema (Jira, Bitbucket, ug uban pa). Ang mga development team nagtrabaho uban nila.
  2. Integro nga plataporma. Kasagaran, ang mga developer dili direkta nga nagtrabaho niini, apan kini ang nagpadayon sa tanan nga pagdagan sa automation.
  3. Mga serbisyo sa paghatud, orkestra ug pagdiskobre (pananglitan, Jeknins, Consul, Nomad). Sa ilang tabang, nag-deploy kami og code sa mga server ug gisiguro nga ang mga serbisyo molihok sa usag usa.
  4. Pisikal nga layer (mga server, OS, may kalabutan nga software). Ang among code naglihok sa kini nga lebel. Mahimo kini nga pisikal nga server o usa ka virtual (LXC, KVM, Docker).

Pinasukad niini nga konsepto, gibahin namon ang mga bahin sa responsibilidad sa sulod sa DI team. Ang una nga duha nga lebel naa sa lugar sa responsibilidad sa direksyon sa pag-uswag sa Integro, ug ang katapusan nga duha nga lebel naa na sa lugar sa responsibilidad sa DevOps. Kini nga panagbulag nagtugot kanamo sa pag-focus sa mga buluhaton ug dili makabalda sa interaksyon, tungod kay kami suod sa usag usa ug kanunay nga nagbayloay og kahibalo ug kasinatian.

Intact

Magpokus kita sa Integro ug magsugod sa stack sa teknolohiya:

  • CentOS 7
  • Docker + Nomad + Consul + Vault
  • Java 11 (ang karaang Integro monolith magpabilin sa Java 8)
  • Spring Boot 2.X + Spring Cloud Config
  • PostgreSql 11
  • RabbitMQ 
  • Apache Ignite
  • Camunda (nabutang)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • Web UI: React (CSR) + MobX
  • SSO: Keycloak

Nagsunod kami sa prinsipyo sa pagpalambo sa microservice, bisan kung kami adunay kabilin sa porma sa usa ka monolith sa usa ka sayo nga bersyon sa Integro. Ang matag microservice nagdagan sa kaugalingon nga sudlanan sa Docker, ug ang mga serbisyo nakigsulti sa usag usa pinaagi sa mga hangyo sa HTTP ug mga mensahe sa RabbitMQ. Ang mga microservice mangita sa usag usa pinaagi sa Consul ug mohangyo niini, nga gipasa ang pagtugot pinaagi sa SSO (Keycloak, OAuth 2/OpenID Connect).

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Isip usa ka tinuod nga kinabuhi nga pananglitan, ikonsiderar ang pagpakig-uban kang Jenkins, nga naglangkob sa mosunod nga mga lakang:

  1. Ang microservice sa pagdumala sa workflow (gitawag nga Flow microservice) gusto nga magpadagan sa usa ka pagtukod sa Jenkins. Aron mahimo kini, gigamit niya ang Consul aron makit-an ang IP: PORT sa microservice alang sa pag-integrate sa Jenkins (gitawag nga Jenkins microservice) ug nagpadala usa ka asynchronous nga hangyo niini aron masugdan ang pagtukod sa Jenkins.
  2. Human makadawat og hangyo, ang Jenkins microservice mohimo ug motubag gamit ang Job ID, nga magamit dayon sa pag-ila sa resulta sa trabaho. Sa parehas nga oras, gipalihok niini ang pagtukod sa Jenkins pinaagi sa usa ka tawag sa REST API.
  3. Gihimo ni Jenkins ang pagtukod ug, pagkahuman, nagpadala usa ka webhook nga adunay mga resulta sa pagpatuman sa microservice sa Jenkins.
  4. Ang Jenkins microservice, nga nakadawat sa webhook, nagmugna og mensahe mahitungod sa pagkompleto sa pagproseso sa hangyo ug gilakip ang mga resulta sa pagpatuman niini. Ang namugna nga mensahe ipadala sa RabbitMQ queue.
  5. Pinaagi sa RabbitMQ, ang gipatik nga mensahe nakaabot sa Flow microservice, nga nakakat-on mahitungod sa resulta sa pagproseso sa buluhaton niini pinaagi sa pagpares sa Job ID gikan sa hangyo ug sa nadawat nga mensahe.

Karon kami adunay mga 30 ka microservice, nga mahimong bahinon sa daghang mga grupo:

  1. Pagdumala sa pag-configure.
  2. Impormasyon ug interaksyon sa mga tiggamit (mensahero, mail).
  3. Nagtrabaho uban ang source code.
  4. Paghiusa sa mga gamit sa pag-deploy (jenkins, nomad, consul, ug uban pa).
  5. Pag-monitor (pagpagawas, mga sayup, ug uban pa).
  6. Mga gamit sa web (UI alang sa pagdumala sa mga palibot sa pagsulay, pagkolekta sa mga istatistika, ug uban pa).
  7. Paghiusa sa mga tracker sa buluhaton ug parehas nga mga sistema.
  8. Pagdumala sa workflow alang sa lainlaing mga buluhaton.

Mga buluhaton sa workflow

Ang Integro nag-automate sa mga kalihokan nga may kalabutan sa siklo sa kinabuhi sa buluhaton. Sa gipasimple nga termino, ang siklo sa kinabuhi sa usa ka buluhaton masabtan ingon nga dagan sa trabaho sa usa ka buluhaton sa Jira. Ang among mga proseso sa pag-uswag adunay daghang mga pagbag-o sa workflow depende sa proyekto, ang klase sa buluhaton ug ang mga kapilian nga gipili sa usa ka partikular nga buluhaton. 

Atong tan-awon ang workflow nga kanunay natong gigamit:

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Sa diagram, ang gear nagpakita nga ang transisyon awtomatik nga gitawag sa Integro, samtang ang numero sa tawo nagpakita nga ang transisyon gitawag nga mano-mano sa usa ka tawo. Atong tan-awon ang daghang mga agianan nga mahimo sa usa ka buluhaton sa kini nga dagan sa trabaho.

Bug-os nga manwal nga pagsulay sa DEV+BETA nga walay canary tests (kasagaran ingon niini ang atong pagpagawas sa usa ka monolith):

Gikan sa mga script hangtod sa among kaugalingon nga plataporma: kung giunsa namon awtomatiko nga pag-uswag sa CIAN

Mahimong adunay uban nga mga kombinasyon sa pagbalhin. Usahay ang dalan nga agian sa usa ka isyu mahimong mapili pinaagi sa mga kapilian sa Jira.

Lihok sa buluhaton

Atong tan-awon ang mga nag-unang lakang nga gihimo kung ang usa ka buluhaton molihok pinaagi sa "DEV Testing + Canary Tests" workflow:

1. Ang developer o PM nagmugna sa buluhaton.

2. Gibuhat sa developer ang buluhaton aron magtrabaho. Human makompleto, kini mobalhin ngadto sa IN REVIEW status.

3. Nagpadala si Jira og Webhook sa Jira microservice (responsable sa pag-integrate sa Jira).

4. Ang Jira microservice nagpadala ug hangyo ngadto sa Flow service (responsable sa internal nga mga workflow diin ang trabaho gihimo) aron masugdan ang workflow.

5. Sulod sa Flow nga serbisyo:

  • Ang mga tigrepaso gi-assign sa buluhaton (Users microservice nga nahibal-an ang tanan bahin sa mga tiggamit + Jira microservice).
  • Pinaagi sa Source microservice (nahibal-an niini ang bahin sa mga repositoryo ug mga sanga, apan wala magtrabaho sa code mismo), gihimo ang pagpangita alang sa mga repository nga adunay usa ka sanga sa among isyu (aron pasimplehon ang pagpangita, ang ngalan sa sanga nahiuyon sa isyu. numero sa Jira). Kasagaran, ang usa ka buluhaton adunay usa ra ka sanga sa usa ka tipiganan; gipasimple niini ang pagdumala sa pila sa pag-deploy ug gipamenos ang koneksyon tali sa mga repositoryo.
  • Alang sa matag nakit-an nga sanga, ang mosunod nga han-ay sa mga aksyon gihimo:

    i) Pag-update sa master branch (Git microservice alang sa pagtrabaho sa code).
    ii) Ang sanga gibabagan gikan sa mga pagbag-o sa developer (Bitbucket microservice).
    iii) Usa ka Pull Request ang gihimo alang niini nga sanga (Bitbucket microservice).
    iv) Usa ka mensahe bahin sa usa ka bag-ong Paghangyo sa Pagbitad gipadala sa mga chat sa developer (Pahibalo sa microservice alang sa pagtrabaho sa mga pahibalo).
    v) Ang paghimo, pagsulay ug pag-deploy sa mga buluhaton gisugdan sa DEV (Jenkins microservice alang sa pagtrabaho kauban si Jenkins).
    vi) Kung ang tanan nga nangaging mga lakang malampuson nga nahuman, nan ang Integro nagbutang sa Pag-apruba niini sa Pull Request (Bitbucket microservice).

  • Ang Integro naghulat sa Pag-apruba sa Paghangyo sa Pagbitad gikan sa gitudlo nga mga tigrepaso.
  • Sa diha nga ang tanan nga gikinahanglan nga mga pag-apruba nadawat (lakip ang automated nga mga pagsulay nga positibo nga milabay), ang Integro nagbalhin sa buluhaton ngadto sa Test on Dev (Jira microservice) status.

6. Gisulayan sa mga tester ang buluhaton. Kung wala’y mga problema, nan ang buluhaton gibalhin sa kahimtang sa Ready For Build.

7. Ang Integro "nakakita" nga ang buluhaton andam na alang sa pagpagawas ug nagsugod sa pag-deploy niini sa canary mode (Jenkins microservice). Ang pagkaandam alang sa pagpagawas gitino sa usa ka hugpong sa mga lagda. Pananglitan, ang buluhaton anaa sa gikinahanglan nga kahimtang, walay mga kandado sa ubang mga buluhaton, sa pagkakaron walay aktibong pag-upload niini nga microservice, ug uban pa.

8. Ang buluhaton gibalhin sa Canary status (Jira microservice).

9. Si Jenkins naglunsad og buluhaton sa pag-deploy pinaagi sa Nomad sa canary mode (kasagaran 1-3 ka higayon) ug nagpahibalo sa release monitoring service (DeployWatch microservice) mahitungod sa deployment.

10. Ang DeployWatch microservice mokolekta sa sayop nga background ug motubag niini, kon gikinahanglan. Kung ang background sa sayup milapas (ang pamatasan sa background awtomatik nga kalkulado), ang mga developer gipahibalo pinaagi sa Notify microservice. Kung pagkahuman sa 5 minuto ang developer wala motubag (gi-klik ang Revert o Pagpabilin), unya ang usa ka awtomatikong pag-rollback sa mga kaso sa canary gilusad. Kung ang background dili molapas, nan ang developer kinahanglan nga mano-mano nga maglunsad sa buluhaton deployment ngadto sa Production (pinaagi sa pag-klik sa usa ka buton sa UI). Kung sa sulod sa 60 minuto wala gilusad sa developer ang deployment sa Production, nan ang mga kanaryo nga mga instances ibalik usab alang sa mga hinungdan sa seguridad.

11. Human sa paglansad sa deployment sa Production:

  • Ang buluhaton gibalhin ngadto sa Production status (Jira microservice).
  • Gisugdan sa microservice sa Jenkins ang proseso sa pag-deploy ug gipahibalo ang microservice sa DeployWatch bahin sa pag-deploy.
  • Ang DeployWatch microservice nagsusi nga ang tanan nga mga sudlanan sa Production na-update (adunay mga kaso nga dili tanan na-update).
  • Pinaagi sa Notify microservice, usa ka pahibalo bahin sa mga resulta sa deployment gipadala ngadto sa Production.

12. Ang mga developer adunay 30 ka minuto aron magsugod sa pag-roll back sa usa ka buluhaton gikan sa Production kung ang sayup nga pamatasan sa microservice nakit-an. Pagkahuman niini nga oras, ang buluhaton awtomatik nga i-merge sa master (Git microservice).

13. Human sa usa ka malampuson nga paghiusa ngadto sa master, ang task status mausab ngadto sa Closed (Jira microservice).

Ang diagram wala magpakaaron-ingnon nga hingpit nga detalyado (sa pagkatinuod adunay daghan pa nga mga lakang), apan kini nagtugot kanimo sa pagtimbang-timbang sa lebel sa paghiusa sa mga proseso. Wala namo isipa kini nga laraw nga sulundon ug gipauswag ang mga proseso sa awtomatikong pagpagawas ug suporta sa pag-deploy.

Unsa ang sunod

Kami adunay dagkong mga plano alang sa pag-uswag sa automation, pananglitan, pagwagtang sa mga manual nga operasyon sa panahon sa pagpagawas sa monolith, pagpalambo sa pag-monitor atol sa awtomatik nga pag-deploy, ug pagpalambo sa interaksyon sa mga developers.

Apan mohunong ta dinhi sa pagkakaron. Gitabonan namon ang daghang mga hilisgutan sa pagrepaso sa automation sa taphaw, ang uban wala gyud mahikap, mao nga malipay kami nga motubag sa mga pangutana. Naghulat kami alang sa mga sugyot kung unsa ang itago sa detalye, isulat sa mga komento.

Source: www.habr.com

Idugang sa usa ka comment