Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Tao amin'ny RIT 2019, Alexander Korotkov mpiara-miasa aminay nanao tatitra momba ny automatique ny fampandrosoana ao amin'ny CIAN: mba hanatsorana ny fiainana sy ny asa, mampiasa ny sehatra Integro manokana izahay. Manara-maso ny tsingerin'ny fiainan'ny asa izy io, manamaivana ny mpandrindra amin'ny asa mahazatra ary mampihena be ny isan'ny bibikely amin'ny famokarana. Amin'ity lahatsoratra ity, hameno ny tatitra nataon'i Alexander izahay ary hilaza aminao ny fomba nandehananay avy amin'ny script tsotra mba hanambatra ireo vokatra open source amin'ny alΓ lan'ny sehatray manokana sy ny ataon'ny ekipa automatique manokana.
 

Niveau aotra

"Tsy misy izany hoe zero level izany, tsy haiko izany"
Master Shifu avy amin'ny sarimihetsika "Kung Fu Panda"

Nanomboka 14 taona taorian'ny nananganana ny orinasa ny automatique tao amin'ny CIAN. Tamin'izany fotoana izany dia nisy olona 35 tao amin'ny ekipa fampandrosoana. Sarotra inoana, sa tsy izany? Mazava ho azy fa nisy ny automatique tamin'ny endrika sasany, fa ny lalana mitokana ho an'ny fampidirana mitohy sy ny fandefasana kaody dia nanomboka tamin'ny taona 2015. 

Tamin'izany fotoana izany, nanana monolith goavambe Python, C# ary PHP izahay, napetraka tamin'ny mpizara Linux/Windows. Mba hanaparitahana an'io biby goavam-be io, dia nanana andian-tsoratra izay nataontsika tanana. Nisy ihany koa ny fivorian’ny monolith, izay nitondra fanaintainana sy fijaliana noho ny fifandirana rehefa nampitambatra sampana, fanitsiana ny lesoka, ary fanamboarana β€œmiaraka amin’ny asa samy hafa amin’ny fanorenana”. Toy izao ny fomba fiasa notsorina:

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Tsy faly tamin'izany izahay, ary naniry ny hanorina dingana fanamboarana sy fametrahana azo averina, mandeha ho azy ary azo fehezina. Mba hanaovana izany, mila rafitra CI/CD izahay, ary nisafidy ny Teamcity maimaim-poana sy ny dikan-teny maimaim-poana an'i Jenkins izahay, satria niara-niasa tamin'izy ireo izahay ary samy nifanaraka taminay tamin'ny sehatry ny asa. Nisafidy ny Teamcity izahay ho vokatra vao haingana. Tamin'izany fotoana izany dia mbola tsy nampiasa maritrano microservice izahay ary tsy nanantena asa sy tetikasa marobe.

Tonga amin'ny hevitra momba ny rafitra misy antsika isika

Ny fampiharana ny Teamcity dia nanala ny ampahany amin'ny asa tanana ihany: ny sisa dia ny famoronana Pull Requests, ny fampiroboroboana ny olana amin'ny sata ao Jira, ary ny fifantenana ireo olana havoaka. Tsy nahazaka izany intsony ny rafitra Teamcity. Ilaina ny misafidy ny lalan'ny automation bebe kokoa. Nodinihinay ny safidy hiasa amin'ny script ao amin'ny Teamcity na hifindra amin'ny rafitra automatique an'ny antoko fahatelo. Saingy tamin'ny farany dia nanapa-kevitra izahay fa mila flexibility ambony indrindra, izay ny vahaolanay manokana ihany no afaka manome. Toy izany no nisehoan'ny dikan-teny voalohany amin'ny rafitra automatique anatiny antsoina hoe Integro.

Teamcity dia mifandray amin'ny automatique amin'ny ambaratongan'ny fanombohana ny fananganana sy ny fizotran'ny fametrahana, raha ny Integro kosa dia nifantoka tamin'ny automatique ambony indrindra amin'ny fizotran'ny fampandrosoana. Nilaina ny nampiarahana ny asa amin'ny olana ao Jira sy ny fanodinana ny kaody loharano mifandraika amin'ny Bitbucket. Tamin'ity dingana ity, nanomboka nanana ny rindranasany manokana i Integro amin'ny fiasana amin'ny asa isan-karazany. 

Noho ny fitomboan'ny automation amin'ny fizotran'ny raharaham-barotra dia nitombo ny isan'ny tetikasa sy ny fandehanana ao amin'ny Teamcity. Noho izany dia tonga ny olana vaovao: tsy ampy ny ohatra iray maimaim-poana amin'ny Teamcity (solontena 3 sy tetikasa 100), nanampy ohatra iray hafa izahay (solontena 3 sy tetikasa 100), avy eo iray hafa. Vokatr'izany dia niafara tamin'ny rafitra maromaro maromaro izahay, izay sarotra ny mitantana:

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Rehefa nipoitra ny fanontaniana momba ny tranga faha-4, dia tsapanay fa tsy afaka manohy ny fiainana toy izany izahay, satria tsy ao anatin'ny fetran'ny fetra intsony ny tontalin'ny vidin'ny fanohanana ireo tranga 4. Nipoitra ny fanontaniana momba ny fividianana Teamcity karama na ny fisafidianana Jenkins maimaim-poana. Nanao kajy momba ny tranga sy ny drafitra automatique izahay ary nanapa-kevitra fa hipetraka ao amin'ny Jenkins izahay. Taorian'ny herinandro vitsivitsy dia nifindra tany Jenkins izahay ary nanafoana ny aretin'andoha mifandray amin'ny fitazonana tranga maro ao amin'ny Teamcity. Noho izany, afaka nifantoka tamin'ny fampandrosoana ny Integro sy ny fanamboarana an'i Jenkins ho anay izahay.

Miaraka amin'ny fitomboan'ny automatique fototra (amin'ny endrika famoronana mandeha ho azy ny Pull Requests, fanangonana sy famoahana ny fandrakofana Code ary fisavana hafa), dia misy faniriana mafy ny handao ny famoahana boky araka izay azo atao ary hanome ity asa ity ho an'ny robots. Ankoatra izany, nanomboka nifindra tany amin'ny microservices ao anatin'ny orinasa ny orinasa, izay mitaky famoahana matetika, ary misaraka amin'ny tsirairay. Toy izany no nahatongavanay tsikelikely tamin'ny famoahana mandeha ho azy ny microservices (eo am-pamoahana ny monolith amin'izao fotoana izao izahay noho ny fahasarotan'ny dingana). Saingy, toy ny mahazatra, dia nisy fahasarotana vaovao nipoitra. 

Manao automatique ny fitiliana izahay

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Noho ny automatique ny famoahana dia nihaingana ny fizotran'ny fampandrosoana, amin'ny ampahany noho ny fandalovan'ny dingana fitsapana sasany. Ary izany dia nitarika ho amin'ny fahaverezan'ny kalitao vonjimaika. Toa tsinontsinona izany, saingy miaraka amin'ny fanafainganana ny famoahana dia ilaina ny manova ny fomba fampivoarana vokatra. Ilaina ny mieritreritra momba ny automatique amin'ny fitsapana, ny fametrahana ny andraikitra manokana (eto isika dia miresaka momba ny "fanekena ny hevitra ao an-doha", fa tsy ny sazy ara-bola) ny mpamorona ny code navoaka sy ny bibikely ao aminy, ary koa ny fanapahan-kevitra mamoaka/tsy mamoaka asa amin'ny alΓ lan'ny fametrahana mandeha ho azy. 

Ny fanafoanana ny olana momba ny kalitao dia tonga tamin'ny fanapahan-kevitra lehibe roa izahay: nanomboka nanao fitiliana canary izahay ary nampiditra fanaraha-maso mandeha ho azy ny ambadiky ny fahadisoana miaraka amin'ny valiny mandeha ho azy amin'ny tafahoatra. Ny vahaolana voalohany dia nahafahana nahita fahadisoana miharihary talohan'ny namoahana tanteraka ny fehezan-dalΓ na ho amin'ny famokarana, ny faharoa dia nampihena ny fotoana famaliana ny olana amin'ny famokarana. Mazava ho azy fa misy ny fahadisoana, saingy tsy mandany ny ankamaroan'ny fotoana sy ny ezaka ataontsika amin'ny fanitsiana azy ireo isika, fa amin'ny fampihenana azy ireo. 

Ekipa automatique

Manana mpiasa 130 izahay amin'izao fotoana izao, ary manohy izahay mitombo. Ny ekipa ho an'ny fampidirana mitohy sy fanaterana kaody (antsoina hoe ekipa Deploy sy Integration na DI) dia misy olona 7 ary miasa amin'ny lalana 2: fampandrosoana ny sehatra automation Integro sy DevOps. 

DevOps dia tompon'andraikitra amin'ny tontolo Dev/Beta ao amin'ny tranokalan'ny CIAN, ny tontolo iainana Integro, manampy ny mpamorona hamaha olana ary mamolavola fomba fiasa vaovao amin'ny fampitomboana ny tontolo iainana. Ny torolΓ lana fampandrosoana Integro dia mifandraika amin'ny Integro tenany sy ny serivisy mifandraika, ohatra, plugins ho an'ny Jenkins, Jira, Confluence, ary koa mamolavola fitaovana sy fampiharana fanampiny ho an'ny ekipa fampandrosoana. 

Ny ekipa DI dia miara-miasa amin'ny ekipan'ny Platform, izay mamolavola ny maritrano, tranomboky ary fomba fampandrosoana anatiny. Amin'izay fotoana izay ihany koa, afaka mandray anjara amin'ny automatique ny developer rehetra ao anatin'ny CIAN, ohatra, manao automatique micro mifanaraka amin'ny filan'ny ekipa na mizara hevitra mahafinaritra momba ny fomba hanatsarana ny automation.

Layer mofomamy automatique ao amin'ny CIAN

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Ny rafitra rehetra tafiditra amin'ny automation dia azo zaraina ho sosona maromaro:

  1. Ny rafitra ivelany (Jira, Bitbucket, sns.). Miara-miasa amin'izy ireo ny ekipan'ny fampandrosoana.
  2. sehatra Integrated. Matetika dia tsy miara-miasa aminy mivantana ny mpamorona, fa io no mitazona ny automatique rehetra.
  3. Serivisy fanaterana, orkestra ary fitadiavana (ohatra, Jeknins, Consul, Nomad). Miaraka amin'ny fanampian'izy ireo, mametraka kaody amin'ny mpizara izahay ary miantoka fa ny serivisy dia miara-miasa.
  4. Sosona ara-batana (servers, OS, logiciel mifandraika amin'izany). Ny kaodinay dia miasa amin'ity ambaratonga ity. Ity dia mety ho mpizara ara-batana na virtoaly (LXC, KVM, Docker).

Miorina amin'io foto-kevitra io, mizara faritra misy andraikitra ao anatin'ny ekipan'ny DI izahay. Ny ambaratonga roa voalohany dia eo amin'ny sehatry ny andraikitry ny fampandrosoana Integro, ary ny ambaratonga roa farany dia efa eo amin'ny sehatry ny andraikitry ny DevOps. Ity fisarahana ity dia ahafahantsika mifantoka amin'ny asa ary tsy manelingelina ny fifandraisana, satria mifanakaiky isika ary mifanakalo fahalalana sy traikefa tsy tapaka.

simba

Andao hifantoka amin'ny Integro ary hanomboka amin'ny fitambaran'ny teknolojia:

  • CentOS 7
  • Docker + Nomad + Consul + Vault
  • Java 11 (mijanona ao amin'ny Java 8 ny monolith Integro taloha)
  • Lohataona Boot 2.X + Lohataona Cloud Config
  • PostgreSql 11
  • Ny bitro MQ 
  • Apache Ignite
  • Camunda (tafiditra)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • Web UI: React (CSR) + MobX
  • SSO: Keycloak

Mifikitra amin'ny fitsipiky ny fampandrosoana microservice izahay, na dia manana lova amin'ny endrika monolith amin'ny dikan-teny voalohany amin'ny Integro aza izahay. Ny microservice tsirairay dia mandeha ao amin'ny fitoerany Docker manokana, ary ny serivisy dia mifampiresaka amin'ny alΓ lan'ny fangatahana HTTP sy hafatra RabbitMQ. Mifankahita amin'ny alalan'ny Consul ny microservices ary manao fangatahana aminy, mandalo fanomezan-dΓ lana amin'ny SSO (Keycloak, OAuth 2/OpenID Connect).

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Ho ohatra tena misy, dia diniho ny hifanerasera amin'i Jenkins, izay ahitana ireto dingana manaraka ireto:

  1. Ny microservice fitantanana ny workflow (antsoina hoe Flow microservice) dia te-hanamboatra trano ao Jenkins. Mba hanaovana izany dia mampiasa Consul izy mba hitadiavana ny IP: PORT an'ny microservice mba hampidirana an'i Jenkins (antsoina hoe Jenkins microservice) ary mandefa fangatahana asynchronous aminy hanombohana ny fananganana ao Jenkins.
  2. Rehefa avy nahazo fangatahana, ny Jenkins microservice dia mamorona sy mamaly miaraka amin'ny Job ID, izay azo ampiasaina hamantarana ny vokatry ny asa. Amin'izay fotoana izay ihany koa dia manetsika ny fananganana ao Jenkins amin'ny alΓ lan'ny antso REST API.
  3. Jenkins dia manatanteraka ny fananganana ary, rehefa vita, dia mandefa webhook miaraka amin'ny valin'ny famonoana ho an'ny microservice Jenkins.
  4. Ny Jenkins microservice, rehefa nahazo ny webhook, dia miteraka hafatra momba ny fahavitan'ny fanodinana fangatahana ary ampifandraisina amin'izany ny valin'ny famonoana. Ny hafatra novokarina dia alefa any amin'ny filaharana RabbitMQ.
  5. Amin'ny alΓ lan'ny RabbitMQ, tonga any amin'ny Flow microservice ny hafatra navoaka, izay mianatra momba ny vokatry ny fanodinana ny asany amin'ny alΓ lan'ny fampitoviana ny ID Joba avy amin'ny fangatahana sy ny hafatra voaray.

Ankehitriny dia manana microservices 30 eo ho eo isika, izay azo zaraina ho vondrona maromaro:

  1. Fitantanana ny configuration.
  2. Fampahalalana sy fifandraisana amin'ny mpampiasa (iraka, mailaka).
  3. Miasa miaraka amin'ny kaody loharano.
  4. Fampidirana amin'ny fitaovana fandefasana (jenkins, nomad, consul, sns.).
  5. Fanaraha-maso (famoahana, fahadisoana, sns.).
  6. Fampiasa amin'ny Internet (UI ho an'ny fitantanana ny tontolo fitsapana, fanangonana antontan'isa, sns.).
  7. Fampidirana amin'ny mpanara-maso asa sy rafitra mitovy.
  8. Fitantanana ny workflow ho an'ny asa samihafa.

Asa fizotry ny asa

Integro dia manao automatique hetsika mifandraika amin'ny tsingerin'ny asa. Amin'ny teny notsorina, ny tsingerin'ny fiainan'ny asa iray dia ho raisina ho toy ny fizotran'ny asa iray ao Jira. Ny fizotry ny fivoarantsika dia manana fiovaovan'ny workflow maromaro miankina amin'ny tetikasa, ny karazana asa ary ny safidy nofantenana amin'ny asa iray manokana. 

Andeha hojerentsika ny fomba fiasa izay matetika ampiasainay:

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Ao amin'ny kisary, ny fitaovana dia manondro fa ny tetezamita dia antsoina ho azy avy amin'ny Integro, raha ny sarin'olombelona kosa dia manondro fa ny fifindrana dia antsoina amin'ny tanana iray. Andeha hojerentsika ny lalana maromaro azon'ny asa atao amin'ity rindranasa ity.

Fitsapana an-tanana tanteraka amin'ny DEV+BETA tsy misy fitsapana canary (matetika dia izao no fomba hamoahanay monolith):

Avy amin'ny script mankany amin'ny sehatray manokana: ny fomba nanaovanay automatique ny fampandrosoana tao amin'ny CIAN

Mety misy fitambarana tetezamita hafa. Indraindray ny lalana hodiavin'ny olana dia azo fidina amin'ny alalan'ny safidy ao amin'ny Jira.

Hetsika asa

Andeha hojerentsika ny dingana lehibe atao rehefa mamindra asa amin'ny alΓ lan'ny workflow "DEV Testing + Canary Tests":

1. Ny mpamorona na ny PM no mamorona ny asa.

2. Ny mpamorona dia mandray ny asa mba hiasa. Rehefa vita, dia mivadika ho IN REVIEW.

3. Jira dia mandefa Webhook any amin'ny Jira microservice (miandraikitra ny fampidirana amin'ny Jira).

4. Ny Jira microservice dia mandefa fangatahana amin'ny serivisy Flow (tompon'andraikitra amin'ny workflows anatiny izay anaovana ny asa) hanombohana ny workflow.

5. Ao anatin'ny serivisy Flow:

  • Ny mpandinika dia voatendry amin'ilay asa (Mpiasa microservice izay mahafantatra ny zava-drehetra momba ny mpampiasa + Jira microservice).
  • Amin'ny alΓ lan'ny Source microservice (fantatra momba ny repository sy sampana izy, fa tsy miasa miaraka amin'ny code mihitsy), ny fikarohana dia natao ho an'ny repository misy sampana misy ny olanay (mba hanatsorana ny fikarohana, ny anaran'ny sampana dia mifanandrify amin'ny olana. laharana ao Jira). Matetika, ny asa dia tsy manana afa-tsy sampana iray ao amin'ny tahiry iray; Manamora ny fitantanana ny filaharana fametrahana izany ary mampihena ny fifandraisana eo amin'ny tahiry.
  • Ho an'ny sampana tsirairay hita dia ireto manaraka ireto ny filaharan'ny hetsika:

    i) Fanavaozana ny sampana master (Git microservice amin'ny fiasana amin'ny code).
    ii) Ny sampana dia voasakana amin'ny fanovana ataon'ny developer (Bitbucket microservice).
    iii) Natsangana ny fangatahana Pull ho an'ity sampana ity (Bitbucket microservice).
    iv) Misy hafatra momba ny fangatahana Pull vaovao alefa any amin'ny chat developer (Ampandreneso microservice raha miasa amin'ny fampahafantarana).
    v) Atomboka amin'ny DEV (Jenkins microservice ho an'ny fiaraha-miasa amin'i Jenkins) ny asa fananganana, fitsapana ary fametrahana.
    vi) Raha vita soa aman-tsara ny dingana rehetra teo aloha, dia apetraky ny Integro ao amin'ny Fangatahana Pull (Bitbucket microservice).

  • Ny Integro dia miandry ny fankatoavana ao amin'ny fangatahana Pull avy amin'ireo mpandinika voatondro.
  • Raha vantany vao voaray ny fankatoavana ilaina rehetra (anisan'izany ny fitsapana mandeha ho azy dia nandalo tsara), ny Integro dia mamindra ny asa amin'ny Test on Dev (Jira microservice).

6. Mizaha toetra ny asa. Raha tsy misy olana, dia afindra any amin'ny toeran'ny Ready For Build ny asa.

7. "Hita" ny Integro fa vonona ny hamotsorana ilay asa ary manomboka ny fandefasana azy amin'ny fomba canary (Jenkins microservice). Ny fahavononana amin'ny famoahana dia faritana amin'ny alΓ lan'ny fitsipika maromaro. Ohatra, ny asa dia ao amin'ny sata takiana, tsy misy hidin-trano amin'ny asa hafa, amin'izao fotoana izao dia tsy misy fampidinana mavitrika ity microservice ity, sns.

8. Afindra amin'ny sata Canary (Jira microservice) ny asa.

9. Jenkins dia manomboka asa fametrahana amin'ny alΓ lan'ny Nomad amin'ny fomba canary (matetika 1-3 tranga) ary mampandre ny serivisy fanaraha-maso ny famoahana (DeployWatch microservice) momba ny fametrahana.

10. Ny DeployWatch microservice dia manangona ny ambadika diso ary mamaly izany, raha ilaina. Raha mihoatra ny fiafaran'ny hadisoana (kajiana ho azy ny laharan'ny background), dia ampandrenesina amin'ny alΓ lan'ny microservice Notify ny mpamorona. Raha afaka 5 minitra dia tsy namaly ny developer (tsindrio ny Miverena na mijanona), dia atomboka ny famerenana mandeha ho azy amin'ny tranga canary. Raha tsy mihoatra ny lamosina, dia tsy maintsy manomboka amin'ny tanana ny fametrahana ny asa amin'ny Production ny developer (amin'ny fipihana bokotra iray ao amin'ny UI). Raha ao anatin'ny 60 minitra dia tsy navoakan'ny mpamorona ny fandefasana ny famokarana, dia haverina ihany koa ireo tranga canary noho ny antony fiarovana.

11. Aorian'ny fandefasana ny fandefasana amin'ny Production:

  • Afindra amin'ny sata famokarana (Jira microservice) ny asa.
  • Ny Jenkins microservice dia manomboka ny fizotran'ny fametrahana ary mampahafantatra ny DeployWatch microservice momba ny fametrahana.
  • Ny microservice DeployWatch dia manamarina fa ny kaontenera rehetra ao amin'ny Production dia nohavaozina (nisy ny tranga tsy nohavaozina daholo).
  • Amin'ny alΓ lan'ny microservice Notify dia alefa any amin'ny Production ny fampahafantarana momba ny valin'ny fametrahana.

12. Manana 30 minitra ny developer hanombohana ny famerenana ny asa iray avy amin'ny Production raha hita ny fitondran-tena microservice diso. Aorian'io fotoana io dia hatambatra ho azy ho master (Git microservice) ny asa.

13. Aorian'ny fampifangaroana mahomby amin'ny master dia hovana ho Closed (Jira microservice) ny satan'ny asa.

Ny diagram dia tsy miseho amin'ny antsipiriany tanteraka (raha ny marina dia misy dingana maromaro kokoa), fa mamela anao hanombana ny haavon'ny fampidirana amin'ny dingana. Tsy heverinay fa mety io tetika io ary manatsara ny fizotran'ny famoahana mandeha ho azy sy ny fanohanana ny fametrahana.

Inona no manaraka?

Manana drafitra lehibe ho an'ny fampandrosoana ny automatique izahay, ohatra, ny fanafoanana ny asa tanana mandritra ny famoahana monolith, ny fanatsarana ny fanaraha-maso mandritra ny fametrahana mandeha ho azy, ary ny fanatsarana ny fifandraisana amin'ny mpamorona.

Fa aleo mijanona eto aloha. Niresaka lohahevitra maro izahay tamin'ny famerenana automatique, ny sasany tsy voaresaka mihitsy, noho izany dia ho faly izahay hamaly fanontaniana. Miandry soso-kevitra momba ny zavatra hodinihina amin'ny antsipiriany izahay, soraty ao amin'ny fanehoan-kevitra.

Source: www.habr.com

Add a comment