I le RIT 2019, na faia e le matou paaga Alexander Korotkov
Ole maualuga
"E leai se mea e taʻu o le zero level, ou te le iloa se mea faapena"
Master Shifu mai le ata "Kung Fu Panda"
Otometi ile CIAN na amata ile 14 tausaga talu ona faʻavae le kamupani. I lena taimi e 35 tagata i le vaega o le atinaʻe. E faigata ona talitonuina, a ea? O le mea moni, o le masini na i ai i nisi tulaga, ae o se isi itu mo le faʻaauauina o le tuʻufaʻatasia ma le tuʻuina atu o tulafono na amata faʻaalia i le 2015.
I lena taimi, sa i ai a matou monolith tele o Python, C # ma PHP, faʻapipiʻiina i luga o Linux / Windows servers. Ina ia faʻapipiʻi lenei sauʻai, sa i ai se seti o tusitusiga na matou tamomoe ma le lima. Sa i ai foi le faʻapotopotoga o le monolith, lea na aumaia ai le tiga ma le mafatia ona o feeseeseaiga pe a tuʻufaʻatasia lala, faʻasaʻo faaletonu, ma toe fausia "ma se seti o galuega i le fausiaina." O se faiga faigofie e pei o lenei:
Matou te le'i fiafia i lenei mea, ma sa matou manana'o e fau se faiga e toe fai, otometi ma mafai ona fa'aogaina ma fa'agaioiina. Mo lenei mea, matou te manaʻomia se CI / CD system, ma matou filifili i le va o le free version of Teamcity ma le free version of Jenkins, talu ai sa matou galulue faʻatasi ma i latou ma fetaui uma i matou i tulaga o le seti o galuega. Na matou filifilia Teamcity o se oloa sili ona lata mai. I lena taimi, matou te leʻi faʻaogaina le faʻataʻitaʻiga microservice ma e leʻi faʻamoemoeina se numera tele o galuega ma galuega faatino.
Matou te oʻo mai i le manatu o la matou lava faiga
O le faʻatinoga o Teamcity na aveese naʻo se vaega o le galuega tusi lesona: o le mea o loʻo totoe o le fatuina o Talosaga Toso, faʻalauiloaina o mataupu i tulaga i Jira, ma le filifilia o mataupu mo le faʻamalolo. Ua le toe mafai e le Teamcity system ona taulimaina lenei mea. Sa tatau ona filifili le ala o le otometi atili. Na matou mafaufau i filifiliga mo le galue i tusitusiga i Teamcity poʻo le fesuiaʻi i faiga faʻaautomatika isi vaega. Ae i le faaiuga na matou filifili matou te manaʻomia le maualuga o le fetuutuunai, lea e naʻo matou lava fofo e mafai ona maua. O le auala lea na faʻaalia ai le faʻaaliga muamua o le masini masini i totonu e taʻua o Integro.
Teamcity e feagai ma masini i le tulaga o le faʻalauiloaina o le fausiaina ma le faʻapipiʻiina o faʻagasologa, ae o le Integro na taulaʻi i luga o le tulaga otometi o faiga atinaʻe. Na mana'omia le tu'ufa'atasia o galuega ma fa'afitauli i Jira ma le fa'agaioiina o fa'ailoga fa'apogai i Bitbucket. I lenei laʻasaga, na amata ona i ai i le Integro ana lava galuega mo le galue i galuega o ituaiga eseese.
Ona o le faʻateleina o masini i faiga faʻapisinisi, ua faʻateleina le numera o poloketi ma taʻavale i Teamcity. O lea na oo mai ai se faʻafitauli fou: e leʻi lava le tasi faʻataʻitaʻiga Teamcity (3 sui ma 100 poloketi), matou faʻaopoopoina le isi faʻataʻitaʻiga (3 isi sui ma 100 poloketi), ona sosoo ai lea ma le isi. O se taunuuga, na matou iʻu i se faiga o ni fuifui, lea sa faigata ona faʻatautaia:
Ina ua tulaʻi mai le fesili o se faʻataʻitaʻiga lona 4, na matou iloa ai e le mafai ona faʻaauau pea ona matou ola faʻapenei, ona o le aofaʻi o tau o le lagolagoina o faʻataʻitaʻiga 4 ua le o toe i totonu o soʻo se tapulaa. O le fesili na tulaʻi mai e uiga i le faʻatauina o le Teamcity totogi poʻo le filifilia o Jenkins e leai se totogi. Na matou faia fa'atusatusaga i taimi ma fuafuaga fa'aautomatika ma filifili ai o le a matou nonofo i Jenkins. Ina ua maeʻa ni nai vaiaso, na matou sui ia Jenkins ma faʻaumatia nisi o tiga o le ulu e fesoʻotaʻi ma le tausia o le tele o Teamcity taimi. O le mea lea, na mafai ai ona matou taulaʻi atu i le atinaʻeina o Integro ma faʻavasega Jenkins mo i matou lava.
Faatasi ai ma le tuputupu aʻe o masini faʻapitoa (i le tulaga o le fatuina otometi o Talosaga Toso, aoina ma le lolomiina o le Code coverage ma isi siaki), o loʻo i ai se manaʻoga malosi e lafoai faʻasalalauga tusi lesona i le tele e mafai ai ma tuʻuina atu lenei galuega i robots. E le gata i lea, na amata ona siitia atu le kamupani i microservices i totonu o le kamupani, lea e manaʻomia ai le faʻasaʻoloto soo, ma vavae ese mai le tasi ma le isi. O le auala lea na faasolosolo malie ai ona matou otometi le tatalaina o matou microservices (o loʻo matou tuʻuina atu nei le monolith ma le lima ona o le lavelave o le faagasologa). Ae, e pei ona masani ai, na tulaʻi mai se lavelave fou.
Matou te otometi su'ega
Ona o le otometi o faʻasalalauga, ua faʻavavevave faiga atinaʻe, o se vaega ona o le faaseʻeina o nisi o suʻega. Ma o lenei mea na mafua ai le leiloa le tumau o le lelei. E foliga fa'atauva'a, ae fa'atasi ai ma le fa'avavevave o fa'asalalauga, sa tatau ai ona sui le faiga o le atina'eina o oloa. Sa tatau ona mafaufau e uiga i le otometi o suʻega, faʻatupuina o le matafaioi a le tagata lava ia (o loʻo tatou talanoa e uiga i le "taliaina o le manatu i le ulu", ae le o sala tupe) a le tagata atiaʻe mo le faʻasaʻoina o le code ma bugs i totonu, faʻapea foʻi ma le filifiliga e fai. fa'asa'oloto/le fa'amatu'u se galuega e ala i le fa'apipi'iina otometi.
O le faʻaumatiaina o faʻafitauli lelei, na matou oʻo mai i ni filifiliga taua se lua: na amata ona matou faia suʻega canary ma faʻafeiloaʻi le mataʻituina otometi o le mea sese faʻatasi ma se tali otometi i lona sili atu. O le fofo muamua na mafai ai ona maua ni mea sese manino aʻo leʻi tuʻuina atoa le code i le gaosiga, o le lona lua na faʻaitiitia ai le taimi tali i faʻafitauli i le gaosiga. O mea sese, ioe, e tutupu, ae tatou te faaaluina le tele o o tatou taimi ma taumafaiga e le o le faasa’oina o na mea, ae i le faaitiitia o na mea.
'Au'Autometi
O loʻo i ai nei a matou aufaigaluega e 130 atinaʻe, ma matou faʻaauau
O le DevOps e nafa ma le Dev / Beta siosiomaga o le CIAN site, le Integro environment, fesoasoani i le au atinaʻe e foia faʻafitauli ma atinaʻe auala fou i le faʻalauteleina o siosiomaga. O le Integro development direction e fa'atatau i le Integro lava ia ma auaunaga fa'atatau, mo se fa'ata'ita'iga, plugins mo Jenkins, Jira, Confluence, ma fa'atupuina fo'i mea fa'aoga fesoasoani ma talosaga mo 'au atina'e.
E galulue fa'atasi le 'au a le DI ma le 'au Platform, lea e atia'e le fausaga, faletusi, ma atina'e i totonu. I le taimi lava e tasi, soʻo se atinaʻe i totonu o le CIAN e mafai ona saofagā i le masini, mo se faʻataʻitaʻiga, fai micro-automation e fetaui ma manaʻoga o le 'au pe faʻasoa se manatu manaia ile auala e faʻaleleia atili ai le masini.
Layer keke o masini i CIAN
O faiga uma e aofia ai i le masini e mafai ona vaevaeina i ni vaega:
- Faiga mai fafo (Jira, Bitbucket, ma isi). E galulue fa'atasi 'au atina'e ma i latou.
- Tulaga tu'ufa'atasi. O le tele o taimi, e le galulue fa'atasi ai le au atina'e, ae o le mea lea e fa'atumauina uma ai le masini.
- Au'aunaga tu'uina atu, tu'ufa'atasiga ma su'esu'ega (fa'ata'ita'iga, Jeknins, Consul, Nomad). Faatasi ai ma la latou fesoasoani, matou te faʻapipiʻi code i luga o sapalai ma faʻamautinoa o loʻo galulue le tasi i le isi.
- Laega fa'aletino (servers, OS, software related). O lo'o fa'agaoioi le matou code i lea tulaga. E mafai ona avea lenei mea o se faʻaumau faʻapitoa poʻo se mea faʻapitoa (LXC, KVM, Docker).
Faʻavae i luga o lenei manatu, matou te vaevaeina vaega o tiute i totonu o le au DI. O laʻasaga muamua e lua o loʻo i totonu o le vaega o le matafaioi a le Integro development direction, ma o vaega mulimuli e lua o loʻo i ai i le vaega o le matafaioi a DevOps. O lenei teteʻa e mafai ai ona tatou taulaʻi atu i galuega ma e le faʻalavelave i fegalegaleaiga, talu ai tatou te vavalalata le tasi i le isi ma fefaʻasoaaʻi i taimi uma le poto ma le poto masani.
le atoatoa
Sei o tatou taulai atu i le Integro ma amata i le faaputuga tekinolosi:
- CentOS 7
- Docker + Nomad + Konesula + Vault
- Java 11 (o le Integro monolith tuai o le a tumau i Java 8)
- Spring Boot 2.X + Spring Cloud Config
- PostgreSql 11
- LapitiMQ
- Apache mumu
- Camunda (fa'apipi'i)
- Grafana + Graphite + Prometheus + Jaeger + ELK
- Uepi UI: Tali (CSR) + MobX
- SSO: Keycloak
Matou te tausisia le mataupu faavae o le atinaʻeina o microservice, e ui lava o loʻo i ai a matou talatuu i le tulaga o se monolith o se uluaʻi lomiga o Integro. O microservice taʻitasi e taʻavale i lana lava Docker container, ma o auaunaga e fesoʻotaʻi le tasi ma le isi e ala i talosaga HTTP ma RabbitMQ feʻau. E maua e Microservices le tasi ma le isi e ala i le Konesula ma fai se talosaga i ai, pasia le faatagaga ile SSO (Keycloak, OAuth 2/OpenID Connect).
O se faʻataʻitaʻiga moni o le olaga, mafaufau e fegalegaleai ma Jenkins, lea e aofia ai laasaga nei:
- Ole microservice ole pulega ole galuega (lea e ta'ua mulimuli ane ole Flow microservice) e mana'o e fai se fale i Jenkins. Ina ia faia lenei mea, na te faʻaaogaina le Konesula e suʻe ai le IP: PORT o le microservice mo le tuʻufaʻatasia ma Jenkins (lea e taʻua mulimuli ane o Jenkins microservice) ma tuʻuina atu se talosaga asynchronous i ai e amata le fausiaina i Jenkins.
- A maeʻa ona maua se talosaga, o le Jenkins microservice e gaosia ma tali atu i se ID Job, lea e mafai ona faʻaaoga e iloa ai le taunuuga o le galuega. I le taimi lava e tasi, e faʻaosoina ai le fausiaina i Jenkins e ala i le REST API valaau.
- Jenkins e fa'atino le fau ma, a mae'a, tu'uina atu se webhook fa'atasi ai ma fa'ai'uga fa'ataunu'u i le Jenkins microservice.
- O le Jenkins microservice, ina ua maua le webhook, faʻatupuina se feʻau e uiga i le faʻamaeʻaina o le faʻaogaina o talosaga ma faʻapipiʻi ai iʻuga o le faʻatinoga. O le fe'au fa'atupu e lafo i le laina RabbitMQ.
- E ala i le RabbitMQ, o le faʻasalalauga faʻasalalau e oʻo atu i le Flow microservice, lea e aʻoaʻo ai e uiga i le iʻuga o le faʻagaioiina o lana galuega e ala i le fetaui ma le Job ID mai le talosaga ma le feʻau na maua.
Ole taimi nei e tusa ma le 30 microservices, lea e mafai ona vaevaeina i ni vaega:
- Fa'atonuga fa'atonuga.
- Faʻamatalaga ma fegalegaleaiga ma tagata faʻaoga (avefeʻau, meli).
- Galulue fa'atasi ma fa'ailoga puna.
- Faʻatasi ma meafaigaluega faʻapipiʻi (jenkins, nomad, consul, ma isi).
- Mataʻituina (faʻasalalau, mea sese, ma isi).
- 'upega tafaʻilagi (UI mo le puleaina o siosiomaga suʻega, aoina o fuainumera, ma isi).
- Tu'ufa'atasi ma su'ega galuega ma faiga fa'apena.
- Puleaina o galuega mo galuega eseese.
Galuega fa'agasolo galuega
Integro fa'aautomate gaioiga e feso'ota'i ma le fa'asologa o galuega. I ni faaupuga faigofie, o le taamilosaga o le olaga o se galuega o le a malamalama o le faʻasologa o galuega i Jira. O a matou fa'agasologa fa'atupuina e iai le tele o fesuiaiga o galuega e fa'atatau i le poloketi, le ituaiga o galuega ma filifiliga filifilia i se galuega fa'apitoa.
Se'i o tatou va'ai ile fa'asologa o galuega e masani ona tatou fa'aaogaina:
I le ata, o le mea e taʻu mai ai o le suiga e taʻua otometi e le Integro, aʻo faʻaalia e le tagata le suiga e taʻua ma le lima e se tagata. Se'i o tatou va'ava'ai i ni auala e mafai ona uia e se galuega i lenei fa'asologa o galuega.
Fa'ata'ita'iga fa'ata'ita'i atoa ile DEV+BETA e aunoa ma ni su'ega canary (e masani lava o le auala lea e fa'amatu'u ai se monolith):
Atonu e iai isi tu'ufa'atasiga o suiga. O nisi taimi o le ala o le a alu ai se mataupu e mafai ona filifilia e ala i filifiliga i Jira.
Gaioiina o galuega
Seʻi o tatou vaʻavaʻai i laʻasaga autu e faia pe a faʻagasolo se galuega i le "DEV Testing + Canary Tests" workflow:
1. O le fa'atupuina po'o le PM na te faia le galuega.
2. E ave e le tagata atiaʻe le galuega e galue ai. A mae'a, ona sui lea ile tulaga IN REVIEW.
3. Ua auina atu e Jira se Webhook i le Jira microservice (e nafa ma le tuufaatasia ma Jira).
4. O le Jira microservice e tuʻuina atu se talosaga i le Flow service (e nafa ma galuega i totonu o loʻo faʻatinoina ai galuega) e amata ai le galuega.
5. I totonu o le auaunaga Flow:
- Ua tofia tagata su'esu'e i le galuega (Users microservice e iloa mea uma e uiga i tagata fa'aoga + Jira microservice).
- E ala i le Source microservice (na te iloa e uiga i faleoloa ma lala, ae e le galue ma le code lava ia), e faia se suʻesuʻega mo faleoloa o loʻo i ai se lala o la matou mataupu (e faʻafaigofie le sailiga, o le igoa o le lala e fetaui ma le mataupu. numera i Jira). O le tele o taimi, o se galuega e na'o le tasi le lala i le tasi fale teu oloa; e faafaigofie ai le puleaina o le fa'atulagaina o laina ma fa'aitiitia le feso'ota'iga i le va o fale teu oloa.
- Mo lala maua ta'itasi, o le fa'asologa o gaioiga o lo'o fa'atinoina:
i) Faʻafouina le lala matua (Git microservice mo le galue ma code).
ii) Ua poloka le lala mai suiga e le tagata e faia (Bitbucket microservice).
iii) Ua faia se Talosaga Toso mo lenei lala (Bitbucket microservice).
iv) O se fe'au e uiga i se Talosaga Toso fou e lafo atu i fa'atalanoaga a le au atia'e (Fa'ailoa microservice mo le galue ma fa'amatalaga).
v) Fausiaina, su'ega ma fa'atino galuega e amata ile DEV (Jenkins microservice mo le galulue fa'atasi ma Jenkins).
vi) Afai e maeʻa lelei laasaga uma muamua, ona tuʻu lea e Integro lana Approve i le Pull Request (Bitbucket microservice). - Integro o loʻo faʻatali le Faʻamaonia i le Toso Talosaga mai tagata suʻesuʻe filifilia.
- O le taimi lava na maua ai faʻatagaga talafeagai uma (e aofia ai suʻega faʻaautomatika ua pasi lelei), faʻafeiloaʻi e Integro le galuega ile Suʻega i luga ole Dev (Jira microservice) tulaga.
6. Su'e su'ega le galuega. Afai e leai ni faʻafitauli, ona faʻafeiloaʻi lea o le galuega ile tulaga Sauni mo Faufale.
7. Integro "vaai" ua sauni le galuega mo le faʻamalolo ma amata lona faʻapipiʻiina i le canary mode (Jenkins microservice). O le sauni mo le tatalaina e fuafua i se seti o tulafono. Mo se faʻataʻitaʻiga, o le galuega o loʻo i le tulaga manaʻomia, e leai ni loka i isi galuega, o loʻo i ai i le taimi nei e leai ni faʻauluina o lenei microservice, ma isi.
8. O le galuega o loʻo tuʻuina atu ile tulaga Canary (Jira microservice).
9. Jenkins faʻalauiloa se galuega faʻapipiʻi e ala i Nomad i le canary mode (masani 1-3 faʻataʻitaʻiga) ma logoina le auaunaga mataʻituina faʻamalolo (DeployWatch microservice) e uiga i le faʻapipiʻiina.
10. O le DeployWatch microservice e aoina le faʻamatalaga sese ma tali atu i ai, pe a manaʻomia. Afai e sili atu le mea sese i tua (o le masani masani e fuafua otometi), e logoina le au atinaʻe e ala i le Notify microservice. Afai a mae'a le 5 minute e le'i tali mai le atia'e (kiliki Toe fo'i po'o Nofo), ona fa'alauiloa lea o le toe fa'afo'i otometi o fa'ata'ita'iga canary. Afai e le sili atu le talaaga, ona tatau lea i le tagata atiaʻe ona faʻalauiloa ma le lima le faʻatulagaina o galuega i le Gaosiga (e ala i le kilikiina o se ki i le UI). Afai i totonu ole 60 minute e leʻi faʻalauiloaina e le tagata faʻapipiʻi le faʻapipiʻiina i le Gaosiga, o le a toe faʻafoʻi foʻi faʻataʻitaʻiga canary mo mafuaaga saogalemu.
11. Ina ua uma ona faʻalauiloa le faʻapipiʻiina i le Gaosiga:
- O le galuega o loʻo tuʻuina atu i le tulaga o Gaosiga (Jira microservice).
- O le Jenkins microservice e amata le faʻaogaina o le faʻagasologa ma logoina le DeployWatch microservice e uiga i le faʻapipiʻiina.
- E siaki e le DeployWatch microservice ua toe fa'afou uma koneteina i luga o le Gaosiga (sa i ai tulaga e le'i fa'afouina uma).
- E ala i le Notify microservice, o se faʻamatalaga e uiga i taunuʻuga o le faʻapipiʻiina e lafo atu i le Gaosiga.
12. E iai le 30 minute a le au atia'e e amata ai ona toe fa'afo'i se galuega mai le Gaosiga pe a iloa le amio le'o le microservice. A maeʻa lenei taimi, o le a otometi lava ona tuʻufaʻatasia le galuega i le matai (Git microservice).
13. A maeʻa le manuia faʻatasi i le matai, o le a suia le tulaga o galuega ile Tapuni (Jira microservice).
O le ata e le faʻafoliga e faʻamalamalama atoatoa (o le mea moni o loʻo i ai le tele o laasaga), ae mafai ai e oe ona iloilo le maualuga o le tuʻufaʻatasia i faiga. Matou te le manatu o lenei polokalame e sili ona lelei ma o loʻo faʻaleleia le faʻagasologa o le faʻamalolo otometi ma le faʻapipiʻiina o le lagolago.
O le a le isi
E i ai a matou fuafuaga tetele mo le atinaʻeina o masini, mo se faʻataʻitaʻiga, faʻamutaina galuega faʻataʻitaʻi i le taimi o faʻasalalauga monolith, faʻaleleia le mataʻituina i le taimi o le faʻapipiʻiina otometi, ma faʻaleleia fegalegaleaiga ma tagata atiae.
Ae tatou tu’u iinei mo le taimi nei. Sa matou fa'atalanoaina le tele o mataupu i le iloiloga fa'autometi i se tulaga papa'u, o nisi e le'i pa'i i ai, o lea matou te fiafia e tali fesili. O loʻo matou faʻatali mo fautuaga i mea e faʻamatalaina auiliili, tusi i faʻamatalaga.
puna: www.habr.com