Å obrÄ«d DevOps specialitÄte ir viena no pieprasÄ«tÄkajÄm IT nozarÄ. Atverot populÄras darba meklÄÅ”anas vietnes un filtrÄjot pÄc algas, redzÄsit, ka ar DevOps saistÄ«tie darbi atrodas saraksta augÅ”galÄ. TomÄr ir svarÄ«gi saprast, ka tas galvenokÄrt attiecas uz āvecÄkoā amatu, kas nozÄ«mÄ, ka kandidÄtam ir augsts prasmju lÄ«menis, zinÄÅ”anas par tehnoloÄ£ijÄm un instrumentiem. Tas ir saistÄ«ts arÄ« ar augstu atbildÄ«bas pakÄpi, kas saistÄ«ta ar nepÄrtrauktu ražoÅ”anas darbÄ«bu. TomÄr mÄs sÄkÄm aizmirst, kas ir DevOps. SÄkotnÄji tÄ nebija kÄda konkrÄta persona vai nodaļa. Ja mÄs meklÄjam Ŕī termina definÄ«cijas, mÄs atradÄ«sim daudz skaistu un pareizu lietvÄrdu, piemÄram, metodoloÄ£iju, prakses, kultÅ«ras filozofiju, jÄdzienu grupu utt.
Mana specializÄcija ir testÄÅ”anas automatizÄcijas inženieris (QA automation engineer), taÄu uzskatu, ka to nevajadzÄtu saistÄ«t tikai ar automÄtisko testu rakstÄ«Å”anu vai testa ietvara arhitektÅ«ras izstrÄdi. 2020. gadÄ bÅ«tiskas ir arÄ« zinÄÅ”anas par automatizÄcijas infrastruktÅ«ru. Tas ļauj jums paÅ”am organizÄt automatizÄcijas procesu, sÄkot no testu veikÅ”anas lÄ«dz rezultÄtu nodroÅ”inÄÅ”anai visÄm ieinteresÄtajÄm pusÄm atbilstoÅ”i jÅ«su mÄrÄ·iem. RezultÄtÄ DevOps prasmes ir obligÄtas, lai paveiktu darbu. Un tas viss ir labi, bet diemžÄl ir problÄma (spoileris: Å”is raksts mÄÄ£ina vienkÄrÅ”ot Å”o problÄmu). Lieta ir tÄda, ka DevOps ir grÅ«ts. Un tas ir acÄ«mredzami, jo uzÅÄmumi nemaksÄs daudz par kaut ko, kas ir viegli izdarÄms... DevOps pasaulÄ ir ļoti daudz rÄ«ku, terminu un prakses, kas jÄapgÅ«st. Tas ir Ä«paÅ”i grÅ«ti karjeras sÄkumÄ un ir atkarÄ«gs no uzkrÄtÄs tehniskÄs pieredzes.
Å eit mÄs, iespÄjams, pabeigsim ar ievaddaļu un koncentrÄsimies uz Ŕī raksta mÄrÄ·i.
Par ko ir Ŕis raksts?
Å ajÄ rakstÄ es dalÄ«Å”os pieredzÄ par testÄÅ”anas automatizÄcijas infrastruktÅ«ras izveidi. InternetÄ ir daudz informÄcijas avotu par dažÄdiem rÄ«kiem un to lietoÅ”anu, bet es gribÄtu tos aplÅ«kot tÄ«ri automatizÄcijas kontekstÄ. Es uzskatu, ka daudzi automatizÄcijas inženieri ir pazÄ«stami ar situÄciju, kad neviens, izÅemot jÅ«s, neveic izstrÄdÄtos testus vai nerÅ«pÄjas par to uzturÄÅ”anu. TÄ rezultÄtÄ testi kļūst novecojuÅ”i, un jums ir jÄtÄrÄ laiks to atjauninÄÅ”anai. Atkal, karjeras sÄkumÄ tas var bÅ«t diezgan grÅ«ts uzdevums: gudri izlemt, kuri rÄ«ki palÄ«dzÄs novÄrst konkrÄto problÄmu, kÄ tos atlasÄ«t, konfigurÄt un uzturÄt. Daži testÄtÄji vÄrÅ”as pÄc palÄ«dzÄ«bas pie DevOps (cilvÄkiem), un, bÅ«sim godÄ«gi, Ŕī pieeja darbojas. Daudzos gadÄ«jumos Ŕī var bÅ«t vienÄ«gÄ iespÄja, jo mums nav redzamas visas atkarÄ«bas. Bet, kÄ zinÄms, DevOps ir ļoti aizÅemti puiÅ”i, jo viÅiem ir jÄdomÄ par visu uzÅÄmuma infrastruktÅ«ru, izvietoÅ”anu, uzraudzÄ«bu, mikropakalpojumiem un citiem lÄ«dzÄ«giem uzdevumiem atkarÄ«bÄ no organizÄcijas/komandas. KÄ parasti, automatizÄcija nav prioritÄte. Å ÄdÄ gadÄ«jumÄ mums ir jÄcenÅ”as darÄ«t visu iespÄjamo no mÅ«su puses no sÄkuma lÄ«dz beigÄm. Tas samazinÄs atkarÄ«bas, paÄtrinÄs darbplÅ«smu, uzlabos mÅ«su prasmes un ļaus mums redzÄt plaÅ”Äku priekÅ”statu par notiekoÅ”o.
RakstÄ ir parÄdÄ«ti populÄrÄkie un populÄrÄkie rÄ«ki un parÄdÄ«ts, kÄ tos izmantot, lai soli pa solim izveidotu automatizÄcijas infrastruktÅ«ru. Katra grupa ir pÄrstÄvÄta ar instrumentiem, kas ir pÄrbaudÄ«ti personÄ«gajÄ pieredzÄ. Bet tas nenozÄ«mÄ, ka jums ir jÄizmanto viena un tÄ pati lieta. PaÅ”i instrumenti nav svarÄ«gi, tie parÄdÄs un noveco. MÅ«su inženieru uzdevums ir izprast pamatprincipus: kÄpÄc mums ir vajadzÄ«ga Ŕī instrumentu grupa un kÄdas darba problÄmas mÄs varam atrisinÄt ar to palÄ«dzÄ«bu. TÄpÄc katras sadaļas beigÄs es atstÄju saites uz lÄ«dzÄ«giem rÄ«kiem, kas var tikt izmantoti jÅ«su organizÄcijÄ.
Kas nav Å”ajÄ rakstÄ
VÄlreiz atkÄrtoju, ka raksts nav par konkrÄtiem rÄ«kiem, tÄpÄc nebÅ«s koda ievietoÅ”anas no dokumentÄcijas un konkrÄtu komandu aprakstiem. Bet katras sadaļas beigÄs es atstÄju saites detalizÄtai izpÄtei.
Tas tiek darīts, jo:
Å”is materiÄls ir ļoti viegli atrodams dažÄdos avotos (dokumentÄcijÄ, grÄmatÄs, video kursos);
ja sÄksim iedziļinÄties, mums bÅ«s jÄraksta 10, 20, 30 Ŕī raksta daļas (kamÄr plÄni ir 2-3);
Es vienkÄrÅ”i nevÄlos tÄrÄt jÅ«su laiku, jo jÅ«s varÄtu vÄlÄties izmantot citus rÄ«kus, lai sasniegtu tos paÅ”us mÄrÄ·us.
Prakse
Ä»oti gribÄtos, lai Å”is materiÄls bÅ«tu noderÄ«gs ikvienam lasÄ«tÄjam, nevis vienkÄrÅ”i izlasÄ«tu un aizmirstu. JebkurÄ pÄtÄ«jumÄ prakse ir ļoti svarÄ«ga sastÄvdaļa. Tam esmu sagatavojies GitHub repozitorijs ar soli pa solim sniegtiem norÄdÄ«jumiem par to, kÄ visu izdarÄ«t no nulles. JÅ«s gaida arÄ« mÄjasdarbi, lai pÄrliecinÄtos, ka bez prÄta nekopÄjat izpildÄmo komandu rindas.
PlÄns
Solis Tehnoloģija darbarīki
1
VietÄjÄ darbÄ«ba (sagatavojiet tÄ«mekļa / Android demonstrÄcijas testus un palaidiet to lokÄli)
Node.js, SelÄns, Appium
Å is ir tikai sagatavoÅ”anÄs solis, lai veiktu demonstrÄcijas testus lokÄli un pÄrbaudÄ«tu, vai tie ir izturÄti. PraktiskajÄ daÄ¼Ä tiek izmantots Node.js, taÄu arÄ« programmÄÅ”anas valodai un platformai nav nozÄ«mes un var izmantot tÄs, kuras tiek lietotas JÅ«su uzÅÄmumÄ.
TomÄr kÄ automatizÄcijas rÄ«kus es iesaku izmantot attiecÄ«gi Selenium WebDriver tÄ«mekļa platformÄm un Appium Android platformai, jo turpmÄkajÄs darbÄ«bÄs mÄs izmantosim Docker attÄlus, kas ir pielÄgoti darbam ar Å”iem rÄ«kiem. TurklÄt, Åemot vÄrÄ darba prasÄ«bas, Å”ie rÄ«ki ir vispieprasÄ«tÄkie tirgÅ«.
KÄ jÅ«s, iespÄjams, pamanÄ«jÄt, mÄs Åemam vÄrÄ tikai tÄ«mekļa un Android testus. DiemžÄl iOS ir pavisam cits stÄsts (paldies Apple). Es plÄnoju parÄdÄ«t ar IOS saistÄ«tus risinÄjumus un praksi nÄkamajÄs daļÄs.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
No infrastruktÅ«ras viedokļa lokÄla darbÄ«ba nesniedz nekÄdu vÄrtÄ«bu. JÅ«s tikai pÄrbaudiet, vai testi tiek veikti vietÄjÄ datorÄ vietÄjÄs pÄrlÅ«kprogrammÄs un simulatoros. Bet jebkurÄ gadÄ«jumÄ tas ir nepiecieÅ”ams sÄkumpunkts.
jebkura programmÄÅ”anas valoda, kas jums patÄ«k kopÄ ar Selenium/Appium testiem;
jebkuri testi;
jebkurÅ” testa skrÄjÄjs.
2. Versiju kontroles sistÄmas (Git)
ÄŖss tehnoloÄ£ijas apraksts
Nevienam nebÅ«s liela atklÄsme, ja teikÅ”u, ka versiju kontrole ir ÄrkÄrtÄ«gi svarÄ«ga attÄ«stÄ«bas sastÄvdaļa gan komandÄ, gan individuÄli. Pamatojoties uz dažÄdiem avotiem, var droÅ”i teikt, ka Git ir vispopulÄrÄkais pÄrstÄvis. Versiju kontroles sistÄma nodroÅ”ina daudzas priekÅ”rocÄ«bas, piemÄram, koda koplietoÅ”anu, versiju glabÄÅ”anu, iepriekÅ”Äjo atzaru atjaunoÅ”anu, projektu vÄstures uzraudzÄ«bu un dublÄjumkopijas. MÄs neapspriedÄ«sim katru punktu sÄ«kÄk, jo esmu pÄrliecinÄts, ka jÅ«s to labi pÄrzinÄt un izmantojat savÄ ikdienas darbÄ. Bet, ja pÄkÅ”Åi nÄ, tad iesaku pÄrtraukt Ŕī raksta lasÄ«Å”anu un pÄc iespÄjas ÄtrÄk aizpildÄ«t Å”o robu.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
Un Å”eit jÅ«s varat uzdot pamatotu jautÄjumu: āKÄpÄc viÅÅ” mums stÄsta par Gitu? Ikviens to zina un izmanto gan izstrÄdes kodam, gan automÄtiskÄs pÄrbaudes kodam. Jums bÅ«s pilnÄ«ga taisnÄ«ba, taÄu Å”ajÄ rakstÄ mÄs runÄjam par infrastruktÅ«ru, un Ŕī sadaļa darbojas kÄ priekÅ”skatÄ«jums 7. sadaļai: āInfrastruktÅ«ra kÄ kods (IaC)ā. Mums tas nozÄ«mÄ, ka visa infrastruktÅ«ra, ieskaitot testÄÅ”anu, ir aprakstÄ«ta koda veidÄ, tÄpÄc varam tai pielietot arÄ« versiju veidoÅ”anas sistÄmas un iegÅ«t lÄ«dzÄ«gas priekÅ”rocÄ«bas kÄ izstrÄdei un automatizÄcijas kodam.
MÄs sÄ«kÄk aplÅ«kosim IaC 7. darbÄ«bÄ, taÄu pat tagad varat sÄkt lietot Git lokÄli, izveidojot lokÄlo repozitoriju. KopÄjais attÄls tiks paplaÅ”inÄts, kad infrastruktÅ«rai pievienosim attÄlo repozitoriju.
Lai parÄdÄ«tu, kÄ konteinerizÄcija ir mainÄ«jusi spÄles noteikumus, atgriezÄ«simies laikÄ dažas desmitgades. Toreiz cilvÄki iegÄdÄjÄs un izmantoja serveru iekÄrtas, lai palaistu lietojumprogrammas. Bet vairumÄ gadÄ«jumu nepiecieÅ”amie starta resursi nebija iepriekÅ” zinÄmi. RezultÄtÄ uzÅÄmumi tÄrÄja naudu dÄrgu, jaudÄ«gu serveru iegÄdei, taÄu daļa no Ŕīs jaudas netika pilnÄ«bÄ izmantota.
NÄkamais evolÅ«cijas posms bija virtuÄlÄs maŔīnas (VM), kas atrisinÄja problÄmu, kas saistÄ«ta ar naudas izŔķÄrdÄÅ”anu uz neizmantotiem resursiem. Å Ä« tehnoloÄ£ija ļÄva vienÄ serverÄ« darbinÄt lietojumprogrammas neatkarÄ«gi vienu no otras, pieŔķirot pilnÄ«bÄ izolÄtu vietu. Bet diemžÄl jebkurai tehnoloÄ£ijai ir savi trÅ«kumi. Lai darbinÄtu virtuÄlo maŔīnu, ir nepiecieÅ”ama pilna operÄtÄjsistÄma, kas patÄrÄ centrÄlo procesoru, operatÄ«vo atmiÅu, krÄtuvi un, atkarÄ«bÄ no OS, jÄrÄÄ·inÄs ar licences izmaksÄm. Å ie faktori ietekmÄ iekrauÅ”anas Ätrumu un apgrÅ«tina pÄrnesamÄ«bu.
Un tagad mÄs nonÄkam pie konteinerizÄcijas. KÄrtÄjo reizi Ŕī tehnoloÄ£ija atrisina iepriekÅ”Äjo problÄmu, jo konteineros netiek izmantota pilna OS, kas atbrÄ«vo lielu daudzumu resursu un nodroÅ”ina Ätru un elastÄ«gu risinÄjumu pÄrnÄsÄÅ”anai.
Protams, konteineru tehnoloÄ£ija nav nekas jauns un pirmo reizi tika ieviests 70. gadu beigÄs. Tajos laikos tika veikti daudzi pÄtÄ«jumi, izstrÄdes un mÄÄ£inÄjumi. Bet tieÅ”i Docker pielÄgoja Å”o tehnoloÄ£iju un padarÄ«ja to viegli pieejamu masÄm. MÅ«sdienÄs, kad mÄs runÄjam par konteineriem, vairumÄ gadÄ«jumu mÄs domÄjam Docker. Kad mÄs runÄjam par Docker konteineriem, mÄs domÄjam Linux konteinerus. MÄs varam izmantot Windows un macOS sistÄmas, lai palaistu konteinerus, taÄu ir svarÄ«gi saprast, ka Å”ajÄ gadÄ«jumÄ parÄdÄs papildu slÄnis. PiemÄram, Docker operÄtÄjsistÄmÄ Mac klusi palaiž konteinerus vieglÄ Linux virtuÄlajÄ maŔīnÄ. MÄs atgriezÄ«simies pie Ŕīs tÄmas, kad apspriedÄ«sim Android emulatoru darbÄ«bu konteineros, tÄpÄc Å”eit ir ļoti svarÄ«ga nianse, kas jÄapspriež sÄ«kÄk.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
MÄs noskaidrojÄm, ka konteinerizÄcija un Docker ir forÅ”i. ApskatÄ«sim to automatizÄcijas kontekstÄ, jo katram instrumentam vai tehnoloÄ£ijai ir jÄatrisina problÄma. IeskicÄsim acÄ«mredzamÄs pÄrbaudes automatizÄcijas problÄmas UI testu kontekstÄ:
milzÄ«gs skaits atkarÄ«bu, instalÄjot SelÄnu un jo Ä«paÅ”i Appium;
saderÄ«bas problÄmas starp pÄrlÅ«kprogrammu, simulatoru un draiveru versijÄm;
izolÄtas vietas trÅ«kums pÄrlÅ«kprogrammÄm/simulatoriem, kas ir Ä«paÅ”i svarÄ«gi paralÄlai darbÄ«bai;
grÅ«ti pÄrvaldÄ«t un uzturÄt, ja jums vienlaikus jÄpalaiž 10, 50, 100 vai pat 1000 pÄrlÅ«kprogrammas.
Bet, tÄ kÄ SelÄns ir vispopulÄrÄkais automatizÄcijas rÄ«ks un Docker ir vispopulÄrÄkais konteinerizÄcijas rÄ«ks, nav jÄbrÄ«nÄs, ka kÄds ir mÄÄ£inÄjis tos apvienot, lai izveidotu jaudÄ«gu rÄ«ku iepriekÅ” minÄto problÄmu risinÄÅ”anai. ApsvÄrsim Å”Ädus risinÄjumus sÄ«kÄk.
SelÄna režģis dokÄ
Å is rÄ«ks ir vispopulÄrÄkais SelÄna pasaulÄ, lai palaistu vairÄkas pÄrlÅ«kprogrammas vairÄkÄs iekÄrtÄs un pÄrvaldÄ«tu tÄs no centrÄlÄ centrmezgla. Lai sÄktu, jums jÄreÄ£istrÄ vismaz 2 daļas: centrmezgls un mezgls(-i). Hub ir centrÄlais mezgls, kas saÅem visus pieprasÄ«jumus no testiem un izplata tos attiecÄ«gajiem mezgliem. Katram Node varam konfigurÄt konkrÄtu konfigurÄciju, piemÄram, norÄdot vajadzÄ«go pÄrlÅ«kprogrammu un tÄs versiju. TomÄr mums joprojÄm ir paÅ”iem jÄparÅ«pÄjas par saderÄ«giem pÄrlÅ«kprogrammas draiveriem un jÄinstalÄ tie vajadzÄ«gajos Nodes. Å Ä« iemesla dÄļ SelÄna režģis netiek izmantots tÄ«rÄ veidÄ, izÅemot gadÄ«jumus, kad mums ir jÄstrÄdÄ ar pÄrlÅ«kprogrammÄm, kuras nevar instalÄt operÄtÄjsistÄmÄ Linux. Visos citos gadÄ«jumos ļoti elastÄ«gs un pareizs risinÄjums bÅ«tu izmantot Docker attÄlus, lai palaistu Selenium grid Hub un Nodes. Å Ä« pieeja ievÄrojami vienkÄrÅ”o mezglu pÄrvaldÄ«bu, jo mÄs varam atlasÄ«t vajadzÄ«go attÄlu ar jau instalÄtÄm saderÄ«gÄm pÄrlÅ«kprogrammu versijÄm un draiveriem.
Neskatoties uz negatÄ«vÄm atsauksmÄm par stabilitÄti, it Ä«paÅ”i, ja paralÄli darbojas liels skaits mezglu, SelÄna režģis joprojÄm ir vispopulÄrÄkais rÄ«ks SelÄna testu veikÅ”anai paralÄli. Ir svarÄ«gi atzÄ«mÄt, ka atvÄrtajÄ pirmkoda versijÄ pastÄvÄ«gi parÄdÄs dažÄdi Ŕī rÄ«ka uzlabojumi un modifikÄcijas, kas cÄ«nÄs ar dažÄdÄm vÄjajÄm vietÄm.
Selenoīds tīmeklim
Å is rÄ«ks ir izrÄviens selÄna pasaulÄ, jo tas darbojas uzreiz no kastes un ir ievÄrojami atvieglojis daudzu automatizÄcijas inženieru dzÄ«vi. PirmkÄrt, Ŕī nav vÄl viena SelÄna režģa modifikÄcija. TÄ vietÄ izstrÄdÄtÄji GolangÄ izveidoja pilnÄ«gi jaunu Selenium Hub versiju, kas kopÄ ar viegliem Docker attÄliem dažÄdÄm pÄrlÅ«kprogrammÄm deva impulsu testÄÅ”anas automatizÄcijas attÄ«stÄ«bai. TurklÄt Selenium Grid gadÄ«jumÄ mums ir iepriekÅ” jÄnosaka visas nepiecieÅ”amÄs pÄrlÅ«kprogrammas un to versijas, kas nav problÄma, strÄdÄjot tikai ar vienu pÄrlÅ«kprogrammu. Bet, ja runa ir par vairÄkÄm atbalstÄ«tÄm pÄrlÅ«kprogrammÄm, Selenoid ir risinÄjums numur viens, pateicoties tÄ funkcijai āpÄrlÅ«ks pÄc pieprasÄ«jumaā. Viss, kas no mums tiek prasÄ«ts, ir iepriekÅ” ar pÄrlÅ«kprogrammÄm lejupielÄdÄt nepiecieÅ”amos attÄlus un atjauninÄt konfigurÄcijas failu, ar kuru mijiedarbojas Selenoid. Kad Selenoid saÅems pieprasÄ«jumu no testiem, tas automÄtiski palaidÄ«s vajadzÄ«go konteineru ar vÄlamo pÄrlÅ«kprogrammu. Kad pÄrbaude bÅ«s pabeigta, Selenoid izÅems konteineru, tÄdÄjÄdi atbrÄ«vojot resursus turpmÄkiem pieprasÄ«jumiem. Å Ä« pieeja pilnÄ«bÄ novÄrÅ” labi zinÄmo āmezglu degradÄcijasā problÄmu, ar kuru mÄs bieži sastopamies selÄna režģī.
Bet, diemžÄl, selenoÄ«ds joprojÄm nav sudraba lode. MÄs saÅÄmÄm funkciju āPÄrlÅ«kprogramma pÄc pieprasÄ«jumaā, taÄu funkcija āResursi pÄc pieprasÄ«jumaā joprojÄm nav pieejama. Lai izmantotu Selenoid, mums tas ir jÄizvieto fiziskajÄ aparatÅ«rÄ vai virtuÄlajÄ maŔīnÄ, kas nozÄ«mÄ, ka mums iepriekÅ” ir jÄzina, cik daudz resursu ir jÄpieŔķir. Es domÄju, ka tÄ nav problÄma maziem projektiem, kuros paralÄli darbojas 10, 20 vai pat 30 pÄrlÅ«kprogrammas. Bet ko tad, ja mums vajag 100, 500, 1000 vai vairÄk? Nav jÄgas visu laiku uzturÄt un maksÄt tik daudz resursu. Å Ä« raksta 5. un 6. sadaÄ¼Ä mÄs apspriedÄ«sim risinÄjumus, kas ļauj palielinÄt mÄrogu, tÄdÄjÄdi ievÄrojami samazinot uzÅÄmuma izmaksas.
SelenoÄ«ds operÄtÄjsistÄmai Android
PÄc Selenoid kÄ tÄ«mekļa automatizÄcijas rÄ«ka panÄkumiem cilvÄki vÄlÄjÄs kaut ko lÄ«dzÄ«gu Android ierÄ«cÄm. Un tas notika - Selenoid tika izlaists ar Android atbalstu. No augsta lÄ«meÅa lietotÄju viedokļa darbÄ«bas princips ir lÄ«dzÄ«gs tÄ«mekļa automatizÄcijai. VienÄ«gÄ atŔķirÄ«ba ir tÄ, ka pÄrlÅ«kprogrammas konteineru vietÄ Selenoid darbojas Android emulatora konteineri. ManuprÄt, Å”obrÄ«d Å”is ir jaudÄ«gÄkais bezmaksas rÄ«ks Android testu paralÄlai palaiÅ”anai.
Es tieÅ”Äm negribÄtu runÄt par Ŕī rÄ«ka negatÄ«vajiem aspektiem, jo āāman tas ļoti patÄ«k. TomÄr joprojÄm ir tie paÅ”i trÅ«kumi, kas attiecas uz tÄ«mekļa automatizÄciju un ir saistÄ«ti ar mÄrogoÅ”anu. Papildus tam mums ir jÄrunÄ par vÄl vienu ierobežojumu, kas var bÅ«t pÄrsteigums, ja mÄs iestatÄm rÄ«ku pirmo reizi. Lai palaistu Android attÄlus, mums ir nepiecieÅ”ama fiziska maŔīna vai virtuÄlÄ maŔīna ar ligzdotas virtualizÄcijas atbalstu. PamÄcÄ«bÄ es parÄdÄ«Å”u, kÄ to iespÄjot Linux virtuÄlajÄ maŔīnÄ. TomÄr, ja esat MacOS lietotÄjs un vÄlaties lokÄli izvietot Selenoid, Android testus nevarÄs palaist. TaÄu jÅ«s vienmÄr varat lokÄli palaist Linux virtuÄlo maŔīnu ar konfigurÄtu āligzdoto virtualizÄcijuā un iekÅ”Ä izvietot Selenoid.
Å Ä« raksta kontekstÄ mÄs pievienosim 2 rÄ«kus, lai ilustrÄtu infrastruktÅ«ru. Tie ir Selenium režģis tÄ«mekļa testiem un Selenoid Android testiem. GitHub apmÄcÄ«bÄ es arÄ« parÄdÄ«Å”u, kÄ izmantot Selenoid tÄ«mekļa testu veikÅ”anai.
Ir arÄ« citi konteinerizÄcijas rÄ«ki, bet Docker ir vispopulÄrÄkais. Ja vÄlaties izmÄÄ£inÄt kaut ko citu, Åemiet vÄrÄ, ka rÄ«ki, kurus esam nodroÅ”inÄjuÅ”i paralÄlai SelÄna testu veikÅ”anai, nedarbosies.
KÄ jau minÄts, SelÄna režģī ir daudz modifikÄciju, piemÄram, ZalÄnijs.
4.CI/CD
ÄŖss tehnoloÄ£ijas apraksts
NepÄrtrauktas integrÄcijas prakse ir diezgan populÄra attÄ«stÄ«bÄ un ir lÄ«dzvÄrtÄ«ga versiju kontroles sistÄmÄm. Neskatoties uz to, man Ŕķiet, ka terminoloÄ£ijÄ valda neskaidrÄ«bas. Å ajÄ rindkopÄ es vÄlos aprakstÄ«t 3 Ŕīs tehnoloÄ£ijas modifikÄcijas no mana viedokļa. InternetÄ jÅ«s atradÄ«siet daudz rakstu ar dažÄdÄm interpretÄcijÄm, un tas ir pilnÄ«gi normÄli, ja jÅ«su viedoklis atŔķiras. VissvarÄ«gÄkais ir tas, ka esat uz viena viļÅa ar saviem kolÄÄ£iem.
TÄtad ir 3 termini: CI ā nepÄrtraukta integrÄcija, CD ā nepÄrtraukta piegÄde un atkal CD ā nepÄrtraukta izvietoÅ”ana. (TÄlÄk es izmantoÅ”u Å”os terminus angļu valodÄ). Katra modifikÄcija jÅ«su izstrÄdes konveijeram pievieno vairÄkas papildu darbÄ«bas. Bet vÄrds nepÄrtraukts (nepÄrtraukts) ir vissvarÄ«gÄkÄ lieta. Å ajÄ kontekstÄ mÄs domÄjam kaut ko, kas notiek no sÄkuma lÄ«dz beigÄm, bez pÄrtraukuma vai manuÄlas iejaukÅ”anÄs. ApskatÄ«sim CI & CD un CD Å”ajÄ kontekstÄ.
NepÄrtraukta integrÄcija tas ir pirmais evolÅ«cijas solis. PÄc jauna koda iesniegÅ”anas serverÄ« mÄs ceram saÅemt Ätru atgriezenisko saiti, ka mÅ«su izmaiÅas ir pareizas. Parasti CI ietver statisku koda analÄ«zes rÄ«ku darbÄ«bu un vienÄ«bas/iekÅ”Äjo API testus. Tas ļauj mums iegÅ«t informÄciju par mÅ«su kodu dažu sekunžu/minÅ«Å”u laikÄ.
NepÄrtraukta PiegÄde ir uzlabots solis, kurÄ mÄs veicam integrÄcijas/UI testus. TomÄr Å”ajÄ posmÄ mÄs nesaÅemam rezultÄtus tik Ätri kÄ ar CI. PirmkÄrt, Å”Äda veida testu pabeigÅ”ana prasa ilgÄku laiku. OtrkÄrt, pirms palaiÅ”anas mums ir jÄizvieto izmaiÅas testa/iestudÄÅ”anas vidÄ. TurklÄt, ja mÄs runÄjam par mobilo izstrÄdi, parÄdÄs papildu solis, lai izveidotu mÅ«su lietojumprogrammas bÅ«vÄjumu.
NepÄrtraukta izvietoÅ”ana pieÅem, ka mÄs automÄtiski izlaižam izmaiÅas ražoÅ”anÄ, ja iepriekÅ”ÄjÄs stadijÄs ir nokÄrtotas visas pieÅemÅ”anas pÄrbaudes. Papildus tam pÄc izlaiÅ”anas stadijas varat konfigurÄt dažÄdus posmus, piemÄram, veikt dÅ«mu testus ražoÅ”anÄ un apkopot interesÄjoÅ”os rÄdÄ«tÄjus. NepÄrtraukta izvietoÅ”ana ir iespÄjama tikai ar labu automÄtisko testu pÄrklÄjumu. Ja ir nepiecieÅ”ama manuÄla iejaukÅ”anÄs, tostarp testÄÅ”ana, tad tÄ vairs nav NepÄrtraukts (nepÄrtraukti). Tad mÄs varam teikt, ka mÅ«su cauruļvads atbilst tikai nepÄrtrauktÄs piegÄdes praksei.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
Å ajÄ sadaÄ¼Ä man jÄpaskaidro, ka, runÄjot par pilnÄ«gu lietotÄja saskarnes testiem, tas nozÄ«mÄ, ka mums ir jÄizvieto savas izmaiÅas un saistÄ«tie pakalpojumi, lai testÄtu vidi. NepÄrtraukta integrÄcija - process nav piemÄrojams Å”im uzdevumam, un mums ir jÄrÅ«pÄjas par vismaz nepÄrtrauktas piegÄdes prakses ievieÅ”anu. NepÄrtrauktai izvietoÅ”anai ir jÄga arÄ« UI testu kontekstÄ, ja mÄs gatavojamies tos palaist ražoÅ”anÄ.
Un pirms mÄs aplÅ«kojam arhitektÅ«ras izmaiÅu ilustrÄciju, es vÄlos teikt dažus vÄrdus par GitLab CI. AtŔķirÄ«bÄ no citiem CI/CD rÄ«kiem, GitLab nodroÅ”ina attÄlo repozitoriju un daudzas citas papildu funkcijas. TÄdÄjÄdi GitLab ir vairÄk nekÄ CI. Tas ietver pirmkoda pÄrvaldÄ«bu, Agile pÄrvaldÄ«bu, CI/CD konveijerus, reÄ£istrÄÅ”anas rÄ«kus un metrikas vÄkÅ”anu. GitLab arhitektÅ«ra sastÄv no Gitlab CI/CD un GitLab Runner. Å eit ir Ä«ss apraksts no oficiÄlÄs vietnes:
Gitlab CI/CD ir tÄ«mekļa lietojumprogramma ar API, kas saglabÄ savu stÄvokli datu bÄzÄ, pÄrvalda projektus/bÅ«vÄjumus un nodroÅ”ina lietotÄja saskarni. GitLab Runner ir lietojumprogramma, kas apstrÄdÄ bÅ«vÄjumus. To var izvietot atseviŔķi, un tas darbojas ar GitLab CI/CD, izmantojot API. Lai veiktu testus, jums ir nepiecieÅ”ams gan Gitlab gadÄ«jums, gan Runner.
Å ajÄ sadaÄ¼Ä mÄs runÄsim par populÄru tendenci, ko sauc par āpubliskajiem mÄkoÅiemā. Neskatoties uz milzÄ«gajÄm priekÅ”rocÄ«bÄm, ko sniedz iepriekÅ” aprakstÄ«tÄs virtualizÄcijas un konteinerizÄcijas tehnoloÄ£ijas, mums joprojÄm ir nepiecieÅ”ami skaitļoÅ”anas resursi. UzÅÄmumi iegÄdÄjas dÄrgus serverus vai Ä«rÄ datu centrus, taÄu Å”ajÄ gadÄ«jumÄ ir jÄveic aprÄÄ·ini (dažkÄrt nereÄli), cik resursu mums bÅ«s nepiecieÅ”ams, vai tos izmantosim 24/7 un kÄdiem mÄrÄ·iem. PiemÄram, ražoÅ”anai nepiecieÅ”ams serveris, kas darbojas XNUMX/XNUMX, bet vai mums ir nepiecieÅ”ami lÄ«dzÄ«gi resursi testÄÅ”anai Ärpus darba laika? Tas ir atkarÄ«gs arÄ« no veicamÄs pÄrbaudes veida. PiemÄrs varÄtu bÅ«t slodzes/stresa testi, kurus plÄnojam veikt Ärpus darba laika, lai nÄkamajÄ dienÄ iegÅ«tu rezultÄtus. Bet noteikti XNUMX/XNUMX servera pieejamÄ«ba nav nepiecieÅ”ama pilnÄ«gai automatizÄtai pÄrbaudei un jo Ä«paÅ”i ne manuÄlÄs testÄÅ”anas vidÄm. Å ÄdÄm situÄcijÄm bÅ«tu labi pÄc pieprasÄ«juma iegÅ«t tik daudz resursu, cik nepiecieÅ”ams, tos izmantot un pÄrtraukt maksÄt, kad tie vairs nav vajadzÄ«gi. TurklÄt bÅ«tu lieliski tos saÅemt uzreiz, veicot dažus peles klikŔķus vai palaižot pÄris skriptus. Å im nolÅ«kam tiek izmantoti publiskie mÄkoÅi. ApskatÄ«sim definÄ«ciju:
āPubliskais mÄkonis ir definÄts kÄ skaitļoÅ”anas pakalpojumi, ko publiskajÄ internetÄ piedÄvÄ treÅ”o puÅ”u pakalpojumu sniedzÄji, padarot tos pieejamus ikvienam, kas vÄlas tos izmantot vai iegÄdÄties. Tie var bÅ«t bezmaksas vai pÄrdoti pÄc pieprasÄ«juma, ļaujot klientiem maksÄt tikai par lietojumu par CPU cikliem, krÄtuvi vai joslas platumu, ko viÅi patÄrÄ."
PastÄv viedoklis, ka publiskie mÄkoÅi ir dÄrgi. TaÄu viÅu galvenÄ ideja ir samazinÄt uzÅÄmuma izmaksas. KÄ minÄts iepriekÅ”, publiskie mÄkoÅi ļauj iegÅ«t resursus pÄc pieprasÄ«juma un maksÄt tikai par to lietoÅ”anas laiku. TÄpat dažkÄrt aizmirstam, ka darbinieki saÅem algas, un arÄ« speciÄlisti ir dÄrgs resurss. JÄÅem vÄrÄ, ka publiskie mÄkoÅi ievÄrojami atvieglo infrastruktÅ«ras atbalstu, kas ļauj inženieriem koncentrÄties uz svarÄ«gÄkiem uzdevumiem.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
KÄdi konkrÄti resursi mums ir nepiecieÅ”ami pilnÄ«gai lietotÄja saskarnes testiem? BÅ«tÄ«bÄ tÄs ir virtuÄlÄs maŔīnas vai kopas (par Kubernetes mÄs runÄsim nÄkamajÄ sadaļÄ) pÄrlÅ«kprogrammu un emulatoru darbinÄÅ”anai. Jo vairÄk pÄrlÅ«kprogrammu un emulatoru mÄs vÄlamies darbinÄt vienlaikus, jo vairÄk nepiecieÅ”ams CPU un atmiÅa, un jo vairÄk naudas mums par to ir jÄmaksÄ. TÄdÄjÄdi publiskie mÄkoÅi testu automatizÄcijas kontekstÄ Ä¼auj mums pÄc pieprasÄ«juma darbinÄt lielu skaitu (100, 200, 1000...) pÄrlÅ«kprogrammu/emulatoru, pÄc iespÄjas ÄtrÄk iegÅ«t testa rezultÄtus un pÄrstÄt maksÄt par tik neprÄtÄ«gi resursietilpÄ«gu. jauda.
PopulÄrÄkie mÄkoÅa pakalpojumu sniedzÄji ir Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP). PamÄcÄ«bÄ ir sniegti piemÄri, kÄ lietot GCP, taÄu kopumÄ nav nozÄ«mes tam, ko izmantojat automatizÄcijas uzdevumiem. Tie visi nodroÅ”ina aptuveni vienÄdu funkcionalitÄti. Parasti, lai izvÄlÄtos pakalpojumu sniedzÄju, vadÄ«ba koncentrÄjas uz uzÅÄmuma vispÄrÄjo infrastruktÅ«ru un biznesa prasÄ«bÄm, kas ir Ärpus Ŕī raksta darbÄ«bas jomas. AutomatizÄcijas inženieriem interesantÄk bÅ«s salÄ«dzinÄt mÄkoÅpakalpojumu sniedzÄju izmantoÅ”anu ar mÄkoÅu platformu izmantoÅ”anu tieÅ”i testÄÅ”anas nolÅ«kos, piemÄram, Sauce Labs, BrowserStack, BitBar u.c. TÄpÄc darÄ«sim to arÄ« mÄs! ManuprÄt, Sauce Labs ir slavenÄkÄ mÄkoÅu testÄÅ”anas ferma, tÄpÄc izmantoju to salÄ«dzinÄÅ”anai.
GCP vs Sauce Labs automatizÄcijas nolÅ«kos:
IedomÄsimies, ka mums vienlaikus jÄpalaiž 8 tÄ«mekļa testi un 8 Android testi. Å im nolÅ«kam mÄs izmantosim GCP un palaidÄ«sim 2 virtuÄlÄs maŔīnas ar Selenoid. PirmajÄ mÄs pacelsim 8 konteinerus ar pÄrlÅ«kprogrammÄm. OtrajÄ ir 8 konteineri ar emulatoriem. ApskatÄ«sim cenas:
Lai palaistu vienu konteineru ar Chrome, mums ir nepiecieÅ”ams n1-standarta-1 auto. Android gadÄ«jumÄ tÄ bÅ«s n1-standarta-4 vienam emulatoram. Faktiski elastÄ«gÄks un lÄtÄks veids ir iestatÄ«t konkrÄtas lietotÄja vÄrtÄ«bas CPU/Memory, taÄu Å”obrÄ«d tas nav svarÄ«gi, lai salÄ«dzinÄtu ar Sauce Labs.
Un Ŕeit ir Sauce Labs lietoŔanas tarifi:
Es uzskatu, ka jÅ«s jau esat pamanÄ«juÅ”i atŔķirÄ«bu, taÄu es joprojÄm sniegÅ”u tabulu ar mÅ«su uzdevuma aprÄÄ·iniem:
NepiecieÅ”amie resursi Katru mÄnesi Darba stundas(8:8āXNUMX:XNUMX) Darba stundas+ Paredzams
GCP tīmeklim
n1-standarta-1 x 8 = n1-standarta-8
$194.18
23 dienas * 12 h * 0.38 = 104.88 ASV dolÄri
23 dienas * 12 h * 0.08 = 22.08 ASV dolÄri
Sauce Labs for Web
Virtual Cloud8 paralÄlie testi
$1.559
SÄkot no
SÄkot no
GCP operÄtÄjsistÄmai Android
n1-standarta-4 x 8: n1-standarta-16
$776.72
23 dienas * 12 h * 1.52 = 419.52 ASV dolÄri
23 dienas * 12 h * 0.32 = 88.32 ASV dolÄri
Sauce Labs Android ierÄ«cÄm
Real Device Cloud 8 paralÄlie testi
$1.999
SÄkot no
SÄkot no
KÄ redzat, izmaksu atŔķirÄ«ba ir milzÄ«ga, it Ä«paÅ”i, ja testus veicat tikai divpadsmit stundu darba periodÄ. Bet jÅ«s varat samazinÄt izmaksas vÄl vairÄk, ja izmantojat iepriekÅ”Äjas iespÄjas. Kas tas ir?
PriekÅ”laicÄ«ga virtuÄlÄ maŔīna ir gadÄ«jums, ko varat izveidot un palaist par daudz zemÄku cenu nekÄ parastÄs instances. TomÄr Compute Engine var pÄrtraukt (iepriekÅ” novÄrst) Å”os gadÄ«jumus, ja tai ir nepiecieÅ”ama piekļuve Å”iem resursiem citu uzdevumu veikÅ”anai. Paredzamie gadÄ«jumi ir pÄrmÄrÄ«ga Compute Engine jauda, āātÄpÄc to pieejamÄ«ba mainÄs atkarÄ«bÄ no lietojuma.
Ja jÅ«su lietotnes ir izturÄ«gas pret kļūmÄm un var izturÄt iespÄjamos gadÄ«jumu priekÅ”apmaksas gadÄ«jumus, tad, izmantojot iepriekÅ”Äjas darbÄ«bas, var ievÄrojami samazinÄt Compute Engine izmaksas. PiemÄram, pakeÅ”apstrÄdes darbi var tikt palaisti priekÅ”laicÄ«gÄs instancÄs. Ja daži no Å”iem gadÄ«jumiem tiek pÄrtraukti apstrÄdes laikÄ, darbs palÄninÄs, bet neapstÄjas pilnÄ«bÄ. Preemptible instances pabeidz jÅ«su pakeÅ”u apstrÄdes uzdevumus, neuzliekot papildu darba slodzi esoÅ”ajiem gadÄ«jumiem un neprasot maksÄt pilnu cenu par papildu parastajiem gadÄ«jumiem.
Un tas joprojÄm nav beidzies! PatiesÄ«bÄ esmu pÄrliecinÄts, ka neviens neveic testus 12 stundas bez pÄrtraukuma. Un ja tÄ, tad jÅ«s varat automÄtiski palaist un apturÄt virtuÄlÄs maŔīnas, kad tÄs nav vajadzÄ«gas. Faktiskais lietoÅ”anas laiks var tikt samazinÄts lÄ«dz 6 stundÄm dienÄ. Tad maksÄjums mÅ«su uzdevuma kontekstÄ samazinÄsies lÄ«dz 11 USD mÄnesÄ« par 8 pÄrlÅ«kprogrammÄm. Vai tas nav brÄ«niŔķīgi? Bet ar iepriekÅ” novÄrÅ”amÄm maŔīnÄm mums jÄbÅ«t uzmanÄ«giem un gataviem pÄrtraukumiem un nestabilitÄtei, lai gan Ŕīs situÄcijas var nodroÅ”inÄt un apstrÄdÄt programmatÅ«rÄ. Tas ir tÄ vÄrts!
Bet es nekÄdÄ gadÄ«jumÄ nesaku "nekad neizmantojiet mÄkoÅa pÄrbaudes fermas". ViÅiem ir vairÄkas priekÅ”rocÄ«bas. PirmkÄrt, Ŕī nav tikai virtuÄla maŔīna, bet gan pilnvÄrtÄ«gs testÄÅ”anas automatizÄcijas risinÄjums ar funkcionalitÄtes komplektu, kas tiek izÅemts no kastes: attÄlÄ piekļuve, žurnÄli, ekrÄnuzÅÄmumi, video ierakstÄ«Å”ana, dažÄdas pÄrlÅ«kprogrammas un fiziskas mobilÄs ierÄ«ces. DaudzÄs situÄcijÄs tÄ var bÅ«t bÅ«tiska eleganta alternatÄ«va. TestÄÅ”anas platformas ir Ä«paÅ”i noderÄ«gas IOS automatizÄcijai, kad publiskie mÄkoÅi var piedÄvÄt tikai Linux/Windows sistÄmas. Bet par iOS mÄs runÄsim nÄkamajos rakstos. Iesaku vienmÄr skatÄ«ties uz situÄciju un sÄkt no uzdevumiem: dažos gadÄ«jumos lÄtÄk un efektÄ«vÄk ir izmantot publiskos mÄkoÅus, savukÄrt citos testa platformas noteikti ir iztÄrÄtÄs naudas vÄrtas.
Man ir labas ziÅas - esam gandrÄ«z raksta beigÄs! Å obrÄ«d mÅ«su automatizÄcijas infrastruktÅ«ru veido tÄ«mekļa un Android testi, kurus paralÄli veicam caur GitLab CI, izmantojot Docker iespÄjotus rÄ«kus: Selenium grid un Selenoid. TurklÄt mÄs izmantojam virtuÄlÄs maŔīnas, kas izveidotas, izmantojot GCP, lai mitinÄtu konteinerus ar pÄrlÅ«kprogrammÄm un emulatoriem. Lai samazinÄtu izmaksas, mÄs iedarbinÄm Ŕīs virtuÄlÄs maŔīnas tikai pÄc pieprasÄ«juma un pÄrtraucam tÄs, kad testÄÅ”ana netiek veikta. Vai ir vÄl kaut kas, kas var uzlabot mÅ«su infrastruktÅ«ru? Atbilde ir jÄ! IepazÄ«stieties ar Kubernetes (K8s)!
Vispirms apskatÄ«sim, kÄ vÄrdi orÄ·estrÄÅ”ana, klasteris un Kubernetes ir saistÄ«ti viens ar otru. AugstÄ lÄ«menÄ« orÄ·estrÄÅ”ana ir sistÄma, kas izvieto un pÄrvalda lietojumprogrammas. Testa automatizÄcijai Å”Ädas konteineru lietojumprogrammas ir SelÄna režģis un Selenoid. Docker un K8 papildina viens otru. Pirmais tiek izmantots lietojumprogrammu izvietoÅ”anai, otrais - orÄ·estrÄÅ”anai. SavukÄrt K8s ir klasteris. Klastera uzdevums ir izmantot virtuÄlÄs maŔīnas kÄ mezglus, kas ļauj vienÄ serverÄ« (klasterÄ) instalÄt dažÄdas funkcionalitÄtes, programmas un servisus. Ja kÄds no mezgliem neizdodas, tiks izmantoti citi mezgli, kas nodroÅ”ina mÅ«su lietojumprogrammas nepÄrtrauktu darbÄ«bu. Papildus tam K8s ir svarÄ«ga ar mÄrogoÅ”anu saistÄ«ta funkcionalitÄte, pateicoties kurai mÄs automÄtiski iegÅ«stam optimÄlo resursu daudzumu, pamatojoties uz slodzi un noteiktajiem ierobežojumiem.
PatiesÄ«bÄ manuÄla Kubernetes izvietoÅ”ana no nulles nepavisam nav mazsvarÄ«gs uzdevums. Es atstÄÅ”u saiti uz slaveno ceļvedi "Kubernetes The Hard Way", un, ja jÅ«s interesÄ, varat to praktizÄt. Bet, par laimi, ir alternatÄ«vas metodes un rÄ«ki. VienkÄrÅ”Äkais veids ir izmantot Google Kubernetes Engine (GKE) GCP, kas ļaus jums iegÅ«t gatavu klasteru ar dažiem klikŔķiem. Es iesaku izmantot Å”o pieeju, lai sÄktu mÄcÄ«Å”anos, jo tÄ Ä¼aus jums koncentrÄties uz mÄcÄ«Å”anos, kÄ izmantot K8s saviem uzdevumiem, nevis mÄcÄ«ties, kÄ iekÅ”ÄjÄs sastÄvdaļas ir jÄintegrÄ savÄ starpÄ.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
Apskatīsim dažas nozīmīgas funkcijas, ko nodroŔina K8s:
dinamiskÄ mÄrogoÅ”ana: samazina resursu izmaksas, kas tiek izmantotas tikai pÄc pieprasÄ«juma;
paÅ”dziedinÄÅ”anÄs: automÄtiska pÄkstu atgÅ«Å”ana (kÄ rezultÄtÄ tiek atjaunoti arÄ« konteineri);
atjauninÄjumu izvÄrÅ”ana un izmaiÅu atsaukÅ”ana bez dÄ«kstÄves: atjauninÄÅ”anas rÄ«ki, pÄrlÅ«kprogrammas un emulatori nepÄrtrauc paÅ”reizÄjo lietotÄju darbu
Bet K8s joprojÄm nav sudraba lode. Lai saprastu visas priekÅ”rocÄ«bas un ierobežojumus mÅ«su apsvÄrto rÄ«ku kontekstÄ (SelÄna režģis, Selenoid), mÄs Ä«si apspriedÄ«sim K8 struktÅ«ru. Klasteris satur divu veidu mezglus: galveno mezglu un darbinieku mezglus. Galvenie mezgli ir atbildÄ«gi par pÄrvaldÄ«bas, izvietoÅ”anas un plÄnoÅ”anas lÄmumiem. Darbinieku mezgli ir vieta, kur tiek darbinÄtas lietojumprogrammas. Mezgli satur arÄ« konteinera izpildlaika vidi. MÅ«su gadÄ«jumÄ tas ir Docker, kas ir atbildÄ«gs par darbÄ«bÄm, kas saistÄ«tas ar konteineriem. Bet ir arÄ« alternatÄ«vi risinÄjumi, piemÄram konteinerÄ. Ir svarÄ«gi saprast, ka mÄrogoÅ”ana vai paÅ”atveseļoÅ”anÄs neattiecas tieÅ”i uz konteineriem. Tas tiek Ä«stenots, pievienojot/samazinot podiÅu skaitu, kuros savukÄrt ir konteineri (parasti viens konteiners katrÄ podÄ, bet atkarÄ«bÄ no uzdevuma var bÅ«t arÄ« vairÄk). Augsta lÄ«meÅa hierarhija sastÄv no strÄdnieku mezgliem, kuru iekÅ”pusÄ ir pÄkstis, kuru iekÅ”pusÄ ir pacelti konteineri.
MÄrogoÅ”anas lÄ«dzeklis ir galvenais, un to var lietot gan klastera mezglu pÅ«la mezgliem, gan mezgliem. Ir 2 mÄrogoÅ”anas veidi, kas attiecas gan uz mezgliem, gan uz pÄkstiem. Pirmais veids ir horizontÄls ā mÄrogoÅ”ana notiek, palielinot mezglu/podiÅu skaitu. Å is veids ir vÄlams. Otrais veids attiecÄ«gi ir vertikÄls. MÄrogoÅ”ana tiek veikta, palielinot mezglu/podiÅu izmÄru, nevis to skaitu.
Tagad aplÅ«kosim mÅ«su rÄ«kus iepriekÅ” minÄto nosacÄ«jumu kontekstÄ.
SelÄna režģis
KÄ minÄts iepriekÅ”, selÄna režģis ir ļoti populÄrs rÄ«ks, un nav pÄrsteigums, ka tas ir ievietots konteineros. TÄpÄc nav pÄrsteigums, ka SelÄna režģi var izvietot K8s. PiemÄrs, kÄ to izdarÄ«t, ir atrodams oficiÄlajÄ K8s repozitorijÄ. KÄ parasti, sadaļas beigÄs pievienoju saites. TurklÄt pamÄcÄ«bÄ ir parÄdÄ«ts, kÄ to izdarÄ«t programmÄ Terraform. Ir arÄ« norÄdÄ«jumi par to, kÄ mÄrogot to aplikumu skaitu, kuros ir pÄrlÅ«kprogrammas konteineri. Bet automÄtiskÄs mÄrogoÅ”anas funkcija K8s kontekstÄ joprojÄm nav pilnÄ«gi acÄ«mredzams uzdevums. UzsÄkot studijas, neatradu nekÄdus praktiskus norÄdÄ«jumus vai ieteikumus. PÄc vairÄkiem pÄtÄ«jumiem un eksperimentiem ar DevOps komandas atbalstu mÄs izvÄlÄjÄmies pieeju konteineru pacelÅ”anai ar nepiecieÅ”amajiem pÄrlÅ«kiem vienÄ podÄ, kas atrodas viena darba mezgla iekÅ”pusÄ. Å Ä« metode ļauj pielietot mezglu horizontÄlÄs mÄrogoÅ”anas stratÄÄ£iju, palielinot to skaitu. Ceru, ka nÄkotnÄ tas mainÄ«sies un mÄs redzÄsim arvien vairÄk aprakstu par labÄkÄm pieejÄm un gataviem risinÄjumiem, Ä«paÅ”i pÄc Selenium grid 4 izdoÅ”anas ar mainÄ«tu iekÅ”Äjo arhitektÅ«ru.
Selenoīds:
SelenoÄ«da izvietoÅ”ana K8s paÅ”laik ir lielÄkÄ vilÅ”anÄs. Tie nav saderÄ«gi. TeorÄtiski mÄs varam pacelt Selenoid konteineru podÄ, bet, kad Selenoid sÄks palaist konteinerus ar pÄrlÅ«kprogrammÄm, tie joprojÄm bÅ«s tajÄ paÅ”Ä podÄ. Tas padara mÄrogoÅ”anu neiespÄjamu, un rezultÄtÄ Selenoid darbs klasterÄ« neatŔķirsies no darba virtuÄlajÄ maŔīnÄ. StÄsta beigas.
mÄness:
Zinot Å”o vÄjo vietu, strÄdÄjot ar Selenoid, izstrÄdÄtÄji izlaida jaudÄ«gÄku rÄ«ku ar nosaukumu Moon. Å is rÄ«ks sÄkotnÄji tika izstrÄdÄts darbam ar Kubernetes, un tÄpÄc var un vajadzÄtu izmantot automÄtiskÄs mÄrogoÅ”anas funkciju. TurklÄt es teiktu, ka Å”obrÄ«d tÄ ir vienÄ«gais rÄ«ks SelÄna pasaulÄ, kuram ir sÄkotnÄjÄ K8s klasteru atbalsts (vairs nav pieejams, skatiet nÄkamo rÄ«ku ). GalvenÄs Moon funkcijas, kas nodroÅ”ina Å”o atbalstu, ir:
PilnÄ«gi bezvalstnieks. SelenoÄ«ds saglabÄ atmiÅÄ informÄciju par paÅ”laik palaistajÄm pÄrlÅ«kprogrammas sesijÄm. Ja kÄda iemesla dÄļ tÄ process avarÄ - visas darbÄ«bas sesijas tiek zaudÄtas. MÄnesim gluži pretÄji nav iekÅ”Äja stÄvokļa, un to var atkÄrtot datu centros. PÄrlÅ«kprogrammas sesijas paliek aktÄ«vas pat tad, ja viena vai vairÄkas kopijas pazÅ«d.
TÄtad, MÄness ir lielisks risinÄjums, taÄu ir viena problÄma: tas nav bezmaksas. Cena ir atkarÄ«ga no sesiju skaita. Bez maksas varat palaist tikai 0ā4 sesijas, kas nav Ä«paÅ”i noderÄ«gi. Bet, sÄkot no piektÄs sesijas, jums bÅ«s jÄmaksÄ USD 5 par katru. SituÄcija dažÄdos uzÅÄmumos var atŔķirties, taÄu mÅ«su gadÄ«jumÄ Moon lietoÅ”ana ir bezjÄdzÄ«ga. KÄ jau aprakstÄ«ju iepriekÅ”, mÄs varam darbinÄt virtuÄlÄs maŔīnas ar Selenium Grid pÄc pieprasÄ«juma vai palielinÄt mezglu skaitu klasterÄ«. Aptuveni vienam konveijeram mÄs palaižam 500 pÄrlÅ«kprogrammas un apturam visus resursus pÄc testu pabeigÅ”anas. Ja mÄs izmantotu Moon, mums bÅ«tu jÄmaksÄ papildu 500 x 5 = 2500 USD mÄnesÄ« neatkarÄ«gi no tÄ, cik bieži mÄs veicam testus. Es atkal nesaku, ka neizmantojiet Moon. JÅ«su uzdevumiem tas var bÅ«t neaizstÄjams risinÄjums, piemÄram, ja jÅ«su organizÄcijÄ ir daudz projektu/komandu un jums ir nepiecieÅ”ams milzÄ«gs kopÄ«gs klasteris visiem. KÄ vienmÄr, beigÄs atstÄju saiti un iesaku veikt visus nepiecieÅ”amos aprÄÄ·inus sava uzdevuma kontekstÄ.
Callisto: (UzmanÄ«bu! Tas nav oriÄ£inÄlajÄ rakstÄ un ir ietverts tikai tulkojumÄ krievu valodÄ)
KÄ jau teicu, SelÄns ir ļoti populÄrs rÄ«ks, un IT joma attÄ«stÄs ļoti strauji. KamÄr strÄdÄju pie tulkoÅ”anas, tÄ«meklÄ« parÄdÄ«jÄs jauns daudzsoloÅ”s rÄ«ks Callisto (sveiki Cypress un citi SelÄna slepkavas). Tas darbojas sÄkotnÄji ar K8s un ļauj darbinÄt Selenoid konteinerus, kas sadalÄ«ti pa mezgliem. Viss darbojas uzreiz no kastes, ieskaitot automÄtisko mÄrogoÅ”anu. Fantastiski, bet vajag pÄrbaudÄ«t. Man jau ir izdevies izvietot Å”o rÄ«ku un veikt vairÄkus eksperimentus. Bet ir pÄragri izdarÄ«t secinÄjumus, pÄc rezultÄtu saÅemÅ”anas lielÄ attÄlumÄ, iespÄjams, es izdarÄ«Å”u pÄrskatu nÄkamajos rakstos. PagaidÄm es atstÄju tikai saites neatkarÄ«giem pÄtÄ«jumiem.
Un tagad mÄs nonÄkam pie pÄdÄjÄs sadaļas. Parasti par Å”o tehnoloÄ£iju un saistÄ«tiem uzdevumiem nav atbildÄ«gi automatizÄcijas inženieri. Un tam ir iemesli. PirmkÄrt, daudzÄs organizÄcijÄs infrastruktÅ«ras jautÄjumi ir DevOps departamenta pÄrziÅÄ, un izstrÄdes komandÄm nav Ä«sti svarÄ«gi, kas nodroÅ”ina cauruļvada darbÄ«bu un kÄ viss ar to saistÄ«tais ir jÄatbalsta. OtrkÄrt, bÅ«sim godÄ«gi, Infrastructure as Code (IaC) prakse joprojÄm nav pieÅemta daudzos uzÅÄmumos. TaÄu tÄ noteikti ir kļuvusi par populÄru tendenci un ir svarÄ«gi censties iesaistÄ«ties ar to saistÄ«tajos procesos, pieejÄs un rÄ«kos. Vai vismaz esiet lietas kursÄ.
SÄksim ar Ŕīs pieejas izmantoÅ”anas motivÄciju. MÄs jau esam apsprieduÅ”i, ka, lai veiktu testus GitlabCI, mums bÅ«s nepiecieÅ”ami vismaz resursi, lai palaistu Gitlab Runner. Un, lai palaistu konteinerus ar pÄrlÅ«kprogrammÄm/emulatoriem, mums ir jÄrezervÄ virtuÄlÄ maŔīna vai klasteris. Papildus testÄÅ”anas resursiem mums ir nepiecieÅ”ama ievÄrojama jauda, āālai atbalstÄ«tu izstrÄdes, iestudÄÅ”anas, ražoÅ”anas vides, kas ietver arÄ« datu bÄzes, automÄtiskos grafikus, tÄ«kla konfigurÄcijas, slodzes balansÄtÄjus, lietotÄju tiesÄ«bas utt. Galvenais jautÄjums ir pÅ«les, kas nepiecieÅ”amas, lai to visu atbalstÄ«tu. Ir vairÄki veidi, kÄ mÄs varam veikt izmaiÅas un ieviest atjauninÄjumus. PiemÄram, GCP kontekstÄ mÄs varam izmantot UI konsoli pÄrlÅ«kprogrammÄ un veikt visas darbÄ«bas, noklikŔķinot uz pogÄm. AlternatÄ«va bÅ«tu izmantot API izsaukumus, lai mijiedarbotos ar mÄkoÅa entÄ«tijÄm, vai izmantot komandrindas utilÄ«tu gcloud, lai veiktu vÄlamÄs manipulÄcijas. TaÄu ar patieÅ”Äm lielu skaitu dažÄdu entÄ«tiju un infrastruktÅ«ras elementu kļūst grÅ«ti vai pat neiespÄjami veikt visas darbÄ«bas manuÄli. TurklÄt visas Ŕīs manuÄlÄs darbÄ«bas ir nekontrolÄjamas. MÄs nevaram tos iesniegt pÄrskatÄ«Å”anai pirms izpildes, izmantot versiju kontroles sistÄmu un Ätri atsaukt izmaiÅas, kas izraisÄ«ja incidentu. Lai atrisinÄtu Å”Ädas problÄmas, inženieri izveidoja un izveido automÄtiskus bash/shell skriptus, kas nav daudz labÄki par iepriekÅ”ÄjÄm metodÄm, jo āātos nav tik viegli Ätri lasÄ«t, saprast, uzturÄt un modificÄt procesuÄlÄ stilÄ.
Å ajÄ rakstÄ un pamÄcÄ«bÄ es izmantoju 2 rÄ«kus, kas saistÄ«ti ar IaC praksi. Tie ir Terraform un Ansible. Daži cilvÄki uzskata, ka nav jÄgas tos izmantot vienlaikus, jo to funkcionalitÄte ir lÄ«dzÄ«ga un tÄs ir savstarpÄji aizstÄjamas. Bet fakts ir tÄds, ka sÄkotnÄji viÅiem tiek doti pavisam citi uzdevumi. Un to, ka Å”iem rÄ«kiem vajadzÄtu papildinÄt vienam otru, kopÄ«gÄ prezentÄcijÄ apstiprinÄja izstrÄdÄtÄji, kas pÄrstÄv HashiCorp un RedHat. KonceptuÄlÄ atŔķirÄ«ba ir tÄda, ka Terraform ir nodroÅ”inÄjuma rÄ«ks paÅ”u serveru pÄrvaldÄ«bai. Kaut arÄ« Ansible ir konfigurÄcijas pÄrvaldÄ«bas rÄ«ks, kura uzdevums ir instalÄt, konfigurÄt un pÄrvaldÄ«t programmatÅ«ru Å”ajos serveros.
VÄl viena Å”o rÄ«ku atŔķirÄ«gÄ iezÄ«me ir kodÄÅ”anas stils. AtŔķirÄ«bÄ no bash un Ansible, Terraform izmanto deklaratÄ«vu stilu, pamatojoties uz vÄlamÄ beigu stÄvokļa aprakstu, kas jÄsasniedz izpildes rezultÄtÄ. PiemÄram, ja mÄs izveidosim 10 VM un piemÄrosim izmaiÅas, izmantojot Terraform, tad mÄs iegÅ«sim 10 VM. Ja mÄs palaidÄ«sim skriptu vÄlreiz, nekas nenotiks, jo mums jau ir 10 VM, un Terraform par to zina, jo saglabÄ paÅ”reizÄjo infrastruktÅ«ras stÄvokli stÄvokļa failÄ. Bet Ansible izmanto procesuÄlu pieeju, un, ja lÅ«gsit tai izveidot 10 VM, tad pirmajÄ palaiÅ”anas reizÄ mÄs saÅemsim 10 VM, lÄ«dzÄ«gi kÄ Terraform. Bet pÄc restartÄÅ”anas mums jau bÅ«s 20 VM. Å Ä« ir bÅ«tiskÄ atŔķirÄ«ba. ProcedÅ«ras stilÄ mÄs nesaglabÄjam paÅ”reizÄjo stÄvokli un vienkÄrÅ”i aprakstÄm veicamo darbÄ«bu secÄ«bu. Protams, mÄs varam risinÄt dažÄdas situÄcijas, pievienot vairÄkas pÄrbaudes par resursu esamÄ«bu un paÅ”reizÄjo stÄvokli, taÄu nav jÄgas tÄrÄt savu laiku un pielikt spÄkus Ŕīs loÄ£ikas savaldÄ«Å”anai. TurklÄt tas palielina kļūdu iespÄjamÄ«bu.
Apkopojot visu iepriekÅ” minÄto, varam secinÄt, ka Terraform un deklaratÄ«vÄ notÄcija ir piemÄrotÄks rÄ«ks serveru nodroÅ”inÄÅ”anai. Bet labÄk konfigurÄcijas pÄrvaldÄ«bas darbu deleÄ£Ät Ansible. Å emot to vÄrÄ, aplÅ«kosim lietoÅ”anas gadÄ«jumus automatizÄcijas kontekstÄ.
VÄrtÄ«ba automatizÄcijas infrastruktÅ«rai
VienÄ«gais, kas Å”eit ir jÄsaprot, ir tas, ka testÄÅ”anas automatizÄcijas infrastruktÅ«ra ir jÄuzskata par visas uzÅÄmuma infrastruktÅ«ras daļu. Tas nozÄ«mÄ, ka visas IaC prakses ir jÄpiemÄro globÄli visas organizÄcijas resursiem. Tas, kurÅ” par to ir atbildÄ«gs, ir atkarÄ«gs no jÅ«su procesiem. DevOps komanda Å”ajos jautÄjumos ir pieredzÄjuÅ”Äka, viÅi redz visu notiekoÅ”o. TaÄu kvalitÄtes nodroÅ”inÄÅ”anas inženieri vairÄk iesaistÄs Äku automatizÄcijas un cauruļvada uzbÅ«ves procesÄ, kas ļauj labÄk saskatÄ«t visas nepiecieÅ”amÄs izmaiÅas un uzlaboÅ”anas iespÄjas. LabÄkais variants ir strÄdÄt kopÄ, apmainÄ«ties ar zinÄÅ”anÄm un idejÄm, lai sasniegtu gaidÄ«to rezultÄtu.
Å eit ir daži Terraform un Ansible izmantoÅ”anas piemÄri testÄÅ”anas automatizÄcijas un iepriekÅ” apspriesto rÄ«ku kontekstÄ.
1. Aprakstiet nepiecieŔamos VM un klasteru raksturlielumus un parametrus, izmantojot Terraform.
2. Izmantojot Ansible, instalÄjiet testÄÅ”anai nepiecieÅ”amos rÄ«kus: docker, Selenoid, Selenium Grid un lejupielÄdÄjiet nepiecieÅ”amÄs pÄrlÅ«kprogrammu/emulatoru versijas.
3. Izmantojot Terraform, aprakstiet virtuÄlÄs maŔīnas Ä«paŔības, kurÄ tiks palaists GitLab Runner.
4. InstalÄjiet GitLab Runner un nepiecieÅ”amos pavadoÅ”os rÄ«kus, izmantojot Ansible, iestatiet iestatÄ«jumus un konfigurÄcijas.
Līdzīgi ieguvumi ar attīstības infrastruktūru
Visas koda versiju izveides priekŔrocības
Viegli veikt izmaiÅas un uzturÄt
PilnÄ«bÄ automatizÄts
Domu karŔu diagrammas: infrastruktūras evolūcija
1. darbÄ«ba: vietÄjais
2. darbība: VCS
3. darbība: konteineru ievietoŔana
4. darbība: CI/CD
5. darbÄ«ba: mÄkoÅu platformas
6. darbÄ«ba: OrÄ·estrÄcija
7. darbība: IaC
Ko tÄlÄk?
TÄtad, Å”is ir raksta beigas. Bet nobeigumÄ es vÄlÄtos ar jums noslÄgt dažus lÄ«gumus.
No tavas puses
KÄ jau teicu sÄkumÄ, es vÄlÄtos, lai raksts bÅ«tu praktiski noderÄ«gs un palÄ«dzÄtu pielietot iegÅ«tÄs zinÄÅ”anas reÄlÄ darbÄ. Es pievienoju vÄlreiz saite uz praktisko rokasgrÄmatu.
Bet arÄ« pÄc tam neapstÄjieties, praktizÄjieties, studÄjiet attiecÄ«gÄs saites un grÄmatas, uzziniet, kÄ tas darbojas jÅ«su uzÅÄmumÄ, atrodiet vietas, kuras var uzlabot, un piedalieties tajÄ. Veiksmi!
No manas puses
PÄc virsraksta var redzÄt, ka Ŕī bija tikai pirmÄ daļa. Neskatoties uz to, ka tas izrÄdÄ«jÄs diezgan liels, svarÄ«gas tÄmas Å”eit joprojÄm netiek apskatÄ«tas. OtrajÄ daÄ¼Ä plÄnoju aplÅ«kot automatizÄcijas infrastruktÅ«ru IOS kontekstÄ. TÄ kÄ Apple ierobežo iOS simulatoru darbinÄÅ”anu tikai macOS sistÄmÄs, mÅ«su risinÄjumu klÄsts ir saÅ”aurinÄts. PiemÄram, mÄs nevaram izmantot Docker, lai palaistu simulatoru, vai publiskos mÄkoÅus, lai palaistu virtuÄlÄs maŔīnas. Bet tas nenozÄ«mÄ, ka nav citu alternatÄ«vu. Es centÄ«Å”os jÅ«s informÄt par progresÄ«viem risinÄjumiem un moderniem rÄ«kiem!
TÄpat neesmu minÄjis diezgan lielas tÄmas saistÄ«bÄ ar monitoringu. 3. daÄ¼Ä es apskatÄ«Å”u populÄrÄkos infrastruktÅ«ras uzraudzÄ«bas rÄ«kus un to, kÄdi dati un rÄdÄ«tÄji jÄÅem vÄrÄ.
Un visbeidzot. NÄkotnÄ es plÄnoju izdot video kursu par testÄÅ”anas infrastruktÅ«ras un populÄru rÄ«ku izveidi. Å obrÄ«d internetÄ ir diezgan daudz kursu un lekciju par DevOps, taÄu visi materiÄli tiek prezentÄti izstrÄdes, nevis testa automatizÄcijas kontekstÄ. Å ajÄ jautÄjumÄ man patieÅ”Äm ir vajadzÄ«gas atsauksmes par to, vai Å”Äds kurss bÅ«s interesants un vÄrtÄ«gs testÄtÄju un automatizÄcijas inženieru kopienai. Pateicos jau iepriekÅ”!