BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Rapporten kommer att tala om nÄgra DevOps-praxis, men frÄn en utvecklares synvinkel. Vanligtvis har alla ingenjörer som gÄr med i DevOps redan flera Ärs administrativ erfarenhet bakom bÀltet. Men det betyder inte att det inte finns plats för utvecklaren hÀr. Oftare Àn inte Àr utvecklare upptagna med att fixa "dagens nÀsta akut kritiska bugg", och de har inte tid att ens ta en snabb titt pÄ DevOps-fÀltet. Enligt författarens förstÄelse Àr DevOps för det första sunt förnuft. För det andra Àr det en möjlighet att bli mer effektiv. Om du Àr en utvecklare, har sunt förnuft och vill bli mer effektiv som lagspelare, Àr den hÀr rapporten för dig.

LÄt mig presentera mig sjÀlv, jag erkÀnner fullt ut att det finns mÀnniskor i rummet som inte kÀnner mig. Jag heter Anton Boyko, jag Àr en Microsoft Azure MVP. Vad Àr MVP? Detta Àr Model-View-Presenter. Model-View-Presenter Àr precis jag.

Dessutom innehar jag för nÀrvarande tjÀnsten som lösningsarkitekt pÄ Ciklum. Och alldeles nyligen köpte jag mig en sÄ vacker domÀn, och jag uppdaterade min e-post, som jag brukar visa vid presentationer. Du kan skriva till mig pÄ: me [hund] byokoant.pro. Du kan maila mig med frÄgor. Jag brukar svara pÄ dem. Det enda Àr att jag inte skulle vilja fÄ frÄgor via mejl som rör tvÄ Àmnen: politik och religion. Du kan skriva till mig om allt annat via e-post. Det kommer att gÄ en tid ska jag svara.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

NÄgra ord om mig sjÀlv:

  • Jag har varit inom detta omrĂ„de i 10 Ă„r nu.
  • Jag jobbade pĂ„ Microsoft.
  • Jag Ă€r grundaren till den ukrainska Azure-gemenskapen, som vi grundade nĂ„gonstans 2014. Och vi har det fortfarande och utvecklar det.
  • Jag Ă€r ocksĂ„ far till grundaren av Azure-konferensen, som vi Ă€r vĂ€rd för i Ukraina.
  • Jag hjĂ€lper ocksĂ„ till att organisera Global Azure Bootcamp i Kiev.
  • Som jag sa, jag Ă€r en Microsoft Azure MVP.
  • Jag talar pĂ„ konferenser ganska ofta. Jag Ă€lskar verkligen att tala pĂ„ konferenser. Under det senaste Ă„ret har jag kunnat upptrĂ€da cirka 40 gĂ„nger. Om du passerar Ukraina, Vitryssland, Polen, Bulgarien, Sverige, Danmark, NederlĂ€nderna, Spanien eller ger eller tar ett annat land i Europa, sĂ„ Ă€r det mycket möjligt att nĂ€r du gĂ„r pĂ„ en konferens som har ett molntema i sin ström, du kanske ser mig pĂ„ talarlistan.
  • Jag Ă€r ocksĂ„ ett Star Trek-fan.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

LÄt oss prata lite om Agenda. VÄr agenda Àr vÀldigt enkel:

  • Vi ska prata om vad DevOps Ă€r. LĂ„t oss prata om varför detta Ă€r viktigt. Tidigare var DevOps ett nyckelord som du skrev pĂ„ ditt CV och direkt fick +$500 i lön. Nu behöver du skriva till exempel blockchain i ditt CV för att fĂ„ +500 dollar till din lön.
  • Och sedan, nĂ€r vi förstĂ„r lite om vad detta Ă€r, kommer vi att prata om vad DevOps-praxis Ă€r. Men inte sĂ„ mycket i samband med DevOps i allmĂ€nhet, utan om de DevOps-praxis som kan vara av intresse för utvecklare. Jag ska berĂ€tta varför de kan vara av intresse för dig. Jag ska berĂ€tta varför du överhuvudtaget bör göra detta och hur det kan hjĂ€lpa dig att uppleva mindre smĂ€rta.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

En traditionell bild som mÄnga visar. Det Àr vad som hÀnder i mÄnga projekt. Det Àr dÄ vi har utvecklings- och driftavdelningar som stödjer vÄr mjukvara. Och dessa avdelningar kommunicerar inte med varandra.

Kanske, om du inte kunde kÀnna det sÄ tydligt i DevOps- och operationsavdelningarna, kan du dra en analogi med Dev- och QA-avdelningarna. Det finns mÀnniskor som utvecklar mjukvara och det finns QA-folk som Àr dÄliga ur utvecklarnas synvinkel. Till exempel, jag överlÄter min underbara kod till förvaret, och det sitter nÄgon skurk som returnerar den hÀr koden till mig och sÀger att din kod Àr dÄlig.

Allt detta hÀnder för att mÀnniskor inte kommunicerar med varandra. Och de kastar nÄgra paket, nÄgon ansökan till varandra genom nÄgon vÀgg av missförstÄnd och försöker göra nÄgot med dem.

Det Àr just denna vÀgg som DevOps-kulturen Àr designad för att förstöra, d.v.s. tvinga mÀnniskor att kommunicera med varandra och Ätminstone förstÄ vad olika personer i projektet gör och varför deras arbete Àr viktigt.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Och nÀr vi pratar om DevOps kommer nÄgon att berÀtta för dig att DevOps Àr nÀr projektet har kontinuerlig integration; nÄgon kommer att sÀga att DevOps Àr om projektet implementerar "infrastruktur som kod"-praxis; nÄgon kommer att sÀga att det första steget till DevOps Àr funktionsförgrening, funktionsflaggor.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

I huvudsak Àr allt detta sant pÄ sitt sÀtt. Men det hÀr Àr bara de ultimata metoderna vi har. Innan du gÄr vidare till dessa metoder föreslÄr jag att du tittar pÄ den hÀr bilden, som visar de tre stegen för att implementera Dev-Ops-metodologin i ditt projekt, i ditt företag.

Den hĂ€r bilden har ocksĂ„ ett andra inofficiellt namn. Du kan söka online för att ta reda pĂ„ vad de 3 musketörerna i DevOps Ă€r. Det Ă€r möjligt att du hittar den hĂ€r artikeln. Varför 3 musketörer? Nedan stĂ„r det: mĂ€nniskor, processer och produkter, d.v.s. PPP – Porthos, Porthos och Porthos. HĂ€r Ă€r de 3 musketörerna frĂ„n DevOps. Den hĂ€r artikeln beskriver mer i detalj varför detta Ă€r viktigt och vad det innebĂ€r.

NÀr du börjar implementera en DevOps-kultur Àr det mycket viktigt att den implementeras i följande ordning.

Till en början mÄste du prata med folk. Och du mÄste förklara för folk vad det Àr och hur de kan fÄ nÄgra fördelar av det.

VÄr konferens heter DotNet Fest. Och som arrangörerna sa till mig bjöd vi framför allt hit en publik av utvecklare, sÄ jag hoppas att de flesta i hallen Àr engagerade i utvecklingen.

Vi kommer att prata om mÀnniskor, vi kommer att prata om vad utvecklare vill göra varje dag. Vad vill de mest? De vill skriva lite ny kod, anvÀnda nymodiga ramverk, skapa nya funktioner. Vad vill utvecklare minst ha? Fixa gamla buggar. Jag hoppas att du hÄller med mig. Detta Àr vad utvecklarna vill ha. De vill skriva nya funktioner, de vill inte fixa buggar.

Antalet buggar som en viss utvecklare producerar beror pÄ hur raka hans armar Àr och hur mycket de vÀxer frÄn hans axlar, och inte frÄn hans rumpfickor. Men ÀndÄ, nÀr vi har ett stort projekt, hÀnder det ibland att det Àr omöjligt att hÄlla reda pÄ allt, sÄ det skulle vara trevligt för oss att anvÀnda nÄgra metoder som hjÀlper oss att skriva mer stabil kod med högre kvalitet.

Vad vill QA mest? Jag vet inte om de Àr i hallen. Det Àr svÄrt för mig att sÀga att jag vill ha en QA, för jag har aldrig varit det. Och inget illa vid killarna, det kommer att sÀgas att jag hoppas att jag aldrig kommer att göra det. Men inte av den anledningen att jag anser att deras arbete Àr meningslöst och vÀrdelöst, utan för att jag inte anser mig sjÀlv vara en person som skulle kunna utföra detta arbete effektivt, sÄ jag kommer inte ens försöka göra det. Men vad jag förstÄr, vad QA inte gillar mest Àr att jobba pÄ morgonen, stÀndigt köra nÄgon form av regressionstest, trampa pÄ samma buggar som de rapporterade till utvecklarna för 3 sprints sedan och sÀga: "NÀr kommer du , Monsieur D 'Artagnan, fixa detta fel.' Och Monsieur D'Artagnan svarar honom: "Ja, ja, ja, jag har redan fixat det." Och hur det kommer sig att jag fixade en bugg och gjorde 5 pÄ vÀgen.

De som stödjer denna lösning i produktionen vill att den hÀr lösningen ska fungera utan buggar, sÄ att de inte behöver starta om servern varje fredag, nÀr alla normala mÀnniskor gÄr till baren. Utvecklarna som distribuerades pÄ fredagen, administratörerna sitter tills lördag och försöker fÄ upp den hÀr distributionen och fixa den.

Och nÀr du förklarar för mÀnniskor att de syftar till att lösa samma problem, kan du gÄ vidare till att formalisera processerna. Det Àr vÀldigt viktigt. Varför? För nÀr vi sÀger "formalisering" Àr det viktigt för dig att beskriva hur dina processer sker Ätminstone nÄgonstans pÄ en servett. Du mÄste förstÄ att om du till exempel distribuerar till en QA-miljö eller en produktionsmiljö, sÄ sker det alltid i denna ordning, i dessa skeden kör vi till exempel automatiska enhetstester och UI-tester. Efter utplaceringen kontrollerar vi om utplaceringen gick bra eller dÄligt. Men du har redan en tydlig lista över ÄtgÀrder som mÄste upprepas om och om igen nÀr du distribuerar till produktion.

Och först nÀr dina processer Àr formaliserade börjar du vÀlja produkter som hjÀlper dig att automatisera dessa processer.

TyvÀrr ser jag vÀldigt ofta detta hÀnda omvÀnt. SÄ fort nÄgon hör ordet "DevOps" föreslÄr de omedelbart att installera Jenkins, eftersom de tror att sÄ fort de installerar Jenkins kommer de att ha DevOps. De installerade Jenkins, lÀste "Hur man"-artiklarna pÄ Jenkins webbplats, försökte stoppa in processer i dessa How to-artiklar, och kom sedan till folk och böjde folk över sig och sa att boken sÀger att man mÄste göra pÄ det hÀr sÀttet, sÄ vi gör pÄ det hÀr sÀttet.

Det Àr inte sÄ att Jenkins Àr ett dÄligt verktyg. Jag menar inte att sÀga det pÄ nÄgot sÀtt. Men det hÀr Àr bara en av produkterna. Och vilken produkt du anvÀnder bör vara ditt sista beslut, och inte pÄ nÄgot sÀtt ditt första. Din produkt bör inte drivas av implementeringen av kultur och tillvÀgagÄngssÀtt. Detta Àr vÀldigt viktigt att förstÄ, och det Àr dÀrför jag spenderar sÄ mycket tid pÄ den hÀr bilden och förklarar allt detta sÄ lÀnge.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

LÄt oss prata om DevOps-praxis i allmÀnhet. Vad Àr dem? Vad Àr skillnaden? Hur provar man dem? Varför Àr de viktiga?

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Den första övningen du kanske har hört talas om kallas kontinuerlig integration. Kanske har nÄgon i projektet Continuous Integration (CI).

Det största problemet Àr att jag oftast frÄgar en person: "Har du CI pÄ projektet?" och han sÀger: "Ja", sedan nÀr jag frÄgar vad han gör, beskriver han för mig absolut hela automatiseringsprocessen. Detta Àr inte helt sant.

Faktum Àr att utövandet av CI bara syftar till att integrera koden som olika mÀnniskor skriver till nÄgon slags enda kodbas. Det Àr allt.

Tillsammans med CI finns det vanligtvis andra metoder lÀngs vÀgen - som kontinuerlig driftsÀttning, releasehantering, men vi kommer att prata om det senare.

CI sjÀlv berÀttar för oss att olika personer skriver kod och denna kod mÄste kontinuerligt integreras i en enda kodbas.

Vad ger detta oss och varför Ă€r det viktigt? Om vi ​​har DotNet sĂ„ Ă€r det bra, det Ă€r ett kompilerat sprĂ„k, vi kan kompilera vĂ„r applikation. Om det kompileras Ă€r detta redan ett gott tecken. Det hĂ€r betyder ingenting Ă€n, men det Ă€r det första goda tecknet pĂ„ att vi Ă„tminstone kan kompilera.

Sedan kan vi köra nĂ„gra tester, vilket ocksĂ„ Ă€r en separat praxis. Alla tester Ă€r gröna – detta Ă€r det andra goda tecknet. Men Ă„terigen, detta betyder ingenting.

Men varför skulle du göra det hÀr? Alla metoder som jag kommer att prata om idag har ungefÀr samma vÀrde, dvs ungefÀr samma fördelar och mÀts ocksÄ ungefÀr pÄ samma sÀtt.

För det första lÄter det dig pÄskynda leveransen. Hur gör detta att du kan pÄskynda leveransen? NÀr vi gör nÄgra nya Àndringar i vÄr kodbas kan vi omedelbart försöka göra nÄgot med den hÀr koden. Vi vÀntar inte tills torsdagen kommer för pÄ torsdag slÀpper vi den till QA Environment, vi gör det hÀr och precis hÀr.

Jag ska berÀtta en sorglig historia frÄn mitt liv. Det var lÀnge sedan, nÀr jag fortfarande var ung och snygg. Nu Àr jag redan ung, vacker och smart och blygsam. För en tid sedan var jag i ett projekt. Vi hade ett stort team pÄ cirka 30 utvecklare. Och vi hade ett stort, stort Enterprise-projekt som utvecklades i cirka 10 Är. Och vi hade olika grenar. I förvaret hade vi en gren dÀr utvecklare gick. Och det fanns en gren som visade versionen av koden som Àr i produktion.

Produktionsgrenen lÄg tre mÄnader efter den filial som var tillgÀnglig för utvecklare. Vad betyder det hÀr? Det betyder att sÄ fort jag har en bugg nÄgonstans som gÄr till produktion pÄ grund av utvecklarnas fel, för att de tillÀt det, och pÄ grund av QA:s fel, för att de tittade pÄ det, sÄ betyder det att om jag fÄr en uppgift för snabbkorrigering för produktion, dÄ mÄste jag ÄterstÀlla mina kodÀndringar för 3 mÄnader sedan. Jag mÄste komma ihÄg vad jag hade för 3 mÄnader sedan och försöka fixa det dÀr.

Om du inte har haft den hÀr upplevelsen Àn kan du prova den pÄ ditt hemprojekt. Huvudsaken Àr, försök inte pÄ en kommersiell. Skriv ett par rader kod, glöm dem i sex mÄnader och kom sedan tillbaka och försök snabbt förklara vad de kodraderna handlar om och hur du kan fixa eller optimera dem. Det Àr en vÀldigt, vÀldigt spÀnnande upplevelse.

Om vi ​​har en praxis för kontinuerlig integration, sĂ„ tillĂ„ter detta oss att kontrollera det med ett antal automatiserade verktyg hĂ€r och just nu, sĂ„ snart jag har skrivit min kod. Detta kanske inte ger mig hela bilden, men Ă€ndĂ„ kommer det att ta bort Ă„tminstone nĂ„gra av riskerna. Och om det finns nĂ„gon potentiell bugg kommer jag att veta om det just nu, det vill sĂ€ga bokstavligen inom ett par minuter. Jag behöver inte gĂ„ tillbaka tre mĂ„nader. Jag behöver bara rulla tillbaka 3 minuter. En bra kaffemaskin hinner inte ens brygga kaffe pĂ„ 2 minuter, sĂ„ det Ă€r ganska coolt.

Detta har vÀrdet att det kan upprepas gÄng pÄ gÄng pÄ varje projekt, d.v.s. inte bara den du stÀller in den pÄ. Du kan upprepa bÄde sjÀlva övningen och CI sjÀlv kommer att upprepas för varje ny förÀndring du gör i projektet. Detta gör att du kan optimera resurser eftersom ditt team arbetar mer effektivt. Du kommer inte lÀngre att ha en situation dÀr en bugg kommer till dig frÄn koden du arbetade med för 3 mÄnader sedan. Du kommer inte lÀngre att ha kontextbyte nÀr du sitter och Àgnar de första tvÄ timmarna Ät att försöka förstÄ vad som hÀnde dÄ och komma in i sammanhangets essens innan du börjar rÀtta till nÄgot.

Hur kan vi mÀta framgÄngen eller misslyckandet med denna praxis? Om du rapporterar till den stora chefen vad vi implementerade pÄ CI-projektet sÄ hör han bla bla bla. Vi implementerade det, okej, men varför, vad gav det oss, hur mÀter vi det, hur korrekt eller felaktigt implementerar vi det?

Den första Àr att vi tack vare CI kan distribuera allt oftare, och oftare just för att vÄr kod potentiellt Àr mer stabil. PÄ samma sÀtt minskar vÄr tid för att hitta ett fel och tiden för att rÀtta detta fel minskar just av den anledningen att vi fÄr svar frÄn systemet just hÀr och just nu, vad som Àr fel pÄ vÄr kod.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

En annan praxis vi har Àr praxis Automation Testing, som oftast följer med CI-praxis. De gÄr hand i hand.

Vad Àr viktigt att förstÄ hÀr? Det Àr viktigt att förstÄ att vÄra tester Àr olika. Och varje automatiserat test syftar till att lösa sina egna problem. Vi har till exempel enhetstester som gör att vi kan testa en modul separat, d.v.s. Hur fungerar det i ett vakuum? Det hÀr Àr bra.

Vi har Àven integrationstester som gör att vi kan förstÄ hur olika moduler integreras med varandra. Det Àr ocksÄ bra.

Vi kan ha UI-automatiseringstester som gör att vi kan kontrollera hur vÀl arbetet med UI uppfyller vissa krav som kunden stÀller osv.

De specifika testerna du kör kan pÄverka hur ofta du kör dem. Enhetsprov skrivs vanligtvis korta och smÄ. Och de kan lanseras regelbundet.

Om vi ​​pratar om UI-automatiseringstester Ă€r det bra om ditt projekt Ă€r litet. Dina UI-automatiseringstester kan ta lite tid. Men vanligtvis Ă€r ett UI-automatiseringstest nĂ„got som tar flera timmar pĂ„ ett stort projekt. Och det Ă€r bra om det Ă€r nĂ„gra timmar. Det enda Ă€r att det inte Ă€r nĂ„gon idĂ© att köra dem för varje byggnad. Det Ă€r vettigt att köra dem pĂ„ natten. Och nĂ€r alla kom till jobbet pĂ„ morgonen: bĂ„de testare och utvecklare fick de nĂ„gon form av rapport om att vi körde UI-autotestet pĂ„ natten och fick dessa resultat. Och hĂ€r kommer en timmes arbete av en server som kontrollerar att din produkt uppfyller vissa krav att vara mycket billigare Ă€n en timmes arbete för samma QA-ingenjör, Ă€ven om han Ă€r en Junior QA-ingenjör som jobbar för mat och tack. Samtidigt blir en timmes maskindrift billigare. Det Ă€r dĂ€rför det Ă€r vettigt att investera i det.

Jag har ett annat projekt som jag har jobbat med. Vi hade tvÄ veckors sprint pÄ det hÀr projektet. Projektet var stort, viktigt för finanssektorn och ett misstag kunde inte göras. Och efter en tvÄ veckor lÄng sprint följdes utvecklingscykeln av en testprocess, som tog ytterligare 4 veckor. Försök att förestÀlla dig omfattningen av tragedin. Vi skriver kod i tvÄ veckor, sedan gör vi det ala CodeFreeze, paketerar det i en ny version av applikationen och rullar ut det till testare. Testare testar den i ytterligare 4 veckor, d.v.s. Medan de testar det har vi tid att förbereda ytterligare tvÄ versioner för dem. Det hÀr Àr ett riktigt trÄkigt fall.

Och vi sa till dem att om du vill bli mer produktiv, Àr det vettigt för dig att implementera automatiserade testmetoder, eftersom det Àr detta som skadar dig just hÀr, just nu.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Öva pĂ„ kontinuerlig implementering. Bra, du har byggt klart. Det hĂ€r Ă€r redan bra. Din kod har kompilerats. Nu skulle det vara trevligt att distribuera den hĂ€r byggnaden pĂ„ nĂ„gon miljö. LĂ„t oss sĂ€ga i en miljö för utvecklare.

Varför Ă€r det viktigt? Först kan du titta pĂ„ hur framgĂ„ngsrik du Ă€r med sjĂ€lva distributionsprocessen. Jag har mött sĂ„dana hĂ€r projekt, nĂ€r jag frĂ„gar: "Hur distribuerar du en ny version av applikationen?", sĂ€ger killarna till mig: "Vi sĂ€tter ihop det och packar det i ett zip-arkiv. Vi skickar det till administratören via mail. Administratören laddar ner och utökar detta arkiv. Och hela kontoret börjar be att servern ska hĂ€mta den nya versionen.”

LÄt oss börja med nÄgot enkelt. Till exempel glömde de att lÀgga in CSS i arkivet eller glömde att Àndra hashtaggen i java-script-filnamnet. Och nÀr vi gör en begÀran till servern tror webblÀsaren att den redan har denna java-script-fil och bestÀmmer sig för att inte ladda ner den. Och det fanns en gammal version, nÄgot saknades. Generellt kan det vara mÄnga problem. DÀrför lÄter praxisen med kontinuerlig driftsÀttning dig Ätminstone testa vad som skulle hÀnda om du tog en ren referensbild och laddade upp den till en helt ren ny miljö. Du kan se vart detta leder.

Dessutom, nÀr man integrerar kod mellan varandra, dvs. mellan kommandot lÄter detta dig ocksÄ se hur det ser ut i anvÀndargrÀnssnittet.

Ett av problemen som uppstÄr nÀr mycket vanilla java-script anvÀnds Àr att tvÄ utvecklare hastigt deklarerat en variabel med samma namn i fönsterobjektet. Och sedan, beroende pÄ din tur. Vars java-script-fil dras ut tvÄa kommer att skriva över Àndringarna av den andra. Det Àr ocksÄ vÀldigt spÀnnande. Du kommer in: en sak fungerar för en person, en annan fungerar inte för en annan. Och det Àr "underbart" nÀr allt kommer ut i produktion.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

NÀsta praxis som vi har Àr praxis med automatisk ÄterstÀllning, nÀmligen att rulla tillbaka till den tidigare versionen av applikationen.

Varför Àr detta viktigt för utvecklare? Det finns fortfarande de som minns det avlÀgsna, avlÀgsna 90-talet, dÄ datorer var stora och program var smÄ. Och det enda sÀttet till webbutveckling var genom PHP. Det Àr inte sÄ att PHP Àr ett dÄligt sprÄk, Àven om det Àr det.

Men problemet var ett annat. NÀr vi distribuerade en ny version av vÄr php-webbplats, hur implementerade vi den? Oftast öppnade vi Far Manager eller nÄgot annat. Och laddade upp dessa filer till FTP. Och vi insÄg plötsligt att vi hade nÄgon liten, liten bugg, till exempel glömde vi att sÀtta ett semikolon eller glömde att Àndra lösenordet för databasen, och det finns ett lösenord för databasen, som finns pÄ den lokala vÀrden. Och vi bestÀmmer oss för att snabbt ansluta till FTP och redigera filerna dÀr. Det hÀr Àr bara eld! Det var detta som var populÀrt pÄ 90-talet.

Men, om du inte har tittat pÄ kalendern sÄ var 90-talet nÀstan 30 Är sedan. Nu hÀnder allt lite annorlunda. Och försök att förestÀlla dig omfattningen av tragedin nÀr de sÀger till dig: "Vi distribuerade till produktion, men nÄgot gick fel dÀr. HÀr Àr din FTP-inloggning och lösenord, anslut till produktionen och fixa det snabbt dÀr." Om du Àr Chuck Norris kommer det hÀr att fungera. Om inte, riskerar du att om du fixar en bugg kommer du att göra 10 till. Det Àr just dÀrför som denna praxis att rulla tillbaka till den tidigare versionen gör att du kan uppnÄ mycket.

Även om nĂ„got dĂ„ligt pĂ„ nĂ„got sĂ€tt hamnat i prod nĂ„gonstans, sĂ„ Ă€r det dĂ„ligt, men inte dödligt. Du kan gĂ„ tillbaka till den tidigare versionen du har. Kalla det en backup, om det Ă€r lĂ€ttare att uppfatta det i den terminologin. Du kan Ă„tergĂ„ till den tidigare versionen och anvĂ€ndare kommer fortfarande att kunna arbeta med din produkt och du kommer att ha tillrĂ€cklig bufferttid. Du kan lugnt, utan brĂ„dska, ta allt detta och testa det lokalt, fixa det och sedan ladda upp en ny version. Det Ă€r verkligen vettigt att göra detta.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

LÄt oss nu försöka kombinera de tvÄ tidigare metoderna pÄ nÄgot sÀtt. Vi kommer att fÄ en tredje som heter Release Management.

NĂ€r vi talar om Continuous Deployment i dess klassiska form, sĂ€ger vi att vi mĂ„ste hĂ€mta kod frĂ„n nĂ„gon gren frĂ„n förvaret, kompilera den och distribuera den. Det Ă€r bra om vi har samma miljö. Om vi ​​har flera miljöer betyder det att vi mĂ„ste dra koden varje gĂ„ng, Ă€ven frĂ„n samma commit. Vi kommer att dra ut det varje gĂ„ng, vi kommer att bygga det varje gĂ„ng och vi kommer att distribuera det till en ny miljö. För det första Ă€r det hĂ€r dags, för att bygga ett projekt, om du har ett stort och kom frĂ„n 90-talet, kan det ta flera timmar.

Dessutom finns det en annan sorg. NÀr du bygger, Àven pÄ samma maskin, kommer du att bygga samma kÀllor, du har fortfarande ingen garanti för att den hÀr maskinen Àr i samma tillstÄnd som den var under förra bygget.

LĂ„t oss sĂ€ga att nĂ„gon kom in och uppdaterade DotNet Ă„t dig eller omvĂ€nt, nĂ„gon bestĂ€mde sig för att ta bort nĂ„got. Och sedan har du kognitiv dissonans att frĂ„n den hĂ€r commit för tvĂ„ veckor sedan byggde vi ett bygge och allt var bra, men nu verkar det som samma maskin, samma commit, samma kod som vi försöker bygga, men det fungerar inte . Du kommer att ta itu med detta under lĂ„ng tid och det Ă€r inte ett faktum att du kommer att ta reda pĂ„ det. Åtminstone kommer du att förstöra dina nerver mycket.

DÀrför föreslÄr Release Management praxis att införa en extra abstraktion som kallas ett artefaktförrÄd eller galleri eller bibliotek. Du kan kalla det vad du vill.

Huvudtanken Ă€r att sĂ„ fort vi har nĂ„gon form av commit dĂ€r, sĂ€g, i en gren som vi Ă€r redo att distribuera till vĂ„ra olika miljöer, samlar vi in ​​ansökningar frĂ„n denna commit och allt vi behöver för denna applikation, vi packar det i ett zip-arkiv och spara det i nĂ„gon pĂ„litlig lagring. Och frĂ„n denna lagring kan vi hĂ€mta detta zip-arkiv nĂ€r som helst.

Sedan tar vi det och distribuerar det automatiskt till utvecklarmiljön. Vi tĂ€vlar dĂ€r, och om allt Ă€r bra, sĂ„ stĂ€ller vi in ​​till scenen. Om allt Ă€r bra, distribuerar vi samma arkiv till produktion, samma binĂ€rfiler, kompilerade exakt en gĂ„ng.

Dessutom, nÀr vi har ett sÄdant hÀr galleri, hjÀlper det oss ocksÄ att ta itu med de risker som vi tog upp pÄ förra bilden nÀr vi pratade om ÄterstÀllning till den tidigare versionen. Om du av misstag har distribuerat nÄgot fel kan du alltid ta vilken annan tidigare version som helst frÄn det hÀr galleriet och avinstallera den till dessa miljöer pÄ samma sÀtt. Detta gör att du enkelt kan gÄ tillbaka till den tidigare versionen om nÄgot gÄr fel.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Det finns en annan bra praxis. Du och jag förstÄr alla att nÀr vi rullar tillbaka vÄra applikationer till en tidigare version kan det innebÀra att vi ocksÄ behöver infrastrukturen frÄn den tidigare versionen.

NÀr vi pratar om virtuell infrastruktur tror mÄnga att detta Àr nÄgot som administratörer sÀtter upp. Och om du behöver, till exempel, skaffa en ny server som du vill testa en ny version av din applikation pÄ, mÄste du skriva en biljett till administratörerna eller devops. Devops kommer att ta 3 veckor för detta. Och efter 3 veckor kommer de att berÀtta att vi har installerat en virtuell maskin Ät dig, med en kÀrna, tvÄ gigabyte RAM och en Windows-server utan DotNet. Du sÀger: "Men jag ville ha DotNet." De: "Ok, kom tillbaka om 3 veckor."

Tanken Àr att genom att anvÀnda Infrastructure som kodpraxis kan du behandla din virtuella infrastruktur som bara en annan resurs.

Kanske, om nÄgon av er utvecklar applikationer pÄ DotNet, kanske ni har hört talas om ett bibliotek som heter Entity Framework. Och du kanske till och med har hört att Entity Framework Àr ett av de tillvÀgagÄngssÀtt som Microsoft aktivt driver. För att arbeta med en databas Àr detta ett tillvÀgagÄngssÀtt som kallas Code First. Det Àr dÄ du beskriver i kod hur du vill att din databas ska se ut. Och sedan distribuerar du applikationen. Den ansluter till databasen, den bestÀmmer sjÀlv vilka tabeller som finns dÀr och vilka tabeller som inte finns, och skapar allt du behöver.

Du kan göra samma sak med din infrastruktur. Det Àr ingen skillnad mellan om du behöver en databas för ett projekt eller om du behöver en Windows-server för ett projekt. Det Àr bara en resurs. Och du kan automatisera skapandet av den hÀr resursen, du kan automatisera konfigurationen av den hÀr resursen. Följaktligen, varje gÄng du vill testa nÄgot nytt koncept, nÄgot nytt tillvÀgagÄngssÀtt, behöver du inte skriva en biljett till devops, du kan helt enkelt distribuera en isolerad infrastruktur för dig sjÀlv frÄn fÀrdiga mallar, frÄn fÀrdiga skript och implementera den dÀr alla dina experiment. Du kan ta bort detta, fÄ nÄgra resultat och rapportera vidare om det.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

NÀsta praxis, som ocksÄ finns och ocksÄ Àr viktig, men som fÄ mÀnniskor anvÀnder, Àr Application Performance Monitoring.

Jag ville bara sÀga en sak om Application Performance Monitoring. Vad Àr viktigast med denna praxis? Det hÀr Àr vad Application Performance Monitoring Àr ungefÀr detsamma som att reparera en lÀgenhet. Detta Àr inte ett sluttillstÄnd, det Àr en process. Du mÄste göra det regelbundet.

PÄ ett bra sÀtt skulle det vara bra att utföra övervakning av applikationsprestanda pÄ nÀstan varje byggnad, Àven om det, som du förstÄr, inte alltid Àr möjligt. Men det mÄste Ätminstone utföras för varje release.

Varför Àr det viktigt? För om du plötsligt upplever en nedgÄng i prestanda, dÄ mÄste du tydligt förstÄ varför. Om ditt team har, sÀg tvÄ veckors sprints, bör du minst en gÄng varannan vecka distribuera din applikation till nÄgon separat server, dÀr du har en tydligt fixerad processor, RAM, diskar, etc. Och köra samma prestandatest . Du fÄr resultatet. Se hur det har förÀndrats frÄn föregÄende sprint.

Och om du fÄr reda pÄ att neddragningen gick kraftigt ner nÄgonstans, kommer det att betyda att det bara var pÄ grund av förÀndringarna som skett under de senaste tvÄ veckorna. Detta gör att du kan identifiera och ÄtgÀrda problemet mycket snabbare. Och Äterigen, det hÀr Àr ungefÀr samma mÄtt som du kan mÀta hur framgÄngsrikt du gjorde det.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

NÀsta praxis vi har Àr praxis Configuration Management. Det Àr vÀldigt fÄ som tar detta pÄ allvar. Men tro mig, det hÀr Àr faktiskt en mycket allvarlig sak.

Det var en rolig historia nyligen. Killarna kom till mig och sa: "HjÀlp oss att genomföra en sÀkerhetsgranskning av vÄr ansökan." Vi tittade lÀnge pÄ koden tillsammans, de berÀttade om applikationen, ritade diagram. Och plus eller minus allt var logiskt, förstÄeligt, sÀkert, men det fanns ett MEN! De hade konfigurationsfiler i sin kÀllkontroll, inklusive de frÄn produktion med IP-databasen, med inloggningar och lösenord för att ansluta till dessa databaser, etc.

Och jag sÀger: "Gubbar, okej, ni har stÀngt er produktionsmiljö med en brandvÀgg, men det faktum att ni har login och lösenord för produktionsdatabasen direkt i kÀllkontrollen och vilken utvecklare som helst kan lÀsa det Àr redan en stor sÀkerhetsrisk . Och oavsett hur supersÀker din applikation Àr ur kodsynpunkt, om du lÀmnar den i kÀllkontroll kommer du aldrig att klara nÄgon granskning nÄgonstans." Det Àr vad jag pratar om.

Konfigurationshantering. Vi kan ha olika konfigurationer i olika miljöer. Vi kan till exempel ha olika inloggningar och lösenord för databaser för QA, demo, produktionsmiljö etc.

Denna konfiguration kan ocksÄ automatiseras. Den ska alltid vara skild frÄn sjÀlva applikationen. Varför? Eftersom du byggde applikationen en gÄng, och dÄ applikationen inte bryr sig om du ansluter till SQL-servern via sÄdan och sÄdan IP eller sÄdan och sÄdan IP, borde det fungera likadant. DÀrför, om en av er plötsligt fortfarande hÄrdkodar anslutningsstrÀngen i koden, kom ihÄg att jag kommer att hitta dig och straffa dig om du befinner dig i samma projekt som mig. Detta placeras alltid i en separat konfiguration, till exempel i web.config.

Och den hÀr konfigurationen hanteras redan separat, det vill sÀga det Àr exakt det ögonblick dÄ en utvecklare och en administratör kan komma och sitta i samma rum. Och utvecklaren kan sÀga: "Titta, hÀr Àr binÀrerna i min applikation. De arbetar. Applikationen behöver en databas för att fungera. HÀr bredvid binÀrerna finns en fil. I denna fil Àr detta fÀlt ansvarigt för inloggningen, detta Àr för lösenordet, detta Àr för IP:n. Distribuera den var som helst." Och det Àr enkelt och tydligt för administratören. Han kan distribuera det verkligen var som helst genom att hantera den hÀr konfigurationen.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

Och den sista övningen som jag skulle vilja prata om Àr en övning som Àr vÀldigt, vÀldigt relaterad till moln. Och det ger maximal effekt om du arbetar i molnet. Detta Àr automatisk borttagning av din miljö.

Jag vet att det Àr flera personer pÄ den hÀr konferensen frÄn de team jag arbetar med. Och med alla team jag arbetar med anvÀnder vi denna praxis.

Varför? Naturligtvis skulle det vara bra om varje utvecklare hade en virtuell maskin som skulle fungera 24/7. Men det hĂ€r Ă€r kanske nyheter för dig, du kanske inte var uppmĂ€rksam, men utvecklaren sjĂ€lv fungerar inte 24/7. En utvecklare arbetar vanligtvis 8 timmar om dagen. Även om han kommer till jobbet tidigt Ă€ter han en stor lunch under vilken han gĂ„r till gymmet. LĂ„t det vara 12 timmar om dagen nĂ€r utvecklaren faktiskt anvĂ€nder dessa resurser. Enligt vĂ„r lagstiftning har vi 5 av 7 dagar i veckan som rĂ€knas som arbetsdagar.

Följaktligen bör denna maskin pÄ vardagar inte fungera 24 timmar, utan endast 12, och pÄ helger bör den hÀr maskinen inte fungera alls. Det verkar som att allt Àr vÀldigt enkelt, men vad Àr viktigt att sÀga hÀr? Genom att implementera denna enkla praxis pÄ detta grundlÀggande schema, lÄter det dig minska kostnaderna för att underhÄlla dessa miljöer med 70 %, dvs du tog priset pÄ din dev, QA, demo, miljö och dividerade det med 3.

FrÄgan Àr vad man ska göra med resten av pengarna? Till exempel bör utvecklarna köpa ReSharper om de inte redan har gjort det. Eller ha ett cocktailparty. Om du tidigare hade en miljö dÀr bÄde dev och QA betade, och det Àr det, kan du nu göra 3 olika som kommer att isoleras, och mÀnniskor kommer inte att störa varandra.

BÀsta DevOps-praxis för utvecklare. Anton Boyko (2017)

AngÄende glidningen med kontinuerlig prestationsmÀtning, hur kan vi jÀmföra prestanda om vi hade 1 000 poster i databasen i projektet, tvÄ mÄnader senare finns det en miljon? Hur förstÄr man varför och vad Àr poÀngen med att mÀta prestanda?

Detta Àr en bra frÄga, eftersom du alltid bör mÀta prestanda pÄ samma resurser. Det vill sÀga att du rullar ut ny kod, du mÀter prestanda pÄ den nya koden. Du behöver till exempel testa olika prestandascenarier, lÄt oss sÀga att du vill testa hur applikationen presterar vid lÀtt belastning, dÀr det finns 1 000 anvÀndare och databasstorleken Àr 5 gigabyte. Du mÀtte det och fick siffrorna. DÀrefter tar vi ett annat scenario. Till exempel 5 000 anvÀndare, databasstorlek 1 terabyte. Vi fick resultaten och kom ihÄg dem.

Vad Àr viktigt hÀr? Det viktiga hÀr Àr att beroende pÄ scenariot, mÀngden data, antalet samtidiga anvÀndare, etc., kan du stöta pÄ vissa grÀnser. Till exempel, till grÀnsen för ett nÀtverkskort, eller till grÀnsen för en hÄrddisk, eller till grÀnsen för processorkapacitet. Det Àr detta som Àr viktigt för dig att förstÄ. I olika scenarier stöter du pÄ vissa grÀnser. Och du mÄste förstÄ siffrorna nÀr du slÄr dem.

Pratar vi om att mÀta prestanda i en speciell testmiljö? Det vill sÀga, det hÀr Àr inte produktion?

Ja, detta Àr inte produktion, detta Àr en testmiljö, som alltid Àr densamma sÄ att man kan jÀmföra den med tidigare mÀtningar.

Förstod tack!

Om det inte finns nÄgra frÄgor tror jag att vi kan avsluta. Tack!

KĂ€lla: will.com

LĂ€gg en kommentar