Ma RIT 2019, ua hana kā mākou hoa hana ʻo Alexander Korotkov
ʻAleʻele
"ʻAʻohe mea e like me ka pae ʻole, ʻaʻole wau ʻike i kēlā mea"
Master Shifu mai ke kiʻiʻoniʻoni "Kung Fu Panda"
Ua hoʻomaka ʻo Automation ma CIAN i 14 mau makahiki ma hope o ka hoʻokumu ʻia ʻana o ka hui. I kēlā manawa he 35 mau kānaka i ka hui hoʻomohala. Paʻakikī ke manaʻoʻiʻo, ʻeā? ʻOiaʻiʻo, ua loaʻa ka automation ma kekahi ʻano, akā ua hoʻomaka kahi kuhikuhi ʻokoʻa no ka hoʻohui mau ʻana a me ka hāʻawi ʻana i nā code i ka makahiki 2015.
I kēlā manawa, loaʻa iā mākou kahi monolith nui o Python, C# a me PHP, i kau ʻia ma nā kikowaena Linux/Windows. No ka hoʻokau ʻana i kēia monster, loaʻa iā mākou kahi pūʻulu o nā palapala a mākou i holo lima ai. Aia kekahi hui o ka monolith, ka mea i lawe mai i ka ʻeha a me ka ʻeha ma muli o nā paio i ka hoʻohui ʻana i nā lālā, hoʻoponopono i nā hemahema, a me ke kūkulu hou ʻana "me nā ʻano hana ʻē aʻe i ke kūkulu ʻana." Ua like ke kaʻina hana maʻalahi:
ʻAʻole mākou hauʻoli i kēia, a ua makemake mākou e kūkulu i kahi hana hana hou, ʻakomi a hiki ke hoʻokele ʻia a me ke kaʻina hana. No kēia, pono mākou i kahi ʻōnaehana CI / CD, a ua koho mākou ma waena o ka mana manuahi o Teamcity a me ka mana manuahi o Jenkins, no ka mea, ua hana pū mākou me lākou a ua kūpono nā mea ʻelua iā mākou e pili ana i ka hoʻonohonoho o nā hana. Ua koho mākou iā Teamcity ma ke ʻano he huahana hou loa. I kēlā manawa, ʻaʻole mākou i hoʻohana i ka microservice architecture a ʻaʻole i manaʻo i ka nui o nā hana a me nā papahana.
Hele mākou i ka manaʻo o kā mākou ʻōnaehana ponoʻī
ʻO ka hoʻokō ʻana o Teamcity ua wehe wale i kahi hapa o ka hana lima: ʻo ka mea i koe ka hana ʻana i nā noi huki, hoʻolaha i nā pilikia ma ke kūlana ma Jira, a me ke koho ʻana i nā pilikia no ka hoʻokuʻu ʻana. ʻAʻole hiki i ka ʻōnaehana Teamcity ke hoʻokō hou i kēia. Pono e koho i ke ala o ka automation hou aʻe. Ua noʻonoʻo mākou i nā koho no ka hana ʻana me nā palapala i Teamcity a i ʻole ke hoʻololi ʻana i nā ʻōnaehana automation ʻaoʻao ʻekolu. Akā i ka hopena, ua hoʻoholo mākou e pono mākou i ka hiki ke maʻalahi, ʻo ia wale nō ka mea hiki ke hāʻawi i kā mākou hoʻonā. ʻO kēia ke ʻano o ka mana mua o ka ʻōnaehana automation kūloko i kapa ʻia ʻo Integro.
Kūleʻa ʻo Teamcity i ka automation ma ke kiʻekiʻe o ka hoʻomaka ʻana i nā kaʻina hana kūkulu a me nā kaʻina hana, ʻoiai ʻo Integro i kālele i ka automation kiʻekiʻe o nā kaʻina hana hoʻomohala. Pono e hoʻohui i ka hana me nā pilikia ma Jira me ka hana ʻana i nā code kumu pili i Bitbucket. I kēia pae, ua hoʻomaka ʻo Integro e loaʻa i kāna mau kaila hana no ka hana ʻana me nā hana o nā ʻano ʻano like ʻole.
Ma muli o ka piʻi ʻana o ka automation i nā kaʻina ʻoihana, ua hoʻonui ʻia ka nui o nā papahana a me nā holo ma Teamcity. No laila ua hiki mai kahi pilikia hou: ʻaʻole i lawa ka laʻana o Teamcity manuahi (3 ʻelele a me 100 papahana), ua hoʻohui mākou i kahi laʻana (3 mau ʻelele hou a me 100 papahana), a laila kekahi. ʻO ka hopena, ua hoʻopau mākou i kahi ʻōnaehana o kekahi mau puʻupuʻu, i paʻakikī ke mālama:
I ka wā i kū mai ai ka nīnau o kahi hihia 4, ua ʻike mākou ʻaʻole hiki iā mākou ke hoʻomau i ka noho ʻana e like me kēia, no ka mea, ʻaʻole i loko o nā palena ka huina o ke kākoʻo ʻana i nā hihia 4. Ua kū ka nīnau e pili ana i ke kūʻai ʻana iā Teamcity uku a i ʻole ke koho ʻana iā Jenkins manuahi. Ua helu mākou i nā manawa a me nā hoʻolālā automation a hoʻoholo mākou e noho ma Jenkins. Ma hope o kekahi mau pule, ua hoʻololi mākou iā Jenkins a hoʻopau i kekahi o nā ʻeha ʻeha e pili ana i ka mālama ʻana i nā manawa Teamcity he nui. No laila, ua hiki iā mākou ke nānā aku i ka hoʻomohala ʻana i ka Integro a me ka hana maʻamau iā Jenkins no mākou iho.
Me ka ulu ʻana o ka automation maʻamau (ma ke ʻano o ka hoʻokumu ʻana i nā Pull Requests, ka hōʻiliʻili ʻana a me ka hoʻolaha ʻana i ka uhi Code a me nā loiloi ʻē aʻe), aia ka makemake nui e haʻalele i nā hoʻokuʻu manual e like me ka hiki a hāʻawi i kēia hana i nā robots. Eia hou, ua hoʻomaka ka hui e neʻe i nā microservices i loko o ka hui, e koi ana i ka hoʻokuʻu pinepine ʻana, a kaʻawale mai kekahi i kekahi. ʻO kēia ka mea i hele mālie ai mākou i ka hoʻokuʻu ʻana i kā mākou microservices (ke hoʻokuʻu nei mākou i ka monolith me ka lima ma muli o ka paʻakikī o ke kaʻina hana). Akā, e like me ka mea maʻamau, ua puka mai kahi paʻakikī hou.
Hoʻokolo mākou i ka hoʻāʻo
Ma muli o ka automation o nā hoʻokuʻu, ua wikiwiki nā kaʻina hana hoʻomohala, ma muli o ka lele ʻana o kekahi mau pae hoʻāʻo. A ua alakaʻi kēia i ka nalo ʻana o ka maikaʻi. He mea liʻiliʻi ia, akā me ka wikiwiki o ka hoʻokuʻu ʻana, pono ia e hoʻololi i ke ʻano hana hoʻomohala huahana. Pono e noʻonoʻo e pili ana i ka automation o ka hoʻāʻo ʻana, hoʻokomo i ke kuleana pilikino (eia mākou e kamaʻilio nei e pili ana i ka "ʻae ʻana i ka manaʻo ma ke poʻo", ʻaʻole nā uku kālā) o ka mea hoʻomohala no ka code i hoʻokuʻu ʻia a me nā pōpoki i loko, a me ka hoʻoholo hoʻokuʻu/ʻaʻole hoʻokuʻu i kahi hana ma o ka hoʻolaha ʻakomi.
Ke hoʻopau nei i nā pilikia maikaʻi, ua hiki mākou i ʻelua mau hoʻoholo koʻikoʻi: ua hoʻomaka mākou e hana i ka hoʻāʻo canary a hoʻokomo i ka nānā ʻana i ke kāʻei hewa me ka pane maʻalahi i kāna keu. ʻO ka hoʻonā mua i hiki ke ʻike i nā hewa ʻike ma mua o ka hoʻokuʻu ʻia ʻana o ke code i ka hana ʻana, ʻo ka lua i hoʻemi i ka manawa pane i nā pilikia i ka hana. ʻO nā hewa, ʻoiaʻiʻo, hiki mai, akā hoʻolilo mākou i ka hapa nui o kā mākou manawa a me kā mākou hoʻoikaika ʻana ʻaʻole ma ka hoʻoponopono ʻana iā lākou, akā ma ka hōʻemi ʻana iā lākou.
Pūʻulu Automation
Loaʻa iā mākou he limahana o nā mea hoʻomohala 130, a ke hoʻomau nei mākou
ʻO DevOps ke kuleana no ka Dev/Beta kaiapuni o ka pūnaewele CIAN, ka Integro environment, kōkua i nā mea hoʻomohala e hoʻoponopono i nā pilikia a hoʻomohala i nā ala hou i ka scaling environment. ʻO ke kuhikuhi hoʻomohala Integro e pili ana me Integro ponoʻī a me nā lawelawe pili, no ka laʻana, nā plugins no Jenkins, Jira, Confluence, a hoʻomohala pū i nā pono kōkua a me nā noi no nā hui hoʻomohala.
Hana pū ka hui DI me ka hui Platform, nāna e hoʻomohala i ka hoʻolālā hale, nā hale waihona puke, a me nā ala hoʻomohala i loko. Ma ka manawa like, hiki i kekahi mea hoʻomohala i loko o CIAN ke hāʻawi i ka automation, no ka laʻana, hana i ka micro-automation e kūpono i nā pono o ka hui a i ʻole kaʻana like i kahi manaʻo maikaʻi e hoʻomaikaʻi i ka automation.
ʻO ka papaʻaina keke o ka automation ma CIAN
Hiki ke hoʻokaʻawale ʻia nā ʻōnaehana āpau e pili ana i ka automation i kekahi mau papa:
- Nā ʻōnaehana waho (Jira, Bitbucket, etc.). Hana pū nā hui hoʻomohala me lākou.
- kahua hui pū. ʻO ka pinepine, ʻaʻole hana pololei nā mea hoʻomohala me ia, akā ʻo ia ka mea e mālama ai i ka holo ʻana o ka automation āpau.
- ʻO nā lawelawe hoʻouna, hoʻokalakupua a ʻike (no ka laʻana, Jeknins, Consul, Nomad). Me kā lākou kōkua, kau mākou i nā code ma nā kikowaena a hōʻoia i ka hana ʻana o nā lawelawe me kekahi.
- Papa kino (nā kikowaena, OS, polokalamu pili). Ke hana nei kā mākou code ma kēia pae. Hiki i kēia ke kikowaena kino a i ʻole kahi virtual (LXC, KVM, Docker).
Ma muli o kēia manaʻo, hoʻokaʻawale mākou i nā wahi kuleana i loko o ka hui DI. Aia nā pae mua ʻelua ma ka wahi o ke kuleana o ke alakaʻi hoʻomohala Integro, a ʻo nā pae hope ʻelua aia i ka wahi o ke kuleana o DevOps. ʻO kēia kaʻawaleʻana e hiki ai iā mākou ke nānā aku i nā hana aʻaʻole e hoʻopilikia i ka pilina, no ka mea, kokoke mākou i kekahi i kekahi a hoʻololi mau i kaʻike a me kaʻike.
Paʻa
E noʻonoʻo kākou i ka Integro a hoʻomaka me ka ʻenehana ʻenehana:
- CentOS 7
- Docker + Nomad + Consul + Vault
- Java 11 (e mau ana ka Integro monolith kahiko ma Java 8)
- Puna Pua 2.X + Puna Kapua Config
- PostgreSql 11
- ʻO RabbitMQ
- ʻAha ʻo Apache
- Camunda (hoʻokomo ʻia)
- ʻO Grafana + Graphite + Prometheus + Jaeger + ELK
- UI Pūnaewele: React (CSR) + MobX
- SSO: Keycloak
Hoʻopili mākou i ke kumu o ka hoʻomohala microservice, ʻoiai ua loaʻa iā mākou ka hoʻoilina ma ke ʻano o kahi monolith o kahi mana mua o Integro. E holo ana kēlā me kēia microservice i kāna pahu Docker ponoʻī, a kamaʻilio nā lawelawe me kekahi ma o nā noi HTTP a me nā leka RabbitMQ. Loaʻa nā Microservices kekahi i kekahi ma o ke Kanikela a noi aku iā ia, e hāʻawi ana i ka mana ma o SSO (Keycloak, OAuth 2/OpenID Connect).
Ma ke ʻano he hiʻohiʻona maoli, e noʻonoʻo e launa pū me Jenkins, aia nā pae aʻe:
- ʻO ka microservice hoʻokele workflow (ma hope aku i kapa ʻia ʻo Flow microservice) makemake e holo i kahi kūkulu ma Jenkins. No ka hana ʻana i kēia, hoʻohana ʻo ia i ke Kanikela e ʻimi i ka IP: PORT o ka microservice no ka hoʻohui ʻana me Jenkins (ma hope i kapa ʻia ʻo Jenkins microservice) a hoʻouna i kahi noi asynchronous iā ia e hoʻomaka i ke kūkulu ʻana ma Jenkins.
- Ma hope o ka loaʻa ʻana o kahi noi, hoʻopuka a pane ʻo Jenkins microservice me kahi ID Job, a laila hiki ke hoʻohana ʻia e ʻike i ka hopena o ka hana. I ka manawa like, hoʻomaka ia i ke kūkulu ʻana ma Jenkins ma o kahi kelepona REST API.
- Hana ʻo Jenkins i ke kūkulu ʻana a, ma hope o ka pau ʻana, hoʻouna i kahi webhook me nā hopena hoʻokō i ka microservice Jenkins.
- ʻO ka microservice Jenkins, ua loaʻa iā ia ka webhook, hoʻopuka i kahi leka e pili ana i ka hoʻopau ʻana i ka hoʻoponopono noi a hoʻopili i nā hopena hoʻokō iā ia. Hoʻouna ʻia ka memo i hana ʻia i ka queue RabbitMQ.
- Ma o RabbitMQ, hiki i ka memo i paʻi ʻia i ka Flow microservice, ka mea e aʻo ai e pili ana i ka hopena o ka hana ʻana i kāna hana ma ka hoʻohālikelike ʻana i ka Job ID mai ka noi a me ka memo i loaʻa.
I kēia manawa ua loaʻa iā mākou he 30 microservices, hiki ke hoʻokaʻawale ʻia i nā pūʻulu he nui:
- Hoʻoponopono hoʻonohonoho.
- ʻIke a me ka launa pū me nā mea hoʻohana (nā ʻelele, leka uila).
- Ke hana nei me ka code kumu.
- Hoʻohui me nā mea hana hoʻolaha (jenkins, nomad, consul, etc.).
- Ka nānā ʻana (nā hoʻokuʻu, nā hewa, etc.).
- Nā pono pūnaewele (UI no ka hoʻokele ʻana i nā kaiapuni hoʻāʻo, hōʻiliʻili ʻikepili, etc.).
- Hoʻohui pū me nā mea nānā hana a me nā ʻōnaehana like.
- Hoʻoponopono kaʻina hana no nā hana like ʻole.
Nā hana kaʻina hana
Hoʻokomo ʻo Integro i nā hana e pili ana i ke ola ola hana. Ma nā ʻōlelo maʻalahi, e hoʻomaopopo ʻia ke kaʻina ola o kahi hana ma ke ʻano he kaʻina hana o kahi hana ma Jira. Loaʻa i kā mākou mau kaʻina hana hoʻomohala nā ʻano like ʻole e pili ana i ka papahana, ke ʻano o ka hana a me nā koho i koho ʻia i kahi hana.
E nānā i ke kaʻina hana a mākou e hoʻohana pinepine ai:
Ma ke kiʻikuhi, hōʻike ka mea e kapa ʻia ka hoʻololi ʻana e Integro, aʻo ke kiʻi kanaka e hōʻike ana ua kapa ʻia ka hoʻololi ʻana e ke kanaka. E nānā i kekahi mau ala e hiki ai i kahi hana ke hana i kēia kaʻina hana.
ʻO ka hoʻāʻo ʻana i ka manual ma DEV+BETA me ka ʻole o nā hoʻāʻo canary (ʻo ia ka mea e hoʻokuʻu ai mākou i kahi monolith):
Aia paha nā hui hoʻololi ʻē aʻe. I kekahi manawa hiki ke koho ʻia ke ala e hele ai kahi pilikia ma o nā koho ma Jira.
Ka neʻe hana
E nānā i nā ʻanuʻu nui i hana ʻia i ka neʻe ʻana o kahi hana ma o ke kahe hana "DEV Testing + Canary Tests".
1. Hoʻokumu ka mea hoʻomohala a i ʻole PM i ka hana.
2. Lawe ka mea hoʻomohala i ka hana e hana. Ma hope o ka pau ʻana, hoʻololi ia i ke kūlana IN REVIEW.
3. Hoʻouna ʻo Jira i kahi Webhook i ka Jira microservice (kūpono no ka hoʻohui ʻana me Jira).
4. Hoʻouna ka Jira microservice i kahi noi i ka lawelawe Flow (kuleana no nā kahe hana kūloko i hana ʻia ai ka hana) e hoʻomaka i ke kaʻina hana.
5. I loko o ka lawelawe Flow:
- Hāʻawi ʻia nā mea loiloi i ka hana (Users microservice i ʻike i nā mea āpau e pili ana i nā mea hoʻohana + Jira microservice).
- Ma o ka Source microservice (ʻike ia e pili ana i nā waihona a me nā lālā, akā ʻaʻole hana me ke code ponoʻī), hana ʻia kahi ʻimi no nā waihona i loaʻa kahi lālā o kā mākou pilikia (e hoʻomaʻamaʻa i ka ʻimi ʻana, pili ka inoa o ka lālā me ka pilikia. helu ma Jira). ʻO ka pinepine, hoʻokahi wale nō lālā o ka hana i loko o ka waihona hoʻokahi; hoʻomaʻamaʻa kēia i ka hoʻokele ʻana i ka queue deployment a hōʻemi i ka pilina ma waena o nā waihona.
- No kēlā me kēia lālā i ʻike ʻia, hana ʻia kēia kaʻina hana:
i) Hoʻohou i ka lālā kumu (Git microservice no ka hana ʻana me ke code).
ii) Ua ālai ʻia ka lālā mai nā hoʻololi e ka mea hoʻomohala (Bitbucket microservice).
iii) Hoʻokumu ʻia kahi noi huki no kēia lālā (Bitbucket microservice).
iv) Hoʻouna ʻia kahi leka e pili ana i kahi Noi Huki hou i nā kamaʻilio hoʻomohala (Hoʻomaopopo i ka microservice no ka hana ʻana me nā hoʻolaha).
v) Hoʻomaka ʻia nā hana kūkulu, hoʻāʻo a kau ʻana ma DEV (Jenkins microservice no ka hana pū ʻana me Jenkins).
vi) Inā hoʻokō maikaʻi ʻia nā ʻanuʻu mua, a laila hoʻokomo ʻo Integro i kāna Approve ma ka Pull Request (Bitbucket microservice). - Ke kali nei ʻo Integro i ka ʻae ʻana i ka noi huki mai nā mea loiloi i koho ʻia.
- I ka loaʻa ʻana o nā ʻae kūpono (me nā hoʻokolohua automated i hala maikaʻi), hoʻololi ʻo Integro i ka hana i ke kūlana Test on Dev (Jira microservice).
6. Ho'āʻo nā mea hōʻike i ka hana. Inā ʻaʻohe pilikia, a laila hoʻoneʻe ʻia ka hana i ke kūlana Ready For Build.
7. "ʻIke" ʻo Integro ua mākaukau ka hana no ka hoʻokuʻu ʻana a hoʻomaka i kāna kau ʻana ma ke ʻano canary (Jenkins microservice). Hoʻoholo ʻia ka mākaukau no ka hoʻokuʻu ʻia ʻana e kekahi mau lula. No ka laʻana, aia ka hana i ke kūlana i koi ʻia, ʻaʻohe laka i nā hana ʻē aʻe, ʻaʻohe hoʻouka ʻana o kēia microservice i kēia manawa, etc.
8. Hoʻololi ʻia ka hana i ke kūlana Canary (Jira microservice).
9. Hoʻomaka ʻo Jenkins i kahi hana hoʻolaha ma o Nomad ma ke ʻano canary (maʻa mau 1-3 mau manawa) a hoʻolaha i ka lawelawe nānā hoʻokuʻu (DeployWatch microservice) e pili ana i ka hoʻolaha.
10. 'Ohi ka DeployWatch microservice i ke kua o ka hewa a pane aku ia ia, ina pono. Inā ʻoi aku ka nui o ka hewa (heluhelu ʻia ke kumu maʻamau), hoʻolaha ʻia nā mea hoʻomohala ma o ka Notify microservice. Inā ma hope o 5 mau minuke ʻaʻole i pane mai ka mea hoʻomohala (e kaomi iā Revert a Noho paha), a laila hoʻomaka ʻia kahi rollback maʻalahi o nā manawa canary. Inā ʻaʻole i ʻoi aku ka nui o ke kua, a laila pono ka mea hoʻomohala e hoʻomaka me ka lima i ka hoʻonohonoho hana i Production (ma ke kaomi ʻana i kahi pihi ma ka UI). Inā i loko o 60 mau minuke ʻaʻole i hoʻomaka ka mea hoʻomohala i ka hoʻoili ʻana i Production, a laila e ʻōwili ʻia nā hihia canary no nā kumu palekana.
11. Ma hope o ka hoʻomaka ʻana i ka hoʻolaha ʻana i Production:
- Hoʻololi ʻia ka hana i ke kūlana Production (Jira microservice).
- Hoʻomaka ka microservice Jenkins i ke kaʻina hana hoʻolaha a hoʻolaha i ka microservice DeployWatch e pili ana i ka lawe ʻana.
- Nānā ka DeployWatch microservice ua hoʻonui hou ʻia nā ipu a pau ma Production (he mau hihia inā ʻaʻole i hoʻonui ʻia nā mea a pau).
- Ma o ka Notify microservice, hoʻouna ʻia kahi leka e pili ana i nā hopena o ka hoʻolaha ʻana i Production.
12. Loaʻa i nā mea hoʻomohala he 30 mau minuke e hoʻomaka ai e hoʻihoʻi i kahi hana mai Production inā ʻike ʻia ka hana microservice hewa. Ma hope o kēia manawa, e hoʻohui ʻia ka hana i master (Git microservice).
13. Ma hope o ka hoʻohui ʻana i ka haku, e hoʻololi ʻia ke kūlana hana i pani ʻia (Jira microservice).
ʻAʻole hoʻohālikelike ka kiʻi i ka kikoʻī piha (ʻo ka ʻoiaʻiʻo, aia nā ʻanuʻu hou aʻe), akā hiki iā ʻoe ke loiloi i ke kiʻekiʻe o ka hoʻohui ʻana i nā kaʻina hana. ʻAʻole mākou e noʻonoʻo pono i kēia papahana a ke hoʻomaikaʻi nei i nā kaʻina hana o ka hoʻokuʻu ʻana a me ke kākoʻo hoʻolaha.
He aha ka mea aʻe
Loaʻa iā mākou nā hoʻolālā nui no ka hoʻomohala ʻana i ka automation, no ka laʻana, ka hoʻopau ʻana i nā hana lima i ka wā o ka hoʻokuʻu ʻana o ka monolith, hoʻomaikaʻi i ka nānā ʻana i ka wā o ka hoʻoili ʻana, a me ka hoʻomaikaʻi ʻana i ka pilina me nā mea hoʻomohala.
Akā, e kū kāua i kēia manawa. Ua uhi mākou i nā kumuhana he nui i ka loiloi automation, ʻaʻole i hoʻopā ʻia kekahi, no laila e hauʻoli mākou e pane i nā nīnau. Ke kali nei mākou i nā manaʻo i ka mea e uhi i nā kikoʻī, e kākau i nā manaʻo.
Source: www.habr.com