
Aruandes rÀÀgitakse mÔnest DevOpsi praktikast, kuid arendaja vaatenurgast. Tavaliselt on kÔigil DevOpsiga liituvatel inseneridel juba mitmeaastane halduskogemus. Aga see ei tÀhenda, et siin poleks kohta arendajal. Enamasti tegelevad arendajad "pÀeva jÀrgmise kiireloomulise kriitilise vea" parandamisega ja neil pole aega isegi DevOpsi vÀljale kiiret pilku heita. Autori arvates on DevOps esiteks terve mÔistus. Teiseks on see vÔimalus olla efektiivsem. Kui olete arendaja, teil on tervet mÔistust ja soovite olla meeskonnamÀngijana tÔhusam, on see aruanne teie jaoks.
Lubage mul end tutvustada, tunnistan tÀielikult, et ruumis on inimesi, kes mind ei tunne. Minu nimi on Anton Boyko, ma olen Microsoft Azure'i MVP. Mis on MVP? See on Model-View-Esitleja. Model-View-Presenter olen tÀpselt mina.
Lisaks töötan hetkel Ciklumis lahendusarhitekti ametit. Ja just hiljuti ostsin endale nii ilusa domeeni ja uuendasin oma meili, mida tavaliselt esitlustel nĂ€itan. VĂ”ite mulle kirjutada aadressil: me [koer] byokoant.pro. KĂŒsimustega vĂ”ite saata mulle meili. Tavaliselt vastan neile. Ainus asi on see, et ma ei soovi saada meili teel kĂŒsimusi, mis on seotud kahe teemaga: poliitika ja religioon. KĂ”igest muust vĂ”id mulle kirjutada meili teel. Mingi aeg lĂ€heb, vastan.

Paar sÔna endast:
- Olen sellel alal tegutsenud nĂŒĂŒdseks 10 aastat.
- Töötasin Microsoftis.
- Olen Ukraina Azure kogukonna asutaja, mille asutasime kuskil 2014. aastal. Ja see on meil siiani alles ja me arendame seda.
- Olen ka Ukrainas korraldatava Azure konverentsi asutaja isa.
- Aitan korraldada ka Global Azure Bootcamp'i Kiievis.
- Nagu ma ĂŒtlesin, olen Microsoft Azure'i MVP.
- Ma rÀÀgin konverentsidel ĂŒsna sageli. Mulle vĂ€ga meeldib konverentsidel esineda. Viimase aasta jooksul sain esineda umbes 40 korda. Kui möödute Ukrainast, Valgevenest, Poolast, Bulgaariast, Rootsist, Taanist, Hollandist, Hispaaniast vĂ”i annate vĂ”i vĂ”tate mĂ”ne muu riigi Euroopas, siis on tĂ€iesti vĂ”imalik, et kui lĂ€hete konverentsile, mille voos on pilveteema, vĂ”ite mind esinejate loendis nĂ€ha.
- Olen ka Star Treki fÀnn.

RÀÀgime natuke Agendast. Meie pÀevakava on vÀga lihtne:
- RÀÀgime sellest, mis on DevOps. RÀÀgime, miks see oluline on. Varem oli DevOps mĂ€rksĂ”na, mille kirjutasid oma CV-sse ja said kohe +500 dollarit palka. NĂŒĂŒd tuleb oma CV-sse kirjutada nĂ€iteks blockchain, et palgale +500 dollarit saada.
- Ja siis, kui saame natuke aru, mis see on, rÀÀgime sellest, millised on DevOpsi tavad. Kuid mitte niivĂ”rd DevOpsi kontekstis ĂŒldiselt, vaid nende DevOpsi tavade kohta, mis vĂ”iksid arendajatele huvi pakkuda. Ma ĂŒtlen teile, miks need vĂ”ivad teile huvi pakkuda. Ma ĂŒtlen teile, miks peaksite seda ĂŒldse tegema ja kuidas see aitab teil valu vĂ€hem tunda.

Traditsiooniline pilt, mida paljud inimesed nÀitavad. Nii juhtub paljudes projektides. See on siis, kui meil on arendus- ja operatsiooniosakonnad, mis toetavad meie tarkvara. Ja need osakonnad ei suhtle omavahel.
VĂ”ib-olla, kui te ei suutnud seda DevOpsis ja operatsiooniosakondades nii selgelt tunda, vĂ”ite tuua analoogia arendus- ja kvaliteedikontrolli osakondadega. On inimesi, kes arendavad tarkvara ja on QA inimesi, kes on arendajate seisukohalt halvad. NĂ€iteks panen oma imelise koodi hoidlasse ja seal istub mingi kaabakat, kes tagastab mulle selle koodi ja ĂŒtleb, et su kood on halb.
See kĂ”ik juhtub seetĂ”ttu, et inimesed ei suhtle omavahel. Ja nad viskavad ĂŒksteisele mingeid pakendeid, rakendusi lĂ€bi mingi arusaamatuse seina ja ĂŒritavad nendega midagi peale hakata.
Just seda mĂŒĂŒri DevOpsi kultuur on loodud hĂ€vitama, s.t. sundida inimesi omavahel suhtlema ja vĂ€hemalt mĂ”istma, mida erinevad projektis osalevad inimesed teevad ja miks nende töö on oluline.

Ja kui me rÀÀgime DevOpsist, siis keegi ĂŒtleb teile, et DevOps on siis, kui projektil on pidev integreerimine; keegi ĂŒtleb, et DevOps on see, kui projektis rakendatakse tava âinfrastruktuur kui koodâ; keegi ĂŒtleb, et DevOpsi esimene samm on funktsioonide hargnemine, funktsioonilipud.

PÔhimÔtteliselt on see kÔik omal moel tÔsi. Kuid need on ainult meie parimad tavad. Enne nende tavade juurde asumist soovitan vaadata seda slaidi, mis nÀitab Dev-Opsi metoodika rakendamise kolme etappi teie projektis teie ettevÔttes.
Sellel slaidil on ka teine ââmitteametlik nimi. Saate veebist otsida, et teada saada, millised on DevOpsi kolm musketĂ€ri. VĂ”imalik, et leiate selle artikli. Miks 3 musketĂ€ri? All on kirjas: inimesed, protsessid ja tooted, st. PPP â Porthos, Porthos ja Porthos. Siin on kolm DevOpsi musketĂ€ri. Selles artiklis kirjeldatakse ĂŒksikasjalikumalt, miks see on oluline ja mida see endast kujutab.
Kui alustate DevOpsi kultuuri juurutamist, on vÀga oluline, et seda rakendataks jÀrgmises jÀrjekorras.
Esialgu peate inimestega rÀÀkima. Ja peate inimestele selgitama, mis see on ja kuidas nad saavad sellest kasu.
Meie konverentsi nimi on DotNet Fest. Ja nagu korraldajad mulle ĂŒtlesid, kutsusime siia peamiselt arendajate publiku, seega loodan, et suurem osa saalis viibijatest on arendusega seotud.
RÀÀgime inimestest, rÀÀgime sellest, mida arendajad iga pÀev teha tahavad. Mida nad kÔige rohkem tahavad? Nad tahavad kirjutada uut koodi, kasutada uusi raamistikke, luua uusi funktsioone. Mida arendajad kÔige vÀhem tahavad? Parandage vanad vead. Loodan, et nÔustute minuga. See on see, mida arendajad tahavad. Nad tahavad kirjutada uusi funktsioone, nad ei taha vigu parandada.
Konkreetse arendaja tekitatud vigade arv sÔltub sellest, kui sirged on tema kÀed ja kui palju nad kasvavad Ôlgadest, mitte tagumikutaskutest. Kuid sellegipoolest, kui meil on suur projekt, juhtub mÔnikord, et kÔike on vÔimatu jÀlgida, mistÔttu oleks tore, kui kasutaksime mÔnda lÀhenemisviisi, mis aitaks meil kirjutada stabiilsemat ja kvaliteetsemat koodi.
Mida QA-d kĂ”ige rohkem tahavad? Ma ei tea, kas nad on saalis. Mul on raske öelda, et ma tahan kvaliteedikontrolli, sest ma pole seda kunagi olnud. Ja Ă€rge pahandage poisse, öeldakse, et ma loodan, et ma ei tee seda kunagi. Aga mitte sel pĂ”hjusel, et ma nende tööd mĂ”ttetuks ja kasutuks pean, vaid sellepĂ€rast, et ma ei pea end inimeseks, kes suudaks seda tööd tĂ”husalt teha, nii et ma isegi ei pĂŒĂŒa seda teha. Kuid nagu ma aru saan, on see, mis QA-le kĂ”ige rohkem ei meeldi hommikuti töötamine, pidev regressioonitestide tegemine, samade vigade astumine, millest nad 3 sprinti tagasi arendajatele teatasid, ja öelda: âMillal sa teed. , Monsieur D 'Artagnan, parandage see viga.' Ja monsieur D'Artagnan vastab talle: "Jah, jah, jah, ma olen selle juba parandanud." Ja kuidas see juhtub, et parandasin ĂŒhe vea ja tegin tee peal 5.
Inimesed, kes seda lahendust tootmises toetavad, soovivad, et see lahendus töötaks ilma vigadeta, et nad ei peaks igal reedel serverit taaskĂ€ivitama, kui kĂ”ik normaalsed inimesed baaris kĂ€ivad. Arendajad juurutasid reedel, administraatorid istuvad kuni laupĂ€evani ning ĂŒritavad seda juurutamist ĂŒles ehitada ja parandada.
Ja kui selgitate inimestele, et nad on suunatud samade probleemide lahendamisele, saate liikuda protsesside vormistamise juurde. See on vĂ€ga tĂ€htis. Miks? Sest kui me ĂŒtleme "formaliseerimine", on teil oluline kirjeldada, kuidas teie protsessid toimuvad vĂ€hemalt kuskil salvrĂ€tikul. Peate mĂ”istma, et kui juurutate nĂ€iteks kvaliteedikontrolli keskkonda vĂ”i tootmiskeskkonda, siis toimub see alati selles jĂ€rjekorras; nendes etappides kĂ€ivitame nĂ€iteks automaatsed ĂŒhikutestid ja kasutajaliidese testid. PĂ€rast kasutuselevĂ”ttu kontrollime, kas kasutuselevĂ”tt lĂ€ks hĂ€sti vĂ”i halvasti. Kuid teil on juba selge toimingute loend, mida tuleb tootmisse juurutamisel ikka ja jĂ€lle korrata.
Ja alles siis, kui teie protsessid on vormistatud, hakkate valima tooteid, mis aitavad teil neid protsesse automatiseerida.
Kahjuks nÀen ma vÀga sageli, et see juhtub vastupidiselt. Niipea kui keegi kuuleb sÔna "DevOps", soovitab ta kohe Jenkinsi installida, sest nad usuvad, et niipea, kui nad Jenkinsi installivad, on neil DevOps. Nad installisid Jenkinsi, lugesid Jenkinsi veebisaidil artikleid "Kuidas teha", proovisid neisse How to artiklitesse protsesse toppida ja tulid siis inimeste juurde ja kummardasid inimesi, öeldes, et raamatus öeldakse, et peate seda tegema nii. nii et me teeme seda nii.
Asi pole selles, et Jenkins on halb tööriist. Ma ei taha seda kuidagi öelda. Kuid see on vaid ĂŒks toodetest. Ja millist toodet te kasutate, peaks see olema teie viimane otsus ja mitte mingil juhul esimene. Teie toodet ei tohiks juhtida kultuuri ja lĂ€henemisviiside rakendamine. Seda on vĂ€ga oluline mĂ”ista, mistĂ”ttu veedan sellel slaidil nii palju aega ja seletan seda kĂ”ike nii kaua.

RÀÀgime DevOpsi tavadest ĂŒldiselt. Mis need on? Mis vahe on? Kuidas neid selga proovida? Miks need olulised on?

Esimene praktika, millest olete kuulnud, on pidev integreerimine. VÔib-olla on kellelgi projektis osalejal pidev integratsioon (CI).
Suurim probleem on see, et kui kĂŒsin inimeselt kĂ”ige sagedamini: "Kas teil on projektis CI?" ja ta ĂŒtleb: "Jah," siis kui ma kĂŒsin, mida ta teeb, kirjeldab ta mulle absoluutselt kogu automatiseerimisprotsessi. See pole tĂ€iesti tĂ”si.
Tegelikult on CI praktika suunatud lihtsalt erinevate inimeste kirjutatud koodi integreerimisele mingisse ĂŒhtsesse koodibaasi. See on kĂ”ik.
Lisaks CI-le on tavaliselt ka teisi tavasid â nĂ€iteks pidev juurutamine, vĂ€ljalaskehaldus, kuid sellest rÀÀgime hiljem.
CI ise ĂŒtleb meile, et koodi kirjutavad erinevad inimesed ja seda koodi tuleb pidevalt integreerida ĂŒhtsesse koodibaasi.
Mida see meile annab ja miks see oluline on? Kui meil on DotNet, siis see on hea, see on kompileeritud keel, saame oma rakenduse koostada. Kui see kompileerub, on see juba hea mÀrk. See ei tÀhenda veel midagi, kuid see on esimene hea mÀrk, mille saame vÀhemalt koostada.
SeejĂ€rel saame teha mĂ”ned testid, mis on samuti eraldi praktika. Testid on kĂ”ik rohelised â see on teine ââhea mĂ€rk. Aga jĂ€llegi, see ei tĂ€henda midagi.
Aga miks sa seda teeksid? KÔik tavad, millest ma tÀna rÀÀgin, kannavad ligikaudu sama vÀÀrtust, st ligikaudu sama kasu ja neid mÔÔdetakse samuti ligikaudu samamoodi.
Esiteks vÔimaldab see tarnimist kiirendada. Kuidas see vÔimaldab teil kohaletoimetamist kiirendada? Kui teeme oma koodibaasi uusi muudatusi, saame kohe proovida selle koodiga midagi teha. Me ei oota neljapÀevani, sest neljapÀeval avaldame selle QA Environmentile, teeme seda just siin ja siin.
Ma rÀÀgin teile ĂŒhe kurva loo oma elust. See oli ammu, kui ma olin veel noor ja ilus. NĂŒĂŒd olen juba noor, ilus ja tark ja tagasihoidlik. MĂ”ni aeg tagasi osalesin ĂŒhes projektis. Meil oli suur umbes 30 arendajast koosnev meeskond. Ja meil oli suur, suur ettevĂ”tte projekt, mis arenes umbes 10 aastat. Ja meil olid erinevad filiaalid. Hoidlas oli meil filiaal, kus arendajad kĂ”ndisid. Ja seal oli filiaal, mis kuvas tootmises oleva koodi versiooni.
Tootmisharu oli arendajatele kĂ€ttesaadavast harust 3 kuud maas. Mida see tĂ€hendab? See tĂ€hendab, et niipea kui mul on kuskil viga, mis lĂ€heb tootmisse arendajate sĂŒĂŒl, kuna nad seda lubasid, ja QA sĂŒĂŒl, kuna nad seda vaatasid, siis see tĂ€hendab, et kui ma saan Tootmise kĂ€igultparanduse ĂŒlesanne, siis pean 3 kuud tagasi tehtud koodimuudatused tagasi tĂ”mbama. Pean meenutama, mis mul 3 kuud tagasi oli, ja proovima seda seal parandada.
Kui teil pole seda kogemust veel olnud, saate seda oma koduprojektis proovida. Peaasi, et Àrge proovige seda kaubanduslikul kujul. Kirjutage paar koodirida, unustage need kuueks kuuks ja tulge seejÀrel tagasi ja proovige kiiresti selgitada, mida need koodiread endast kujutavad ja kuidas saate neid parandada vÔi optimeerida. See on vÀga-vÀga pÔnev kogemus.
Kui meil on pideva integreerimise tava, siis see vÔimaldab meil seda mitmete automatiseeritud tööriistadega kontrollida just siin ja kohe, niipea kui olen oma koodi kirjutanud. See ei pruugi anda mulle tÀit pilti, kuid sellegipoolest eemaldab see vÀhemalt osa riskidest. Ja kui on vÔimalik viga, siis ma saan sellest kohe teada, see tÀhendab sÔna otseses mÔttes paari minuti pÀrast. Ma ei pea 3 kuud tagasi kerima. Mul on vaja ainult 2 minutit tagasi kerida. Hea kohvimasin ei jÔua isegi 2 minutiga kohvi keeta, nii et see on pÀris lahe.
Sellel on vÀÀrtus, et seda saab iga projekti puhul korrata, s.t. mitte ainult see, mille seadistasite. Saate korrata nii praktikat ennast kui ka CI-d korratakse iga uue projekti muudatuse korral. See vĂ”imaldab teil ressursse optimeerida, kuna teie meeskond töötab tĂ”husamalt. Teil ei ole enam olukorda, kus viga tuleb teile koodist, millega töötasite 3 kuud tagasi. Te ei pea enam konteksti vahetama, kui istud ja veedad esimesed kaks tundi, pĂŒĂŒdes mĂ”ista, mis siis juhtus, ja enne kui midagi parandama hakkad konteksti olemusse jĂ”udma.
Kuidas me saame mÔÔta selle praktika edu vÔi ebaÔnnestumist? Kui annate suurele bossile aru, mida me CI projektis rakendasime, kuuleb ta bla-bla-bla. Me rakendasime selle, OK, aga miks, mida see meile tÔi, kuidas me seda mÔÔdame, kui Ôigesti vÔi valesti me seda rakendame?
Esimene on see, et tĂ€nu CI-le saame juurutada ĂŒha sagedamini ja sagedamini just seetĂ”ttu, et meie kood on potentsiaalselt stabiilsem. Samamoodi vĂ€heneb meie aeg vea leidmiseks ja selle vea parandamise aeg just sel pĂ”hjusel, et saame just siin ja praegu sĂŒsteemist vastuse, mis meie koodiga valesti on.

Veel ĂŒks meie tava on automatiseerimise testimise tava, mis enamasti kaasneb CI praktikaga. Need kĂ€ivad kĂ€sikĂ€es.
Mida on siin oluline mĂ”ista? Oluline on mĂ”ista, et meie testid on erinevad. Ja iga automatiseeritud test on suunatud oma probleemide lahendamisele. Meil on nĂ€iteks ĂŒhiktestid, mis vĂ”imaldavad testida moodulit eraldi, s.t. Kuidas see vaakumis töötab? See on hea.
Meil on ka integratsioonitestid, mis vÔimaldavad meil mÔista, kuidas erinevad moodulid omavahel integreeruvad. See on ka hea.
Meil vÔivad olla kasutajaliidese automatiseerimise testid, mis vÔimaldavad kontrollida, kui hÀsti töö kasutajaliidesega vastab teatud kliendi poolt seatud nÔuetele jne.
Teie kĂ€ivitatavad konkreetsed testid vĂ”ivad mĂ”jutada nende kĂ€itamise sagedust. Ăhiktestid on tavaliselt kirjutatud lĂŒhikesed ja vĂ€ikesed. Ja neid saab regulaarselt kĂ€ivitada.
Kui me rÀÀgime kasutajaliidese automatiseerimise testidest, siis on kĂ”ik korras, kui teie projekt on vĂ€ike. Teie kasutajaliidese automatiseerimise testid vĂ”ivad toimuda mĂ”istliku aja jooksul. Tavaliselt vĂ”tab aga suure projekti kasutajaliidese automatiseerimise test mitu tundi. Ja see on okei, kui see vĂ”tab vaid paar tundi. Ainuke asi on see, et nende kĂ€ivitamine igal versioonil pole mĂ”ttekas. MĂ”istlik on neid kĂ€ivitada öösel. Ja kui kĂ”ik hommikul tööle tulevad â nii testijad kui ka arendajad â, saavad nad mingi aruande, mis ĂŒtleb, et me kĂ€ivitasime kasutajaliidese automatiseerimise testi öösel ja saime need tulemused. See on tunni töö. serverKvaliteedikontrolli inseneri palkamine, kes kontrollib teie toote vastavust teatud nĂ”uetele, on palju odavam kui tunniajaline kvaliteedikontrolli inseneri töö, isegi kui tegemist on tasuta töötava noorema kvaliteedikontrolli inseneriga. Tund masinatööd on ikkagi odavam. SeetĂ”ttu on sellesse investeerimine mĂ”istlik.
Mul on veel ĂŒks projekt, millega olen tegelenud. Meil oli selle projektiga kaks nĂ€dalat spurti. Projekt oli suur, finantssektori jaoks oluline ja viga ei saanud teha. Ja pĂ€rast kahenĂ€dalast spurti jĂ€rgnes arendustsĂŒklile testimisprotsess, mis vĂ”ttis veel 4 nĂ€dalat. Proovige ette kujutada tragöödia ulatust. Kirjutame koodi kaks nĂ€dalat, seejĂ€rel teeme seda CodeFreeze'iga, pakendame selle rakenduse uude versiooni ja avaldame testijatele. Testijad testivad seda veel 4 nĂ€dalat, st. Kuni nad seda testivad, on meil aega neile veel kaks versiooni ette valmistada. See on tĂ”esti kurb juhtum.
Ja me ĂŒtlesime neile, et kui soovite olla produktiivsem, on mĂ”istlik rakendada automatiseeritud testimise tavasid, sest just see teeb teile haiget just siin ja praegu.

Harjutage pidevat juurutamist. SuurepĂ€rane, olete ehitamise lĂ”petanud. See on juba hea. Teie kood on koostatud. NĂŒĂŒd oleks tore juurutada see ehitus mĂ”nes keskkonnas. Oletame, et arendajatele mĂ”eldud keskkonnas.
Miks see oluline on? Esiteks saate vaadata, kui edukas olete juurutamisprotsessiga ise. Olen kohanud selliseid projekte, kui kĂŒsin: âKuidas te rakenduse uut versiooni juurutate?â, ĂŒtlevad poisid mulle: âMe paneme selle kokku ja pakime ZIP-arhiivi. Saadame selle adminnile posti teel. Administraator laadib selle arhiivi alla ja laiendab. Ja kogu kontor hakkab palvetama, et server uue versiooni ĂŒles vĂ”taks.
Alustame millegi lihtsaga. NĂ€iteks unustasid nad arhiivi CSS-i lisada vĂ”i JavaScripti faili nimes rĂ€simĂ€rki muuta. Ja kui me esitame pĂ€ringu server, arvab brauser, et tal on JavaScripti fail juba olemas ja otsustab seda mitte alla laadida. Aga vanas versioonis oli midagi puudu. LĂŒhidalt öeldes vĂ”ib probleeme olla palju. SeetĂ”ttu vĂ”imaldab pideva juurutamise praktika teil vĂ€hemalt testida, mis juhtub, kui vĂ”tta puhas vĂ”rdluskujutis ja lĂŒkata see tĂ€iesti puhtasse uude keskkonda. NĂ€ete, mis juhtub.
Samuti, kui integreerite omavahel koodi, st. kÀsu vahel, see vÔimaldab teil ka nÀha, kuidas see kasutajaliideses vÀlja nÀeb.
Ăks probleem, mis ilmneb, kui kasutatakse palju vanilje java-skripti, on see, et kaks arendajat deklareerisid aknaobjektis tormakalt sama nimega muutuja. Ja siis, sĂ”ltuvalt teie Ă”nnest. Kelle java-scripti fail teisena vĂ€lja tĂ”mmatakse, kirjutab teise faili muudatused ĂŒle. See on ka vĂ€ga pĂ”nev. Sa tuled sisse: ĂŒks asi töötab ĂŒhe inimese jaoks, teine ââei tööta teise jaoks. Ja see on "imeline", kui see kĂ”ik tootmises vĂ€lja tuleb.

JÀrgmine praktika, mis meil on, on automaatse taastamise tava, nimelt rakenduse eelmisele versioonile tagasipöördumine.
Miks on see arendajatele oluline? Veel on neid, kes mÀletavad kaugeid-kaugeid 90ndaid, mil arvutid olid suured ja programmid vÀikesed. Ja ainus viis veebiarenduseks oli PHP. Asi pole selles, et PHP on halb keel, kuigi see on nii.
Kuid probleem oli erinev. Kui juurutasime oma php saidi uue versiooni, kuidas me selle juurutasime? KĂ”ige sagedamini avasime Far Manageri vĂ”i midagi muud. Ja laadis need failid ĂŒles FTP-sse. Ja jĂ€rsku saime aru, et meil on mingi vĂ€ike vĂ€ike viga, nĂ€iteks unustasime panna semikooloni vĂ”i unustasime andmebaasi parooli muuta ja andmebaasi parool on olemas, mis asub kohalikus hostis. Ja otsustame kiiresti FTP-ga ĂŒhenduse luua ja faile seal redigeerida. See on lihtsalt tuli! See oli 90ndatel populaarne.
Aga kui te pole kalendrit vaadanud, siis 90ndad olid peaaegu 30 aastat tagasi. NĂŒĂŒd toimub kĂ”ik veidi teisiti. Ja proovige ette kujutada tragöödia ulatust, kui teile öeldakse: "Me kasutasime tootmist, kuid seal lĂ€ks midagi valesti. Siin on teie FTP sisselogimine ja parool, looge ĂŒhendus tootmisvĂ”rguga ja parandage see seal kiiresti. Kui sa oled Chuck Norris, siis see toimib. Kui ei, siis on oht, et kui parandate ĂŒhe vea, saate veel 10. Just seetĂ”ttu vĂ”imaldab see eelmisele versioonile tagasipöördumine palju saavutada.
Isegi kui midagi halba sattus kuskil prodisse, on see halb, kuid mitte saatuslik. Saate naasta eelmisele versioonile. Nimetage seda varukoopiaks, kui seda on selles terminoloogias lihtsam tajuda. Saate naasta sellele eelmisele versioonile ja kasutajad saavad endiselt teie tootega töötada ja teil on piisavalt puhveraega. Saate seda kĂ”ike rahulikult, kiirustamata ette vĂ”tta ja kohapeal testida, parandada ja seejĂ€rel uue versiooni ĂŒles laadida. Seda on tĂ”esti mĂ”istlik teha.

Proovime nĂŒĂŒd kahte eelnevat praktikat kuidagi omavahel kombineerida. Saame kolmanda nimega Release Management.
Kui me rÀÀgime pidevast juurutamisest selle klassikalisel kujul, siis ĂŒtleme, et peame hoidlast mĂ”nest harust koodi tĂ”mbama, selle kompileerima ja juurutama. Hea, kui meil on sama keskkond. Kui meil on mitu keskkonda, tĂ€hendab see, et peame koodi tĂ”mbama iga kord, isegi samast sissekandmisest. TĂ”mbame selle iga kord vĂ€lja, ehitame iga kord ja juurutame selle uude keskkonda. Esiteks on kĂ€es aeg, sest kui teil on suur projekt ja see on pĂ€rit 90ndatest, vĂ”ib see vĂ”tta mitu tundi.
Peale selle on veel ĂŒks kurbus. Kui ehitate, isegi samale masinale, ehitate samu allikaid, kuid teil pole endiselt garantiid, et see masin on samas olekus, nagu see oli viimase ehitamise ajal.
Oletame, et keegi tuli sisse ja vĂ€rskendas DotNeti teie jaoks vĂ”i vastupidi, keegi otsustas midagi kustutada. Ja siis on teil kognitiivne dissonants, et sellest kahe nĂ€dala tagusest commitist ehitasime ehitamist ja kĂ”ik oli korras, aga nĂŒĂŒd tundub, et see on sama masin, sama commit, sama kood, mida me ĂŒritame luua, kuid see ei tööta . Te tegelete sellega pikka aega ja pole tĂ”si, et te sellest aru saate. VĂ€hemalt rikute palju oma nĂ€rve.
SeetÔttu soovitab vÀljalaskehalduse tava kasutusele vÔtta tÀiendava abstraktsiooni, mida nimetatakse artefaktihoidlaks vÔi galeriiks vÔi raamatukoguks. Sa vÔid seda nimetada kuidas tahad.
PÔhiidee seisneb selles, et niipea, kui meil on seal mingisugune commit, nÀiteks filiaalis, mida oleme valmis oma erinevatesse keskkondadesse juurutama, kogume sellelt commitilt rakendused ja kÔik, mida selle rakenduse jaoks vajame, pakkime selle. ZIP-arhiivi ja salvestage see mÔnda usaldusvÀÀrsesse salvestusruumi. Ja sellelt salvestusruumilt saame selle ZIP-arhiivi igal ajal hankida.
SeejĂ€rel vĂ”tame selle ja juurutame selle automaatselt arenduskeskkonda. VĂ”isteldakse seal ja kui kĂ”ik on hĂ€sti, siis lĂ€heme lavale. Kui kĂ”ik on korras, juurutame tootmisse sama arhiivi, samad binaarfailid, mis on kompileeritud tĂ€pselt ĂŒks kord.
Lisaks, kui meil on selline galerii, aitab see meil kÀsitleda riske, mida kÀsitlesime eelmisel slaidil, kui rÀÀkisime eelmisele versioonile tagasipööramisest. Kui juurutasite kogemata midagi valesti, saate alati sellest galeriist vÔtta mis tahes muu eelmise versiooni ja eemaldada selle nendes keskkondades samal viisil. See vÔimaldab teil hÔlpsasti naasta eelmisele versioonile, kui midagi lÀheb valesti.

On veel ĂŒks suurepĂ€rane praktika. Teie ja mina mĂ”istame kĂ”ik, et kui me oma rakendusi ennistame eelmisele versioonile, vĂ”ib see tĂ€hendada, et vajame ka eelmise versiooni infrastruktuuri.
Virtuaalsest infrastruktuurist rÀÀkides arvavad paljud, et see on midagi, mille administraatorid seadistavad. Seega, kui teil on vaja nĂ€iteks uut serverit oma rakenduse uue versiooni testimiseks, peate esitama administraatoritele vĂ”i DevOpsile pileti. DevOpsil kulub selleks kolm nĂ€dalat. Ja kolme nĂ€dala pĂ€rast ĂŒtlevad nad teile, et oleme installinud teile virtuaalmasina ĂŒhe tuuma, kahe gigabaidise muutmĂ€lu ja... Windows- server ilma DotNetita. Sa ĂŒtled: "Aga ma tahtsin DotNeti." Nad ĂŒtlevad: "Olgu, tule kolme nĂ€dala pĂ€rast tagasi."
Idee seisneb selles, et kui kasutate infrastruktuuri koodi tavadena, saate oma virtuaalset infrastruktuuri kĂ€sitleda lihtsalt ĂŒhe ressursina.
VĂ”ib-olla, kui keegi teist arendab DotNetis rakendusi, olete ehk kuulnud teegist nimega Entity Framework. VĂ”ib-olla olete isegi kuulnud, et Entity Framework on ĂŒks lĂ€henemisviisidest, mida Microsoft aktiivselt edendab. Andmebaasiga töötamiseks on see lĂ€henemine nimega Code First. See on siis, kui kirjeldate koodis, kuidas soovite oma andmebaasi vĂ€lja nĂ€ha. Ja siis juurutate rakenduse. See ĂŒhendub andmebaasiga, mÀÀrab ise, millised tabelid on olemas ja millised mitte, ning loob kĂ”ik vajaliku.
Sama saad teha ka oma infrastruktuuriga. Pole vahet, kas vajad andmebaasi projekti vÔi projekti jaoks. Windows-server. See on lihtsalt ressurss. Ja selle ressursi loomise, selle ressursi konfigureerimise saab automatiseerida. Seega ei pea te iga kord, kui soovite uut kontseptsiooni vÔi lÀhenemisviisi testida, DevOps-i piletit esitama. Saate lihtsalt juurutada isoleeritud infrastruktuuri valmismallide ja skriptide abil ning kÀivitada kÔik oma katsed seal. Saate selle kustutada, tulemusi hankida ja neist aru anda.

JÀrgmine praktika, mis on samuti olemas ja samuti oluline, kuid mida vÀhesed kasutavad, on rakenduste toimivuse jÀlgimine.
Tahtsin rakenduse jĂ”udluse jĂ€lgimise kohta öelda ainult ĂŒht. Mis on selle praktika juures kĂ”ige olulisem? See on rakenduse jĂ”udluse jĂ€lgimine umbes sama, mis korteri remont. See ei ole lĂ”plik seisund, see on protsess. Peate seda regulaarselt tegema.
Hea mÔte oleks rakenduse jÔudluse jÀlgimine peaaegu igas jÀrgus lÀbi viia, kuigi, nagu te aru saate, pole see alati vÔimalik. Kuid seda tuleb teha vÀhemalt iga vÀljalaske puhul.
Miks see oluline on? Sest kui kogete jÀrsku jÔudluse langust, peate selgelt mÔistma, miks. Kui teie meeskonnal on nÀiteks kahenÀdalased sprintid, siis peaksite vÀhemalt kord kahe nÀdala jooksul juurutama oma rakenduse mÔnda eraldi serverisse, kus teil on selgelt fikseeritud protsessor, RAM, kettad jne. Ja kÀivitage need samad jÔudlustestid. . Sa saad tulemuse. Vaata, kuidas see eelmisest sprindist muutunud on.
Ja kui avastate, et vÀljamakse langes kuskil jÀrsult, tÀhendab see, et see oli lihtsalt viimase kahe nÀdala jooksul toimunud muutuste tÔttu. See vÔimaldab teil probleemi palju kiiremini tuvastada ja lahendada. Ja jÀllegi on need ligikaudu samad mÔÔdikud, mille abil saate mÔÔta, kui edukalt te seda tegite.

JÀrgmine praktika on konfiguratsioonihaldus. VÀga vÀhe on neid, kes seda tÔsiselt vÔtavad. Aga uskuge mind, see on tegelikult vÀga tÔsine asi.
Hiljuti oli ĂŒks naljakas lugu. Poisid tulid minu juurde ja ĂŒtlesid: "Aidake meil lĂ€bi viia meie rakenduse turvaaudit." Vaatasime koos pikalt koodi, nad rÀÀkisid rakendusest, joonistasid skeeme. Ja pluss-miinus oli kĂ”ik loogiline, arusaadav, turvaline, aga oli ĂŒks AGA! Nende allikajuhtimises olid konfiguratsioonifailid, sealhulgas IP-andmebaasiga tootmisfailid, nende andmebaasidega ĂŒhenduse loomiseks vajalikud sisselogimised ja paroolid jne.
Ja ma ĂŒtlen: "Poisid, okei, sulgesite oma tootmiskeskkonna tulemĂŒĂŒriga, kuid see, et teil on tootmisandmebaasi sisselogimine ja parool otse lĂ€htekoodi kontrolli all ja iga arendaja saab seda lugeda, on juba tohutu turvarisk. . Ja olenemata sellest, kui ĂŒliturvaline teie rakendus koodi seisukohast on, kui jĂ€tate selle allika juhtimise alla, ei lĂ€bi te kunagi ĂŒhtegi auditit. Sellest ma rÀÀgingi.
Konfiguratsiooni juhtimine. Meil vÔivad erinevates keskkondades olla erinevad konfiguratsioonid. NÀiteks vÔivad meil olla erinevad sisselogimised ja paroolid andmebaaside jaoks QA, demo, tootmiskeskkonna jne jaoks.
Seda konfiguratsiooni saab ka automatiseerida. See peaks alati olema rakendusest eraldi. Miks? Kuna lĂ”ite rakenduse ĂŒhe korra ja siis pole rakendusel vahet, kas loote ĂŒhenduse SQL-serveriga sellise ja sellise IP vĂ”i sellise ja sellise IP kaudu, peaks see töötama samamoodi. Seega, kui Ă€kki keegi teist ikka veel kĂ”vasti kodeerib koodis olevat ĂŒhendusstringi, siis pidage meeles, et ma leian teid ĂŒles ja karistan teid, kui leiate end minuga samast projektist. See paigutatakse alati eraldi konfiguratsiooni, nĂ€iteks failis web.config.
Ja seda konfiguratsiooni hallatakse juba eraldi, st see on tĂ€pselt see hetk, mil arendaja ja administraator saavad tulla ja ĂŒhes ruumis istuda. Ja arendaja vĂ”ib öelda: "Vaata, siin on minu rakenduse binaarfailid. Nad töötavad. Rakendus vajab töötamiseks andmebaasi. Siin on kahendfailide kĂ”rval fail. Selles failis vastutab see vĂ€li sisselogimise eest, see on parooli ja IP-aadressi eest. Kasutage seda kĂ”ikjal." Ja see on administraatorile lihtne ja selge. Seda konfiguratsiooni haldades saab ta selle kasutusele vĂ”tta kĂ”ikjal.

Ja viimane praktika, millest tahaksin rÀÀkida, on praktika, mis on vÀga-vÀga seotud pilvedega. Ja see annab maksimaalse efekti, kui töötate pilves. See on teie keskkonna automaatne eemaldamine.
Ma tean, et sellel konverentsil on mitu inimest tiimidest, kellega ma töötan. Ja kÔigi meeskondadega, kellega ma töötan, kasutame seda praktikat.
Miks? Muidugi oleks tore, kui igal arendajal oleks virtuaalne masin, mis töötaks 24/7. Kuid vÔib-olla on see teile uudis, vÔib-olla ei pööranud te tÀhelepanu, kuid arendaja ise ei tööta 24/7. Arendaja töötab tavaliselt 8 tundi pÀevas. Isegi kui ta tuleb varakult tööle, on tal suur lÔunasöök, mille jooksul ta lÀheb jÔusaali. Olgu see siis 12 tundi pÀevas, mil arendaja neid ressursse reaalselt kasutab. Meie seadusandluse kohaselt on meil nÀdalas 5 pÀeva seitsmest, mida loetakse tööpÀevadeks.
Sellest lĂ€htuvalt ei tohiks see masin tööpĂ€eviti töötada 24 tundi, vaid ainult 12 ja nĂ€dalavahetustel ei tohiks see masin ĂŒldse töötada. NĂ€ib, et kĂ”ik on vĂ€ga lihtne, kuid mida on siin oluline öelda? Rakendades seda lihtsat tava selles pĂ”higraafikus, vĂ”imaldab see vĂ€hendada nende keskkondade ĂŒlalpidamiskulusid 70%, st vĂ”tsite oma arendaja, kvaliteedikontrolli, demo, keskkonna hinna ja jagasite selle 3-ga.
KĂŒsimus on selles, mida teha ĂŒlejÀÀnud rahaga? NĂ€iteks peaksid arendajad ostma ReSharperi, kui nad pole seda veel teinud. VĂ”i korraldage kokteilipidu. Kui teil oli varem ĂŒks keskkond, kus nii dev kui ka QA karjatasid, ja kĂ”ik, siis nĂŒĂŒd saate teha 3 erinevat, mis on isoleeritud ja inimesed ei sega ĂŒksteist.

Mis puutub pideva jÔudlusmÔÔtmisega slaidi, siis kuidas saame vÔrrelda jÔudlust, kui meil oli projektis andmebaasis 1 kirjet, kaks kuud hiljem on neid miljon? Kuidas aru saada, miks ja mis on tulemuslikkuse mÔÔtmise mÔte?
See on hea kĂŒsimus, sest tulemuslikkust tuleks alati mÔÔta samade ressurssidega. See tĂ€hendab, et vĂ”tate kasutusele uue koodi, mÔÔdate uue koodi toimivust. NĂ€iteks peate testima erinevaid jĂ”udlusstsenaariume, oletame, et soovite testida, kuidas rakendus töötab vĂ€ikese koormuse korral, kus on 1 kasutajat ja andmebaasi suurus on 000 gigabaiti. Sa mÔÔtsid selle ja said numbrid. JĂ€rgmisena vĂ”tame teise stsenaariumi. NĂ€iteks 5 kasutajat, andmebaasi suurus 5 terabait. Saime tulemused kĂ€tte ja jĂ€tsime need meelde.
Mis siin olulist on? Siin on oluline see, et olenevalt stsenaariumist, andmemahust, samaaegsete kasutajate arvust jne vÔivad teil tekkida teatud piirangud. NÀiteks vÔrgukaardi piirini vÔi kÔvaketta piirini vÔi protsessori vÔimaluste piirini. Seda on teie jaoks oluline mÔista. Erinevate stsenaariumide korral satute teatud piiridesse. Ja te peate numbreid mÔistma, kui neid tabate.
Kas me rÀÀgime jÔudluse mÔÔtmisest spetsiaalses testkeskkonnas? See tÀhendab, et see pole tootmine?
Jah, see ei ole tootmine, see on testkeskkond, mis on alati sama, et saaksite seda vÔrrelda varasemate mÔÔtmistega.
Sai aru aitÀh!
Kui kĂŒsimusi pole, arvan, et vĂ”ime lĂ”petada. AitĂ€h!
Allikas: www.habr.com
