DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Osa 1: Web / Android

MÀrkus: see artikkel on originaali venekeelse tÔlge «DevOps tööriistad pole mÔeldud ainult DevOpsile. Testimise automatiseerimise infrastruktuuri loomine nullist.» Siiski on kÔik illustratsioonid, lingid, tsitaadid ja terminid sÀilitatud originaalkeeles, et vÀltida tÀhenduse moonutamist venekeelsel tÔlkel. Soovin teile head Ôppimist!

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Praegu on DevOps eriala ĂŒks nĂ”utumaid IT-sektoris. Kui avate populaarsed tööotsingu saidid ja seadistate palga filtrid, siis nĂ€ete, et DevOpsiga seotud ametikohad on loendi alguses. Kuid on oluline mĂ”ista, et see kehtib peamiselt ‘Senior’ positsioonide kohta, mis eeldab, et kandidaadil on kĂ”rge oskuste tase ja teadmised tehnoloogiatest ning tööriistadest. Sellega kaasneb ka kĂ”rge vastutus, mis on seotud tootmise sujuva toimimisega. Siiski oleme unustamas, mis DevOps tegelikult on. Algusest peale ei olnud see mingi konkreetne inimene vĂ”i osakond. Kui otsida selle termini mÀÀratlemisi, leiame palju kauneid ja Ă”igeid nimisĂ”nu, nagu metoodika, praktikad, kultuuriline filosoofia, kontseptide kogum ja nii edasi.

Minu spetsialiseerumine on testimise automatiseerimise insener (QA automation engineer), kuid ma usun, et see ei tohiks piirda end ainult automaatsete testide kirjutamise vĂ”i testimisraamistike arhitektuuri vĂ€ljatöötamisega. Alates 2020. aastast on automatiseerimise infrastruktuuri tundmine samuti vajalik. See vĂ”imaldab iseseisvalt korraldada automatiseerimisprotsessi, alustades testide kĂ€itamisest ja lĂ”petades tulemuste edastamisega kĂ”igile asjaosalistele vastavalt seatud eesmĂ€rkidele. SeetĂ”ttu on DevOps'i oskused selle töö tĂ€itmiseks hĂ€davajalikud. Ja see kĂ”ik on hea, kuid kahjuks on ĂŒks probleem (spoiler: kĂ€esolev artikel pĂŒĂŒab seda probleemi lihtsustada). Probleem seisneb selles, et DevOps on keeruline. Ja see on ilmne, sest ettevĂ”tted ei maksa palju selle eest, mis on lihtne teha... DevOps'i maailmas on palju tööriistu, termineid ja praktikaid, millega tutvuda. Eriti raske on see karjÀÀri alguses ning sĂ”ltub kogunenud tehnilisest kogemusest.

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.
Allikas: http://maximelanciauxbi.blogspot.com/2017/04/devops-tools.html

Siinkohal lÔpetame sissejuhatava osa ja keskendume artikli eesmÀrgile. 

Millest see artikkel rÀÀgib

Selles artiklis jagan oma kogemusi testimisautomaatika infrastruktuuri loomisel. Internetis on palju teabeallikaid erinevate tööriistade ja nende kasutamise kohta, kuid sooviksin neid kĂ€sitleda rangelt automaatika kontekstis. Usun, et paljude automatiseerimise inseneride jaoks on tuttav olukord, kus vĂ€lja töötatud teste ei kĂ€ita keegi peale enda ning nende hooldamine jÀÀb tĂ€helepanuta. Tulemuseks on see, et testid muutuvad aegunuks ja tuleb kulutada aega nende ajakohastamisele. Alustava karjÀÀri jooksul vĂ”ib see olla suhteliselt keeruline ĂŒlesanne: Ă”igesti otsustada, millised tööriistad peaksid aitama selle probleemi lahendamisel, kuidas neid valida, seadistada ja hallata. MĂ”ned testijad pöörduvad abi saamiseks DevOps'i (inimeste) poole ja olgem ausad, see lĂ€henemine töötab. Paljudel juhtudel vĂ”ib see olla ainus valik, kuna meil puudub ĂŒlevaade kĂ”igist sĂ”ltuvustest. Kuid nagu teame, on DevOps vĂ€ga hĂ”ivatud, kuna nad peavad mĂ”tlema kogu ettevĂ”tte infrastruktuurile, juurutamisele, jĂ€lgimisele, mikroteenustele ja muudele sarnastele ĂŒlesannetele, sĂ”ltuvalt organisatsioonist/tiimist. Nagu tavaliselt, ei ole automatiseerimine prioriteet. Sellisel juhul peame proovima teha kĂ”ik endast oleneva algusest lĂ”puni. See vĂ€hendab sĂ”ltuvusi, kiirendab töövoogu, tĂ€iustab meie oskusi ja vĂ”imaldab nĂ€ha laiemat pilti toimuvast.

Artiklis on toodud kĂ”ige nĂ”udlikumad ja populaarsed tööriistad ning selgitatud, kuidas neid kasutada samm-sammult automatiseerimise infrastruktuuri loomiseks. Igas rĂŒhmas on esitatud tööriistad, mida on testitud isikliku kogemuse pĂ”hjal. Kuid see ei tĂ€henda, et peaksite kasutama samu tööriistu. Tööriistade enda tĂ€htsus ei ole oluline, need tulevad ja lĂ€hevad. Meie inseneride ĂŒlesanne on mĂ”ista pĂ”hialuseid: miks meil on vaja seda tööriistade rĂŒhma ja milliseid tĂ¶Ă¶ĂŒlesandeid saame nende abil lahendada. SeetĂ”ttu jĂ€tan iga jaotise lĂ”pus linke sarnastele tööriistadele, mida teie organisatsioonis vĂ”ib-olla kasutatakse.

Mida see artikkel ei kÀsitle

Kordan veel kord, et artikkel ei kÀsitle konkreetseid tööriistu, seetÔttu ei tule siin koodilÔike dokumentatsioonist ega konkreetsete kÀskude selgitusi. Kuid iga jaotise lÔpus jÀtan lingid pÔhjalikuks tutvumiseks.

See on tehtud pÔhjusel, et: 

  • seda materjali on vĂ€ga lihtne leida erinevates allikates (dokumentatsioon, raamatud, videokursused);
  • kui me hakkame sĂŒvitsi minema, peame kirjutama 10, 20, 30 osa sellest artiklist (kuigi plaanis on 2-3);
  • Ma ei soovi teie aega raisata, kuna te vĂ”ite soovida kasutada teisi tööriistu samade eesmĂ€rkide saavutamiseks.

Praktika

Soovin, et see materjal oleks igale lugejale kasulik, mitte lihtsalt loetud ja unustatud. Igas Ôppes on praktika vÀga oluline osa. Selleks olen valmistanud GitHubi reposti, kus on samm-sammuline juhend, kuidas kÔike nullist teha. Samuti ootab teid kodutöö, et olla kindel, et te ei kopeerinud lihtsameelselt kÀivitatavaid kÀsku.

Plaani

Samm
Tehnoloogia
Tööriistad

1
Kohalik kÀitamine (valmistage veeb / android demo testid ja kÀitage neid kohalikult) 
Node.js, Selenium, Appium

2
VersioonihaldussĂŒsteemid 
Git

3
Konteineriseerimine
Docker, Selenium grid, Selenoid (Web, Android)

4
CI / CD
Gitlab CI

5
Pilveteenused
Google Cloud Platform

6
Orkestreerimine
Kubernetes

7
Infrastruktuur kui kood (IaC)
Terraform, Ansible

Iga jaotise struktuur

Kuna jutustuse selge visualiseerimise sÀilitamiseks on iga jaotis kirjeldatud jÀrgmise plaani kohaselt:

  • tehnoloogia lĂŒhikirjeldus,
  • vÀÀrtus automatiseerimisinfrastruktuuri jaoks,
  • olekuillustratsioon infrastruktuuri jaoks,
  • Ă”ppimise lingid,
  • sarnased tööriistad.

1. Kohalik testide kÀitamine

Tehnoloogia lĂŒhikirjeldus

See on vaid ettevalmistav samm, et kÀivitada demonstreerivaid teste kohalikke ja kontrollida, et need edukalt lÀbivad. Praktikas kasutatakse Node.js-i, kuid programmeerimiskeel ja platvorm ei ole olulised ning vÔib kasutada ka neid, mida teie ettevÔttes kasutatakse. 

Kuid automaatimistööriistadena soovitan kasutada Selenium WebDriveri web-platvormide jaoks ja Appiumi Android-platvormide jaoks, sest jÀrgmistel sammudel kasutame Docker-pilte, mis on kohandatud nende tööriistadega töötamiseks. Veelgi enam, viidates töökuulutuste nÔuetele, on need tööriistad turul kÔige nÔudlikumad.

Kuidas te vÔisite mÀrgata, vaatleme ainult web- ja Android-teste. Kahjuks on IOS tÀiesti erinev lugu (aitÀh Apple). Plaanin demonstreerida IOS-i lahendusi ja praktikaid jÀrgnevates osades.

VÀÀrtus automaatimise infrastruktuurile

Infrastruktuuri seisukohalt ei paku kohalik kÀivitamine mingit vÀÀrtust. Sa kontrollid ainult, et testid töötavad kohalikul masinal kohalikes brauserites ja simulatsioonides. Kuid igal juhul on see vajalik lÀhtepunkt.

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased töötajad

  • igasugune programmeerimiskeel,  mis sulle meeldib, koos Selenium/Appium - testidega;
  • iga test;
  • iga testijooksja.

2. VersioonihaldussĂŒsteemid (Git)

Tehnoloogia lĂŒhikirjeldus

Ei ole kellelegi uudiseks, kui ĂŒtlen, et versioonihaldussĂŒsteem on ÀÀrmiselt oluline osa arendamisest nii meeskonnas kui ka individuaalselt. Erinevatele allikatele toetudes vĂ”ib kindlalt öelda, et Git on selle vallas kĂ”ige populaarsem esindaja. VersioonihaldussĂŒsteem pakub mitmeid eeliseid, nagu koodi jagamine, versioonide hoidmine, taastumine varasematele harudele, projekti ajaloo jĂ€lgimine ja varukoopiad. Me ei hakka iga punkti detailselt arutama, kuna olen kindel, et olete sellega hĂ€sti tuttav ja kasutate seda oma igapĂ€evases töös. Kuid kui te ei ole, siis soovitan teil seda artiklit lugemist peatada ja seda tĂŒhimikku vĂ”imalikult kiiresti tĂ€ita.

VÀÀrtus automaatimise infrastruktuurile

Siin vĂ”ite esitada mĂ”istliku kĂŒsimuse: „Miks ta rÀÀgib meile Gitist? KĂ”ik teavad ja kasutavad seda nii arenduskoodi kui ka automaattestide jaoks.” Te oleksite tĂ€iesti Ă”iged, kuid selles artiklis rÀÀgime infrastruktuurist ja see jaotis mĂ€ngib rolli eelvaateks jaotisele 7: „Infrastruktuur kui kood (IaC)”. Meie jaoks tĂ€hendab see, et kogu infrastruktuur, sealhulgas testimise infrastruktuur, kirjeldatakse koodina, seega vĂ”ime sellele rakendada versioonihaldussĂŒsteeme ja saada sarnaseid eeliseid nagu arenduskoodi ja automatiseerimise puhul.

Vaadake IaC-d ĂŒksikasjalikumalt sammul 7, kuid juba praegu saate alustada Giti kasutamist kohalikult, luues kohaliku repositooriumi. Üldine pilt laieneb, kui lisame infrastruktuurile kaugrepositooriumi.

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased töötajad

3. Konteinerimise (Docker) teema

Tehnoloogia lĂŒhikirjeldus

Kuidas konteineriseerimine on mĂ€ngu reegleid muutnud, saame aru, kui vaatame tagasi mĂ”ned kĂŒmned aastad. Tookord ostsid ja kasutasid inimesed servereid rakenduste kĂ€imiseks. Enamasti ei olnud aga vajalikud ressursid rakenduste kĂ€itamiseks ette teada. See viis selleni, et ettevĂ”tted kulutasid raha kallite vĂ”imsate serverite ostmiseks, kuid osa neist ressurssidest jĂ€i kasutamata.

Evolutsiooni jĂ€rgmine etapp olid virtuaalsed masinad (VM), mis lahendasid probleemid, mis olid seotud kasutamata ressursside kulutamisega. See tehnoloogia vĂ”imaldas rakenduste kĂ€itamist ĂŒksteisest iseseisvalt ĂŒhes serveris, eraldades tĂ€ielikult isoleeritud ruumi. Kahjuks on aga igal tehnoloogial oma puudused. VM kĂ€itamine nĂ”uab tĂ€is funktsionaalset operatsioonisĂŒsteemi, mis kasutab CPU-d, RAM-i, salvestusruumi ja sĂ”ltuvalt operatsioonisĂŒsteemist tuleb arvestada ka litsentsikuludega. Need tegurid mĂ”jutavad laadimisaega ja muudavad portatiivsuse keerulisemaks.

NĂŒĂŒd oleme jĂ”udnud konteineriseerimise juurde. See tehnoloogia lahendas taas eelmise probleemi, kuna konteinerid ei kasuta tĂ€isfunktsionaalset operatsioonisĂŒsteemi, mis vabastab suure hulga ressursse ning pakub kiiret ja paindlikku lahendust kandmiseks.

Loomulikult ei ole konteineriseerimise tehnoloogia midagi uut, see esitati esmakordselt 70. aastate lĂ”pus. Sel ajal tehtud palju uurimusi ja katseid. Kuid just Docker kohandas selle tehnoloogia ja tegi selle massidele hĂ”lpsasti kĂ€ttesaadavaks. TĂ€napĂ€eval, kui rÀÀgime konteineritest, mĂ”tleme enamasti Dockerile. RÀÀkides Docker-konteineritest, mĂ”tleme Linuxi konteineritele. Saame kasutada Windowsi ja macOS sĂŒsteeme konteinerite kĂ€itamiseks, kuid oluline on mĂ”ista, et sel juhul tekib tĂ€iendav kiht. NĂ€iteks kĂ€ivitab Docker Macis mĂ€rkamatult konteinerid kergkaalu Linuxi virtuaalmasina sees. Me tuleme sellele teemal tagasi, kui arutame Androidi emulaatorite kĂ€itamise ĂŒle konteinerites, kuna siin on oluline nĂŒanss, mida tuleb ĂŒksikasjalikumalt arutada.

VÀÀrtus automaatimise infrastruktuurile

Oleme leidnud, et konteineriseerimine ja Docker on suurepÀrased. Vaatame seda automatiseerimise kontekstis, sest iga tööriist vÔi tehnoloogia peaks lahendama mingi probleemi. MÀÀratlegem automaatika testimise ilmsed probleemid UI-testide kontekstis:

  • suured sĂ”ltuvused Seleniumi ja eriti Appiumi installimisel;
  • ĂŒhilduvusprobleemid brauserite, simulaatorite ja draiverite versioonide vahel;
  • puudub isoleeritud ruum brauserite/simulaatorite jaoks, mis on eriti kriitiline, kui kĂ€itada paralleelselt;
  • raske hallata ja toetada, kui on vaja kĂ€ivitada 10, 50, 100 vĂ”i isegi 1000 brauserit korraga.

Kuna Selenium on kĂ”ige populaarsem automatiseerimistööriist ja Docker kĂ”ige populaarsem konteineriseerimise tööriist, ei peaks olema ĂŒllatus, et keegi pĂŒĂŒdis neid ĂŒhendada, et luua vĂ”imas tööriist eespool mainitud probleemide lahendamiseks. Uurime neid lahendusi lĂ€hemalt. 

Selenium grid in docker

See tööriist on maailma kĂ”ige populaarsem Selenium, mis vĂ”imaldab mitme brauseri kĂ€itamist mitmel masinal ning nende haldamist keskpunktist. KĂ€ivitamiseks on vajalik registreerida vĂ€hemalt 2 osa: Hub ja Node(d). Hub on keskne sĂ”lm, mis saab kĂ”ik pĂ€ringud testidelt ja jaotab need vastavatesse Nodes-se. Iga Node'i jaoks saame seadistada konkreetse konfiguratsiooni, nĂ€iteks mÀÀrata vajaliku brauseri ja selle versiooni. Kuid meil on endiselt vaja ise hoolitseda brauserite ĂŒhilduvate draiverite eest ning installida need vajalikesse Nodes-se. SeetĂ”ttu ei kasutata Selenium grid'i puhtal kujul, vĂ€lja arvatud juhtudel, kui peame töötama brauseritega, mida ei saa Linuxi operatsioonisĂŒsteemis installida. KĂ”ikidel muudel juhtudel on palju paindlikum ja Ă”igem lahendus kasutada Docker-pilte Selenium grid Hub'i ja Nodes'e kĂ€itamiseks. See lĂ€henemine lihtsustab oluliselt sĂ”lmede haldamist, kuna saame valida vajaliku pildi, kus on juba installitud ĂŒhilduvad brauserite ja draiverite versioonid.

Hoolimata negatiivsetest arvustustest stabiilsuse kohta, eriti suurte Nodes'ide samaaegsel kÀivitamisel, jÀÀb Selenium grid siiski kÔige populaarsemaks tööriistaks Selenium-testide paralleelseks kÀivitamiseks. On oluline mÀrkida, et avatud lÀhtekoodiga lahendustes ilmuvad pidevalt erinevad tÀiustused ja modifikatsioonid, mis aitavad lahendada erinevaid kitsaskohti.

Selenoid for Web

See komponent on murranguline Seleniumi maailmas, kuna see töötab otse vĂ€lja kastist ja on teinud paljude automatiseerimise inseneride elu oluliselt lihtsamaks. Esiteks, see ei ole lihtsalt veel ĂŒks modifikatsioon Selenium gridist. Selle asemel on arendajad loonud tĂ€iesti uue versiooni Selenium Hubist Golangi keeles, mis koos kergete Docker-piltidega erinevate brauserite jaoks on andnud impulsi testimise automatiseerimise arengule. Veelgi enam, Selenium Gridis peame me ette mÀÀrama kĂ”ik vajalikud brauserid ja nende versioonid, mis ei ole probleem, kui töötame ainult ĂŒhe brauseriga. Kuid kui jutt kĂ€ib mitmest toetatavast brauserist, siis Selenoid on number ĂŒks lahendus, tĂ€nu funktsioonile 'brauser nĂ”udmisel'. KĂ”ik, mida meilt nĂ”utakse, on vajalikud pildid brauseritega eelnevalt ĂŒles laadida ja uuendada konfiguratsioonifaili, millega Selenoid suhtleb. Kui Selenoid saab testidest pĂ€ring, kĂ€ivitab ta automaatselt vajaliku konteineri soovitud brauseriga. Kui test on lĂ”pule viidud, Selenoid vabastab konteineri, andes jĂ€rgnevaid pĂ€ringute ressursse vabaks. See lĂ€henemine kĂ”rvaldab tĂ€ielikult tuntud probleemi 'sĂ”lmede dementeerimisest', millega me sageli Selenium gridis kokku puutume.

Kahjuks ei ole Selenoid siiski hĂ”bedane kuul. Saime funktsiooni 'brauserid nĂ”udmise jĂ€rgi', kuid funktsioon 'ressursid nĂ”udmise jĂ€rgi' pole veel saadaval. Selenoid'i kasutamiseks peame selle kastma fĂŒĂŒsilisse riistvarasse vĂ”i virtuaalmasinasse, mis tĂ€hendab, et peame eelnevalt teadma, kui palju ressursse on vaja eraldada. Ma arvan, et see ei ole probleem vĂ€ikeste projektide puhul, mis kĂ€ivitavad samal ajal 10, 20 vĂ”i isegi 30 brauserit. Aga mis siis, kui me vajame 100, 500, 1000 ja rohkem? Pole mingit mĂ”tet pidevalt hoida ja maksta nii suure hulga ressursside eest. Artikli osades 5 ja 6 arutame lahendusi, mis vĂ”imaldavad skaleeruda, vĂ€hendades sellega oluliselt ettevĂ”tte kulusid.

Selenoid for Android

PĂ€rast Selenoid'i edukat kasutamist veebiautomaatika tööriistana soovisid inimesed midagi sarnast Androidile. Ja see juhtus – Selenoid ilmus Androidi toe kaudu. Kasutaja kĂ”rgetasemelise vaatepunktist on tööpĂ”himĂ”te sarnane veebiautomaatsusele. Ainus erinevus on see, et veebibrauserite konteinerite asemel kĂ€ivitab Selenoid Android-emulaatorite konteinerid. Minu arvates on see praegu kĂ”ige vĂ”imsam tasuta tööriist Androidi testide paralleelseks kĂ€ivitamiseks.

Mulle ei meeldiks ĂŒldse rÀÀkida selle tööriista negatiivsetest kĂŒlgedest, kuna see tĂ”esti meeldib mulle. Kuid siiski on siin kohal need samad puudused, mis on seotud web-automaatikaga, seonduvad skaleerimisega. Lisaks sellele tuleb rÀÀkida veel ĂŒhest piirangust, mis vĂ”ib osutuda ĂŒllatuseks, eriti kui seadistame tööriista esmakordselt. Android-piltide kĂ€ivitamiseks on meil vajalik fĂŒĂŒsiline masin vĂ”i VM koos sisemiste virtualiseerimise toetusega. Praktikas juhendan, kuidas seda Linuxi VM-is aktiveerida. Siiski, kui olete macOS kasutaja ja soovite Selenoidit kohapeal juurutada, siis Android-testide kĂ€itamine sellel on vĂ”imatu. Kuid alati vĂ”ite kohapeal kĂ€ivitada Linuxi VM-i koos seadistatud sisemise virtualiseerimisega ja juurutada Selenoid seal.

Praeguse infrastruktuuri seisundi illustreerimine

Selles artiklis lisame 2 tööriista infrastruktuuri illustreerimiseks. Need on Selenium grid web-testide jaoks ja Selenoid Android-testide jaoks. GitHubis olevas juhendis nÀitan samuti, kuidas kasutada Selenoidit web-testide kÀitamiseks. 

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased töötajad

  • On olemas ka teisi konteinerimiseks mĂ”eldud tööriistu, kuid Docker on neist kĂ”ige populaarsem. Kui soovite proovida midagi muud, pidage meeles, et need tööriistad, mida me kĂ€sitlesime Seleniumi testide paralleelse kĂ€itamise jaoks, ei tööta otse vĂ€lja pakkumisel.  
  • Nagu juba mainitud, on olemas palju Selenium grid'i modifikatsioone, nĂ€iteks Zalenium.

4. CI / CD

Tehnoloogia lĂŒhikirjeldus

JĂ€tkuva integreerimise praktika on arenduses ĂŒsna populaarne ja seondub versioonihaldussĂŒsteemidega. Sellegipoolest tunnen, et terminoloogia osas on segadust. Selles lĂ”igus soovin ma kirjeldada kolme selle tehnoloogia modifikatsiooni oma vaatenurgast. Internetist leiate palju artikleid erinevate tĂ”lgendustega, ja on tĂ€iesti normaalne, kui teie arvamus erineb. Peamine on, et oleksite oma kolleegidega ĂŒhel lainel.

Nii et on olemas kolm terminit: CI - Continuous Integration (jÀtkuv integreerimine), CD - Continuous Delivery (jÀtkuv kohaletoimetamine) ja jÀlle CD - Continuous Deployment (jÀtkuv juurutamine). (Edasi kasutan neid termineid inglise keeles). Iga muudatus lisab teie arendusprotsessile mitmeid tÀiendavaid etappe. Kuid sÔna pidev (katkestusteta) on kÔige olulisem. Selle all mÔtleme midagi, mis toimub algusest lÔpuni, ilma katkestuste vÔi kÀsitsi sekkumiseta. Vaatame CI & CD-d ja CD-d antud kontekstis.

  • Pidev Integratsioon – on evolutsiooni esimene samm. Uue koodi serverisse saatmise jĂ€rel ootame kiiret tagasisidet selle kohta, et meie muudatused on korras. Tavaliselt hĂ”lmab CI staatilise koodi analĂŒĂŒsi tööriistade ja moodulitestide/ sisemiste API testide kĂ€ivitamist. See vĂ”imaldab meil saada teavet meie koodi kohta juba mĂ”ne sekundi/ minuti jooksul.
  • JĂ€tkuv kohaletoimetamine on rohkem arenenud etapp, kus kĂ€ivitame integratsiooni/UI-testid. Kuid sel hetkel ei saa me tulemusi nii kiiresti, kui CI puhul. Esiteks, need testide tĂŒĂŒbid vajavad rohkem aega lĂ€bimiseks. Teiseks, enne kĂ€ivitamist peame oma muudatused deployima testimis-/staging- keskkonda. Veelgi enam, kui rÀÀgime mobiilsete rakenduste arendamisest, tuleb lisaloodud etapp rakenduse kogumise jaoks.
  • JĂ€tkuv juurutamine tĂ€hendab, et me vabastame automaatselt (release) oma muudatused tootmisse, kui kĂ”ik vastuvĂ”tute testid on eelnevates etappides lĂ€bitud. Lisaks sellele saab pĂ€rast release'i etappi seadistada erinevaid etappe, nagu smoke-testide kĂ€ivitamine tootmises ja huvipakkuvate mÔÔdikute kogumine. JĂ€tkuv juurutamine on vĂ”imalik vaid hea automatiseeritud testide katvuse korral. Kui on vajalikud mingid kĂ€sitsi sekkumised, sealhulgas testimine, siis see ei ole enam JĂ€tkuv (continuous). Siis saame rÀÀkida, et meie torujuhe vastab ainult JĂ€tkuva Edastamise praktikale.

VÀÀrtus automaatimise infrastruktuurile

Selles jaotises pean selgitama, et kui rÀÀgime lĂ”pp- kuni-lĂ”pp UI-testimisest, siis see tĂ€hendab, et peame oma muudatused ja seotud teenused hÀÀlestama testkeskkondadesse. JĂ€tkuv integreerimine ei ole selle ĂŒlesande puhul rakendatav ja peame tagama, et rakendame vĂ€hemalt jĂ€tkava kohaletoimetamise praktikaid. JĂ€tkuv juurutamine on samuti mĂ”ttekas UI-testimise kontekstis, kui kavatseme neid kĂ€itada tootmises.

Ja enne kui vaatame arhitektuuri muudatuste illustratsiooni, tahan öelda paar sĂ”na GitLab CI-st. Erinevalt teistest CI/CD-tööriistadest pakub GitLab kaugrepositooriumi ja palju muid lisafunktsioone. Seega on GitLab rohkem kui lihtsalt CI. See sisaldab valmis lahendusena lĂ€htekoodi haldust, Agile juhtimist, CI/CD pipelines, logimise tööriistu ja mÔÔdikute kogumist. GitLabi arhitektuur koosneb GitLab CI/CD-st ja GitLab Runnerist. TĂ”in vĂ€lja lĂŒhikese kirjelduse ametlikult veebilehelt:

Gitlab CI/CD on veebirakendus koos API-ga, mis salvestab oma seisundi andmebaasi, haldab projekte/ehitusi ja pakub kasutajaliidest. GitLab Runner on rakendus, mis töötleb ehitusi. Seda saab juurutada eraldi ja see töötab GitLab CI/CD-ga API kaudu. Testide kÀitamiseks on vajalik nii GitLabi instants kui ka Runner.

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased töötajad

5. Pilveteenused

Tehnoloogia lĂŒhikirjeldus

Selles osas rÀÀgime populaarsest suundumusest, mida nimetatakse 'avalikeks pilvedeks'. Vaatamata tohutule kasule, mida pakuvad ĂŒlaltoodud virtualiseerimise ja konteineriseerimise tehnoloogiad, on meil endiselt vaja arvutusresources. EttevĂ”tted soetavad kallid serverid vĂ”i rendivad andmekeskuseid, kuid sel juhul on vajalik teha arvutusi (mĂ”nikord ebareaalsed) selle kohta, kui palju ressursse me vajame, kas me kasutame neid 24/7 ja milleks. NĂ€iteks on tootmisprotsessiks vajalik pidevalt töötav server, kuid kas meil on selliseid ressursse vaja ka testimiseks vĂ€ljaspool tööaega? See sĂ”ltub ka teostatud testimise tĂŒĂŒbist. NĂ€iteks koormus-/stressitestid, mida plaanime teha vĂ€ljaspool tööaega, et saada tulemused jĂ€rgmiseks pĂ€evaks. Kuid kindlasti ei vajata serverite ööpĂ€evaringset kĂ€ttesaadavust end-to-end automaatsete testide jaoks ja eriti kĂ€sitsi testimise keskkondade jaoks. Selliste olukordade jaoks oleks hea saada tĂ€pselt nii palju ressursse, kui on vajalik nĂ”udmisel, kasutada neid ja lĂ”petada maksmine, kui neid enam ei vajata. Veelgi rohkem oleks suurepĂ€rane saada neid koheselt, tehes paar hiireklĂ”psu vĂ”i kĂ€ivitades mĂ”ned skriptid. Selleks kasutatakseki avalikke pilvi. Vaatame mÀÀratlust:

Avaliku pilve all mĂ”istetakse kolmandate osapoolte pakutavaid arvutusteenuseid, mis on kergesti kĂ€ttesaadavad ĂŒle avaliku Interneti ning mis on avatud kĂ”igile, kes soovivad neid kasutada vĂ”i osta. Need vĂ”ivad olla tasuta vĂ”i mĂŒĂŒdud vastavalt vajadusele, vĂ”imaldades klientidel maksta ainult tarbitud CPU tsĂŒklite, salvestuse vĂ”i ribalaiuse eest.

On arvamus, et avalikud pilved on kallid. Kuid nende pĂ”hieesmĂ€rk on vĂ€hendada ettevĂ”tte kulusid. Nagu juba mainitud, vĂ”imaldavad avalikud pilved saada ressursse nĂ”udmisel ja maksta ainult nende kasutamise eest. Samuti unustame tihti, et töötajad saavad palka ja spetsialistid on samuti kallis ressurss. Tuleb arvestada, et avalikud pilved hĂ”lbustavad infrastruktuuri haldamist, lubades inseneridel keskenduda olulistele ĂŒlesannetele. 

VÀÀrtus automaatimise infrastruktuurile

Millised konkreetsed ressursid on meil vajalikud end-to-end UI-testimiseks? Peamiselt on need virtuaalmasinad vĂ”i klastrid (rÀÀgime Kubernetesest jĂ€rgmisel teemal) brauserid ja emulaatorid kĂ€itamiseks. Mida rohkem brausereid ja emulaatoreid soovime samaaegselt kĂ€itada, seda rohkem CPU-d ja mĂ€lu on vajalik ning seda rohkem peame selle eest maksma. Nii on avalikud pilveplatvormid automaatsete testide kontekstis vĂ”imaldavad meil kĂ€itada suurt hulka (100, 200, 1000 
) brausereid/emulaatoreid nĂ”udmisel, saada testimistulemusi vĂ”imalikult kiiresti ja lĂ”petada maksmine nende hullumeelselt ressursimahukate jĂ”udluste eest. 

KĂ”ige populaarsemad pilveteenuse pakkujad on Amazon Web Services (AWS), Microsoft Azure ja Google Cloud Platform (GCP). Praktikas on GCP kasutamise nĂ€idised esitatud juhendis, kuid ĂŒldiselt ei ole oluline, millist te kasutate automatiseerimise jaoks. KĂ”ik pakuvad ligikaudu samu funktsioone. Tavaliselt keskendub teenusepakkuja valimise juhend ettevĂ”tte kogu infrastruktuurile ja Ă€rinĂ”uetele, mis jÀÀb selle artikli raames vĂ€lja. Automatiseerimise inseneridele oleks huvitavam vĂ”rrelda pilveteenuse pakkujate kasutamist pilveplatvormide kasutamisega, mis on konkreetselt suunatud testimise eesmĂ€rkidele, nagu Sauce Labs, BrowserStack, BitBar jne. Niisiis, teeme seda! Minu arvates on Sauce Labs kĂ”ige tuntum pilvetestimise farm, seega valisin selle vĂ”rdluseks. 

GCP vs Sauce Labs automatiseerimise eesmÀrkidel:

Kujutame ette, et meil on vaja samaaegselt kĂ€ivitada 8 veebitestimist ja 8 Androidi testi. Selleks kasutame GCP-d ja kĂ€ivitame 2 virtuaalmasinat Selenoidiga. Esimesel tĂ”stame 8 konteinerit, kus on brauserid. Teisel – 8 konteinerit emulaatoritega. Vaadakem hindasid:  

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.
Ühe Chrome'i konteineri kĂ€ivitamiseks vajame n1-standard-1 masinat. Androidi puhul on see n1-standard-4 ĂŒhe emulaatori jaoks. Tegelikult on paindlikum ja odavam viis mÀÀrata kindlaid kasutaja vÀÀrtusi CPU/Memory, kuid hetkel ei ole see Sauce Labsiga vĂ”rreldes oluline.

Siin on Sauce Labsi kasutustasud:

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.
Arvan, et olete juba hinnavahet mĂ€rganud, kuid esitan siiski tabeli arvutustega meie ĂŒlesande jaoks:

NÔutavad ressursid
Kuu hind
Tööaeg(8.00 - 20.00)
Tööaeg+ Eemaldatav

GCP veebi jaoks
n1-standard-1 x 8 = n1-standard-8
$194.18
23 pÀeva * 12h * 0.38 = 104.88$ 
23 pÀeva * 12h * 0.08 = 22.08$

Sauce Labs veebi jaoks
Virtuaalne Cloud8 paralleelsed testid
$1.559
—
—

GCP Androidi jaoks
n1-standard-4 x 8: n1-standard-16
$776.72
23 pÀeva * 12h * 1.52 = 419.52$ 
23 pÀeva * 12h * 0.32 = 88.32$

Sauce Labs Androidi jaoks
Reaalsete seadmete pilv 8 paralleelsed testid
$1.999
—
—

Nagu nÀha, on hinnavahe tohutu, eriti kui teste kÀivitada ainult tööajal. Kuid kulusid on vÔimalik veelgi vÀhendada, kui kasutada eemaldatavaid masinaid. Mis need on?

Eemaldatav VM on instants, mille saate luua ja kĂ€itada palju madalama hinnaga kui tavalised instantsid. Siiski vĂ”ib arvutitehnika need instantsid lĂ”petada (eemaldada), kui tal on teiste ĂŒlesannete jaoks nende ressursside kasutamiseks vajalikke ressursse. Eemaldatavad instantsid on ĂŒleliigne Compute Engine'i maht, seega nende kĂ€ttesaadavus varieerub kasutuse jĂ€rgi.

Kui teie rakendused on vigade suhtes taluvad ja suudavad taluda vĂ”imalikke instantside peatamisi, vĂ”ivad peatatavad instantsid oluliselt vĂ€hendada teie Compute Engine'i kulusid. NĂ€iteks vĂ”ivad partiitöötlemise ĂŒlesanded toimida peatatavates instantsides. Kui mĂ”ned neist instantsidest töötlemise ajal lĂ”petavad, aeglustub töö, kuid ei peatu tĂ€ielikult. Peatatavad instantsid tĂ€idavad teie partiitöötlemise ĂŒlesandeid, ilma et need lisaks koormust teie olemasolevatele instantsidele ja ilma, et peaksite maksma tĂ€ishinda tĂ€iendavate normaalsed instantside eest.

Ja see pole veel lĂ”pp! TĂ”eliselt olen kindel, et keegi ei kĂ€ivita teste 12 tundi jĂ€rjest ilma pausita. Ja kui see on tĂ”si, siis vĂ”ite automaatselt kĂ€ivitada ja peatada virtuaalmasinad, kui neid ei vajata. Tegelik kasutusaeg vĂ”ib langeda kuni 6 tunnini pĂ€evas. Siis vĂ”ib maksmine meie ĂŒlesande kontekstis langeda isegi 11 dollarini kuus 8 brauseri eest. Kas see ei ole suurepĂ€rane? Kuid peatavate masinatega peame olema ettevaatlikud ja valmis katkestusteks ning ebastabiilseks toimimiseks, kuigi neid olukordi saab programmiliselt ette nĂ€ha ja kĂ€sitleda. See on seda vÀÀrt!

Aga ma ei ĂŒtle kunagi â€˜Ă€rge kasutage pilvetesteerimise farmisid’. Neil on mitmeid eeliseid. Esiteks, see ei ole lihtsalt virtuaalne masin, vaid tĂ”eline lahendus testimise automatiseerimiseks, mis sisaldab palju funktsioone: kaugjuurdepÀÀs, logid, ekraanipildid, videote salvestamine, erinevad brauserid ja fĂŒĂŒsilised mobiilseadmed. Paljudes olukordades vĂ”ib see olla asendamatu ja luksuslik alternatiiv. Eriti kasulikud on testimisplatvormid IOS-automatiseerimise jaoks, kus avalikud pilved pakuvad sageli ainult Linuxi/Windowsi sĂŒsteeme. Kuid IOS-ist rÀÀgime jĂ€rgmistes artiklites. Soovitan alati hinnata olukorda ja lĂ€htuda ĂŒlesannetest: mĂ”nes on odavam ja efektiivsem kasutada avalikke pilvi, teistes aga on testimisplatvormid kindlasti oma rahaga vÀÀrt.

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased tööriistad:

6. Orkestreerimine

Tehnoloogia lĂŒhikirjeldus

Mul on head uudised – me oleme peaaegu artikli lĂ”puni jĂ”udnud! Praegu koosneb meie automatiseerimise infrastruktuur veebist ja Androidi testidest, mida me kĂ€itame paralleelselt GitLab CI kaudu, kasutades Dockerit toetavaid tööriistu: Selenium grid ja Selenoid. Veelgi enam, me kasutame GCP kaudu loodud virtuaalmasinaid, et kĂ€ivitada nendes konteinerid brauserite ja emulaatoritega. Kulude vĂ€hendamiseks kĂ€ivitame neid virtuaalmasinaid ainult nĂ”udmisel ja peatame, kui testimist ei toimu. Kas on midagi veel, mis vĂ”iks meie infrastruktuuri parandada? Vastus on – jah! Tere tulemast Kubernetesesse (K8s)!

Alustuseks vaatame, kuidas on seotud sĂ”nad orkestreerimine, klaster ja Kubernetes. KĂ”rgeimal tasemel on orkestreerimine sĂŒsteem, mis juurutab ja haldab rakendusi. Selliste konteineriseeritud rakenduste testimise automatiseerimiseks on Selenium grid ja Selenoid. Docker ja K8s tĂ€iendavad ĂŒksteist. Esimene on mĂ”eldud rakenduste juurutamiseks, teine ​​aga orkestreerimiseks. Omalt poolt on K8s klaster. Klastri ĂŒlesanne on kasutada VMs Node`idena, mis vĂ”imaldab installida erinevat funktsionaalsust, programme ja teenuseid ĂŒhe serveri (klastri) raames. Kui mĂ”ni Node ebaĂ”nnestub, haaravad teised Nodes vahetult ĂŒle, tagades meie rakenduse katkestusteta töö. Lisaks sellele omab K8s olulist funktsionaalsust, mis on seotud skaleerimise (scaling) vĂ”imalustega, mille kaudu saame automaatselt optimaalse ressursside arvu, tuginedes koormusele ja kehtestatud piirangutele.

TĂ”tt öeldes on Kubernetes'i kĂ€sitsi seadistamine nullist tĂ€iesti keeruline ĂŒlesanne. JĂ€tan lingi tuntud praktilisele juhendile "Kubernetes The Hard Way", ja kui teid huvitab, vĂ”ite harjutada. Kuid Ă”nneks on olemas alternatiivsed viisid ja tööriistad. Lihtsaim neist on Google Kubernetes Engine (GKE) GCP-s, mis vĂ”imaldab teil mĂ”ne kliki jĂ€rel saada valmis klastrit. AlgĂ”ppeks soovitan just seda lĂ€henemist, sest see lubab teil keskenduda K8s kasutamise Ă”ppimisele oma ĂŒlesannete jaoks, mitte uurida, kuidas sisekomponendid omavahel integreeritud peaksid olema. 

VÀÀrtus automaatimise infrastruktuurile

Vaatame mÔningaid tÀhtsaid funktsioone, mida K8s pakub:

  • rakenduse juurutamine: multi-node klastrite kasutamine, mitte virtuaalmasinate;
  • dĂŒnaamiline skaleerimine: vĂ€hendab kulutusi ressurssidele, mis on aktiivsed ainult nĂ”udmisel;
  • iseparanemine (Self-healing): automaatne pods'i taastamine (mille kaudu taastuvad ka konteinerid);
  • uuenduste ja muudatuste tagasivĂ”tmine ilma seisakuteta: tööriistade, brauserite ja emulaatorite uuendamine ei katkesta praeguste kasutajate tööd

Kuid K8s ei ole siiski hĂ”bekuul. KĂ”ikide eeliste ja piirangute mĂ”istmiseks antud kontekstis (Selenium grid, Selenoid) arutame lĂŒhidalt K8s struktuuri. Klaster sisaldab kahte tĂŒĂŒpi node'e: Master Node'id ja Worker Node'id. Master Node'id vastutavad haldamise, juurutamise ja jaotuseotsuste eest. Worker Node'id on need, kus rakendused on kĂ€ivitatud. Node'id sisaldavad ka konteinerite kĂ€itamiskeskkonda. Meie juhul on see Docker, mis vastutab konteineritega seotud operatsioonide eest. Kuid on ka alternatiivseid lahendusi, nĂ€iteks containerd. On oluline mĂ”ista, et skaleerimine vĂ”i isekorrekteerimine ei kehti konteinerite kohta otseselt. Seda rakendatakse pod'ide arvu lisamise/vĂ€hendamise kaudu, mis omakorda sisaldavad konteinerite (tavaliselt on ĂŒks konteiner pod'is, kuid sĂ”ltuvalt ĂŒlesandest vĂ”ib neid olla rohkem). KĂ”rgetasemeline hierarhia koosneb worker node'idest, mille sees on pod'id, mille sees on kĂ€ivitatud konteinerid.

Skaalafunktsioon on pĂ”hifunktsioon, mida saab rakendada nii cluster node-pool'i nodes'itele kui ka node'i pods'idele. On olemas kaks tĂŒĂŒpi skaleerimist, mis kehtivad nii nodes'ite kui ka pods'ite kohta. Esimene tĂŒĂŒp on horisontaalne – skaleerimine toimub nodes'ite/pods'ite arvu suurendamise teel. See tĂŒĂŒp on eelistatavam. Teine tĂŒĂŒp on vastavalt vertikaalne. Skaleerimine toimub nodes'ite/pods'ite suuruste suurendamise kaudu, mitte nende arvu kaudu.

Vaadakem nĂŒĂŒd meie tööriistu eelnevalt mainitud mĂ”tteteemade kontekstis.

Selenium grid

Nagu eelnevalt mainitud, on Selenium grid vĂ€ga populaarne tööriist ning pole ĂŒllatav, et see on konteineriseeritud. SeetĂ”ttu ei ole ĂŒllatav, et Selenium grid'i saab kĂ€ivitada K8s-is. NĂ€idet selle kohta, kuidas seda teha, saab leida ametlikust K8s-repositooriumist. Nagu tavaks, lisan viidatud lingid sektsiooni lĂ”ppu. Lisaks sellele on praktilises juhendis nĂ€idatud, kuidas seda teha Terraformi abil. Samuti on olemas juhised, kuidas skaaleerida pod'e, mis sisaldavad brauserikonteinereid. Kuid automaatne skaleerimine K8s-i kontekstis on endiselt keeruline ĂŒlesanne. Kui ma tundsin huvi, ei leidnud ma praktilisi juhendeid ega soovitusi. PĂ€rast mitmeid uuringuid ja eksperimente DevOps meeskonna toel valisime lĂ€henemise konteinerite tĂ”stmiseks, kus on vajalikud brauserid ĂŒhes pod'is, mis asub ĂŒhes töötaja node'is. Selline lĂ€henemine vĂ”imaldab rakendada horisontaalse skaleerimise strateegiat node'ide arvu suurendamisega. Loodan, et tulevikus olukord paraneb ning nĂ€eme ĂŒha rohkem parimaid lĂ€henemisi ja valmislahendusi, eriti pĂ€rast Selenium grid 4 vĂ€ljaandmist, millel on muudetud sisearhitektuur.

Selenoid:

Praegu on Selenoid'i kasutamine K8s-is suurim pettumus. Nad ei ole ĂŒhilduvad. Teoreetiliselt saame seadistada Selenoid-konteineri pod'i sees, kuid kui Selenoid hakkab kĂ€ivitama konteinerite brausereid, jÀÀvad need ikkagi samasse pod'i. See muudab skaleerimise vĂ”imatuks ja seetĂ”ttu ei erine Selenoid'i töö klastris milleski sellest, kuidas see toimib virtuaalses masinas. Loo lĂ”pp.

Moon:

Teades seda kitsaskohta Selenoid'iga töötamisel, on arendajad loonud vÔimsama tööriista nimega Moon. See tööriist oli algselt mÔeldud kasutamiseks Kubernetesega ning seetÔttu saab ja tuleb kasutada automaatse skaleerimise funktsiooni. Rohkemgi veel, vÔiksin öelda, et hetkel on see ainus tööriist Seleniumi maailmas, mis pakub kohe algusest peale native K8s klastritoetust (ei, vt jÀrgmist tööriista ). Peamine omadus, mis Moon'il selle toe tagab, on: 

Completely stateless. Selenoid salvestab mĂ€lu kaudu informatsiooni praegu töötavate brauseriseansside kohta. Kui mingil pĂ”hjusel selle protsess kokku kukub, kaovad kĂ”ik töötavad seansid. Moonil seevastu pole sisemist olekut ja seda saab replitseerida andmekeskustes. Brauseriseansid jÀÀvad elujĂ”uliseks isegi siis, kui ĂŒks vĂ”i mitu replikat kukuvad.

Nii, Moon on suurepĂ€rane lahendus, kuid on ĂŒks probleem – see ei ole tasuta. Hind sĂ”ltub sessioonide arvust. Tasuta on vĂ”imalik kĂ€ivitada vaid 0-4 sessiooni, mis ei ole eriti kasulik. Kuid alates viiendast sessioonist tuleb igaĂŒhe eest maksta 5 $. Olukord vĂ”ib ettevĂ”tteti erineda, kuid meie puhul on Moon kasutamine mĂ”ttetu. Nagu ma juba eespool selgitasin, saame kĂ€ivitada VMs Selenium Gridiga nĂ”udmisel vĂ”i suurendada Nodes'i arvu klastris. Ühe pipeline'i kohta kĂ€ivitame umbes 500 brauserit ja peatame kĂ”ik ressursid pĂ€rast testide lĂ”ppu. Kui me kasutaksime Mooni, peaksime maksma lisaks 500 x 5 = 2500 $ kuus, olenemata sellest, kui sageli me teste kĂ€ivitame. Ja jĂ€lle, ma ei ĂŒtle, et 'Ă€rge kasutage Mooni'. Teie ĂŒlesannete puhul vĂ”ib see olla asendamatu lahendus, nĂ€iteks juhul, kui teil on organisatsioonis palju projekte/tiime ja vajate suurt jagatud klastrit kĂ”igi jaoks. Nagu alati, jĂ€tan allapoole lingi ja soovitan teha kĂ”ik vajalikud arvutused teie ĂŒlesande kontekstis.

Callisto: (TÀhelepanu! Seda ei leidunud originaalis ja see on ainult vene tÔlkes.)

Nagu ma ĂŒtlesin, on Selenium vĂ€ga populaarne tööriist ja IT-sektor areneb vĂ€ga kiiresti. Samal ajal, kui ma tĂ”lkega tegelesin, ilmus vĂ”rku uus paljutĂ”otav tööriist Callisto (tere, Cypress ja teised Seleniumi konkurendid). See töötab natiivsete K8s-iga ja vĂ”imaldab Selenoid-konteinereid kĂ€itada pods, jaotatuna Node'ide vahel. KĂ”ik töötab kohe vĂ€lja kastist, sealhulgas automaatne skaleerimine. Fantastiline, kuid seda tuleb testida. Olen juba suutnud selle tööriista kĂ€ivitada ja teha mĂ”ned eksperimendid. Kuid jĂ€reldusi on vara teha, pĂ€rast tulemuste saamist pikas perspektiivis plaanin kindlasti kirjutada ĂŒlevaate jĂ€rgnevates artiklites. Praegu jĂ€tan siia vaid lingid iseseisvaks uurimiseks.  

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimiseks mÔeldud lingid

Sarnased töötajad

7. Infrastruktuur kui kood (IaC)

Tehnoloogia lĂŒhikirjeldus

Ja ja oleme jĂ”udnud viimase jao juurde. Üldiselt ei kuulu see tehnoloogia ja sellega seotud ĂŒlesanded automaatika inseneride vastutusalasse. Sellel on omad pĂ”hjused. Esiteks, paljudes organisatsioonides on infrastruktuurikĂŒsimused DevOps osakonna kontrolli all ja arendusmeeskond ei muretse eriti selle pĂ€rast, kuidas pipeline töötab ja kuidas kĂ”ike, mis sellega seotud, toetada. Teiseks, olgem ausad, praktikad "Infrastruktuur kui kood (IaC)" ei ole veel paljudes ettevĂ”tetes rakendatud. Kuid kindlasti on see saanud populaarseks suunaks ja on oluline pĂŒĂŒda olla seotud sellega seotud protsesside, lĂ€henemiste ja tööriistadega. VĂ”i vĂ€hemalt olla kursis arengutega.

Alustame motivatsiooni arutamisega, miks selline lĂ€henemine on vajalik. Oleme juba arutanud, et GitlabCI testide kĂ€ivitamiseks vajame vĂ€hemalt ressursse Gitlab Runner’i kĂ€ivitamiseks. Brauserite/emulaatorite konteinerite kĂ€ivitamiseks peame reserveerima VM vĂ”i klastrit. Lisaks testimisressurssidele on meil vaja mĂ€rkimisvÀÀrset hulka vĂ”imekust, et toetada arenduse, staging’i ja tootmisprotsesside keskkondi, mis hĂ”lmavad ka andmebaase, automaatseid ajakavu, vĂ”rgukonfiguratsioone, koormuse tasakaalustajat, kasutajate Ă”igusi jne. Peamine probleem seisneb kĂ”igi nende elementide toetamiseks vajalikes pingutustes. On mitmeid viise, kuidas saame muudatusi teha ja uuendusi rakendada. NĂ€iteks GCP kontekstis saame kasutada brauseri kasutajaliidest ja tĂ€ita kĂ”ik toimingud nuppude klikkimise kaudu. Alternatiivne meetod vĂ”ib olla API-kutsede kasutamine pilveelementidega suhtlemiseks vĂ”i gcloud kĂ€sureautomi kasutamine vajalike toimingute teostamiseks. Kuid tĂ”eliselt suure hulga erinevate elementide ja infrastruktuuri komponentidega muutub kĂ”ikide toimingute kĂ€sitsi tegemine keeruliseks vĂ”i isegi vĂ”imatuks. Veelgi enam, kĂ”ik need kĂ€sitsi teostatavad toimingud on kontrollimata. Me ei saa neid enne tĂ€itmist ĂŒle vaadata, versioonihaldussĂŒsteemi kasutada ega kiiresti tagasi kerida muudatusi, mis viisid probleemini. Selliste probleemide lahendamiseks on insenerid loonud ja loovad automaatseid bash/shell skripte, mis ei ole palju parem eelmistest meetoditest, kuna neid pole eriti lihtne kiiresti lugeda, mĂ”ista, hallata ja protseduurilises stiilis muuta.

Selles artiklis ja praktilises juhendis kasutan kahte tööriista, mis kuuluvad IaC praktikasse. Need on Terraform ja Ansible. MĂ”ned arvavad, et ei ole mĂ”tet neid samal ajal kasutada, kuna nende funktsioonid on sarnased ja nad on omavahel asendatavad. Kuid asi on selles, et algselt on nende eesmĂ€rgid tĂ€iesti erinevad. Ja tĂ”siasi, et need tööriistad peavad ĂŒksteist tĂ€iendama, kinnitati ĂŒhises esitluses, mille tegid HashiCorpi ja RedHati esindavad arendajad. Kontseptuaalne erinevus seisneb selles, et Terraform on serverite haldamiseks mĂ”eldud provisioningu tööriist. Ansible aga on konfigureerimise haldamise tööriist, mille ĂŒlesanne on nendele serveritele tarkvara installimine, seadistamine ja haldamine.

Teiste tööriistade peamine eripÀra on koodi kirjutamise stiil. Erinevalt bash'ist ja Ansible'ist kasutab Terraform deklaratiivset lÀhenemist, mis pÔhineb soovitud lÔppseisundi kirjelduse loomisel. NÀiteks kui plaanime luua 10 virtuaalmasinat ja rakendada muudatusi lÀbi Terraformi, siis saame 10 virtuaalmasinat. Kui skripti uuesti kÀivitada, ei juhtu midagi, kuna meil on juba 10 virtuaalmasinat ja Terraform teab sellest, kuna hoiab infrastruktuuri praegust olekut state-failis. Ansible aga kasutab protseduurilist lÀhenemist ja kui palume tal luua 10 virtuaalmasinat, siis esimesel kÀivitamisel saame 10 virtuaalmasinat, just nagu Terraformiga. Kuid pÀrast korduvat kÀivitamist on meil juba 20 virtuaalmasinat. See ongi oluline erinevus. Protseduurilises stiilis ei hoia me praegust olekut ja kirjeldame lihtsalt sammude jÀrjekorda, mis tuleb tÀita. Loomulikult saame kÀsitleda erinevaid olukordi, lisada kontrollid ressursside olemasolu ja praeguse oleku kohta, kuid pole mÔtet raisata meie aega ja pingutada selle loogika kontrollimisel. Lisaks suurendab see riski eksida. 

KokkuvĂ”ttes vĂ”ib öelda, et serverite provisionimiseks on kĂ”ige sobivam tööriist Terraform ja deklaratiivne sĂŒntaks. Konfiguratsioonide haldamise ĂŒlesanded on aga parem delegeerida Ansible'ile. Tutvume nĂŒĂŒd automaatika kontekstis kasutamise nĂ€idetega.

VÀÀrtus automaatimise infrastruktuurile

Siin on oluline mÔista, et testimise automatiseerimise infrastruktuur peab olema osa ettevÔtte kogu infrastruktuurist. See tÀhendab, et kÔik IaC-praktikad peaksid olema rakendatud globaalselt kogu organisatsiooni ressurssidele. Kes selle eest vastutab, sÔltub teie protsessidest. DevOps meeskond on selles osas kogenum, nad nÀevad kogu toimuvat pilti. Siiski on QA-insenerid rohkem kaasatud automatiseerimise ehitamisse ja pipeline'i struktuuri, mis vÔimaldab neil paremini nÀha vajalikke muudatusi ja tÀiustamise vÔimalusi. Parim lahendus on koostöö, teadmiste ja ideede jagamine soovitud tulemuse saavutamiseks. 

Tulen vÀlja mÔned nÀited Terraformi ja Ansible'i kasutamisest testimise automatiseerimise kontekstis ning tööriistadest, millest oleme varem rÀÀkinud:

1. Kirjeldada Terraformi kaudu vajalikud omadused ja parameetrid VM-idele ja klastritele.

2. Installida Ansible'i abil testimiseks vajalikud tööriistad: docker, Selenoid, Selenium Grid ning laadida alla vajalikud brauserite/emulaatorite versioonid.

3. Kirjeldada Terraformi kaudu VM-i omadused, kus töötab GitLab Runner.

4. Installida Ansible'i abil GitLab Runner ja vajalikud seotud tööriistad, seada konfiguratsioonid ja seaded.

Praeguse infrastruktuuri seisundi illustreerimine

DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Uurimislingid:

Sarnased töötajad

Teeme kokkuvÔtte!

Samm
Tehnoloogia
Tööriistad
VÀÀrtus automaatimise infrastruktuurile

1
Kohalik kÀitamine
Node.js, Selenium, Appium

  • KĂ”ige populaarsemad tööriistad veebilehtede ja mobiilsete rakenduste jaoks
  • Toetab mitmeid keeli ja platvorme (sealhulgas Node.js)

2
VersioonihaldussĂŒsteemid 
Git

  • Sarnased eelised arenduskoodeksiga

3
Konteineriseerimine
Docker, Selenium grid, Selenoid (Web, Android)

  • Paralleelsed testide kĂ€ivitamised
  • Isoleeritud keskkonnad
  • Lihtne ja paindlik versioonide uuendamine
  • DĂŒnaamiline mittekasutatavate ressursside peatamine
  • Lihtne seadistada

4
CI / CD
Gitlab CI

  • Testid on osa konveierist
  • Kiire tagasiside
  • Töötajatele / meeskonnale nĂ€htavus

5
Pilveteenused
Google Cloud Platform

  • NĂ”udmisel ressursid (maksame ainult siis, kui need on vajalikud)
  • Lihtne hallata ja vĂ€rskendada
  • KĂ”igi ressursside nĂ€htavus ja kontroll

6
Orkestreerimine
Kubernetes
Konteinerite kontekstis, kus veebibrauserid/emulaatorid on podides:

  • Suurendamine / automaatne suurendamine
  • Iseseisvalt taastumine
  • Uuendused ja tagasivĂ”tmised katkestusteta

7
Infrastruktuur kui kood (IaC)
Terraform, Ansible

  • Sarnased eelised arendustegevuse infrastruktuurile
  • KĂ”ik koodiversioonimise eelised
  • Lihtne muudatusi teha ja hooldada
  • TĂ€ielikult automatiseeritud

MÔttekaardi diagrammid: infrastruktuuri evolutsioon

step1: Kohalik
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step2: VCS
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step3: Konteinerimine 
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step4: CI/CD 
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step5: Pilve platvormid
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step6: Orkestreerimine
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

step7: IaC
DevOps tööriistad ei ole ainult DevOps'i jaoks. Automaattestimise infrastruktuuri loomise protsess nullist.

Mis edasi?

Nii et see oli artikli lÔpp. Kuid lÔpuks sooviksin teiega teatud kokkuleppeid kehtestada.

Teie poolt
Nagu alguses mainitud, sooviksin, et artikkel oleks praktiliselt kasulik ja aitaks teid rakendada omandatud teadmisi reaalses töös. Lisa veel kord praktilise juhendi link.

Kuid isegi pÀrast seda Àrge peatuge, harjutage, uurige asjakohaseid linke ja raamatuid, uurige, kuidas see teie ettevÔttes töötab, leidke kohti, kus midagi saaks parandada ja osalege selles. Edu!

Minu poolt

Pealkirjast nĂ€htub, et see oli ainult esimene osa. Kuigi see osutus ĂŒsna mahukaks, ei ole siin siiski olulisi teemasid kĂ€sitletud. Teises osas plaanin kĂ€sitleda automatiseerimise infrastruktuuri IOS-i kontekstis. Apple’i piirangute tĂ”ttu, mis seavad IOS emulatorite kĂ€itamise ainult macOS sĂŒsteemidesse, on meie lahenduste komplekt kitsendatud. NĂ€iteks ei saa me kasutada Dockerit emulaatori kĂ€itamiseks vĂ”i avalikke pilvi virtuaalmasinate kĂ€itamiseks. Kuid see ei tĂ€henda, et pole olemas muid alternatiive. PĂŒĂŒan hoida teid kursis uuenduslike lahenduste ja kaasaegsete tööriistadega!

Samuti ei maininud ma ĂŒsna suurte teemadega seonduvat, mis puudutab jĂ€lgimist. Kolmandas osas kavatsen vaadata ĂŒle kĂ”ige populaarsed infrastruktuuri jĂ€lgimise tööriistad ning milliseid andmeid ja mÔÔdikuid tuleks arvesse vĂ”tta.

Ja lÔpetuseks. Tulevikus plaanin vÀlja anda videokursuse testimisstrateegiate ja populaarsete tööriistade loomise kohta. Praegu on internetis palju DevOps kursusi ja loenguid, kuid kÔik materjalid kÀsitlevad arendust, mitte testimise automatiseerimist. Siin vajaksin vÀga tagasisidet, kas selline kursus oleks testijate ja automatiseerijate kogukonnale huvitav ja vÀÀrtuslik. Ette tÀnades!

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster