Checklista för DevOps

DevOps är integreringen av utveckling, kvalitetssäkring och IT-åtgärder i en enhetlig kultur och uppsättning processer för att leverera programvara. Använd den här checklistan som utgångspunkt för att utvärdera din DevOps-kultur och process.

Kultur

Se till att verksamheten anpassas mellan organisationer och team. Konflikter om resurser, syfte, mål och prioriteringar inom en organisation kan utgöra en risk för lyckade åtgärder. Se till att affärs-, utvecklings- och driftteamen är anpassade.

Se till att ditt team förstår din programvarulivscykel. Ditt team måste förstå den övergripande livscykeln för dina program och var varje program befinner sig inom den livscykeln. Med den här informationen kan alla teammedlemmar veta vad de ska göra nu och vad de ska planera och förbereda sig för i framtiden.

Minska cykeltiden. Sträva efter att minimera den tid det tar att gå från idéer till användbar utvecklad programvara. Begränsa storleken och omfattningen för enskilda versioner för att hålla testbelastningen låg. Automatisera bygg-, test-, konfigurations- och distributionsprocesser när det är möjligt. Rensa eventuella hinder för kommunikation mellan utvecklare och mellan utvecklare och driftsteam.

Granska och förbättra processer. Dina processer och procedurer, både automatiserade och manuella, är aldrig slutgiltiga. Konfigurera regelbundna granskningar av aktuella arbetsflöden, procedurer och dokumentation, med målet att kontinuerligt förbättra.

Planera proaktivt. Planera proaktivt för fel. Ha processer på plats för att snabbt identifiera problem när de uppstår, eskalera problem till rätt teammedlemmar att åtgärda och bekräfta deras lösning.

Lär dig av fel. Fel är oundvikliga, men det är viktigt att lära sig av fel för att undvika att upprepa dem. Om ett driftfel inträffar kan du sortera problemet, dokumentera orsaken och lösningen och dela med dig av de lärdomar du lär dig. När det är möjligt uppdaterar du dina byggprocesser för att automatiskt identifiera sådana fel i framtiden.

Optimera för hastighet och samla in data. Varje planerad förbättring är en hypotes. Arbeta i de minsta steg som är möjliga. Behandla nya idéer som experiment. Instrumentera experimenten så att du kan samla in produktionsdata för att utvärdera experimentets effektivitet. Var redo att misslyckas snabbt om hypotesen är fel.

Tillåt tid för inlärning. Fel och framgångar ger möjligheter till lärande. Innan du går vidare till nya projekt ska du ge tid att samla viktiga lektioner och se till att ditt team absorberar de lektionerna. Ge även ditt team tid att skapa färdigheter, experimentera och lära dig mer om nya verktyg och tekniker.

Dokumentåtgärder. Dokumentera alla verktyg, processer och automatiserade uppgifter med samma kvalitetsnivå som produktkoden. Dokumentera den aktuella designen och arkitekturen för alla system som du stöder, tillsammans med återställningsprocesser och andra underhållsprocedurer. Fokusera på de steg som du faktiskt gör, inte teoretiskt optimala processer. Granska och uppdatera dokumentationen regelbundet. För kod måste du inkludera meningsfulla kommentarer, särskilt i offentliga API:er. Använd verktyg för att generera koddokumentation automatiskt när det är möjligt.

Dela kunskap. Dokumentationen är bara användbar om personer vet att den finns och kan hitta den. Håll dokumentationen organiserad och gör den lätt att identifiera. Var kreativ: använd bruna väskor (informella presentationer), videor eller nyhetsbrev för att dela kunskap.

Utveckling

Ge utvecklare produktionsliknande miljöer. Om utvecklings- och testmiljöer inte matchar produktionsmiljön är det svårt att testa och diagnostisera problem. Håll utvecklings- och testmiljöer så nära produktionsmiljön som möjligt. Kontrollera att testdata överensstämmer med de data som du använder i produktion, även om det är exempeldata och inte verkliga produktionsdata (av sekretess- eller efterlevnadsskäl). Planera att generera och anonymisera exempeltestdata.

Se till att alla behöriga teammedlemmar kan etablera infrastruktur och distribuera program. Att konfigurera produktionsliknande resurser och distribuera ett program får inte omfatta komplicerade manuella uppgifter eller detaljerade tekniska kunskaper om ett system. Alla med rätt behörigheter bör kunna skapa eller distribuera produktionsliknande resurser utan att gå till driftteamet.

Den här rekommendationen innebär inte att någon kan skicka liveuppdateringar till en produktionsdistribution. Det handlar om att minska friktionen för utvecklings- och QA-team för att skapa produktionsliknande miljöer.

Instrumentera varje program för insikt. För att förstå hälsotillståndet för dina program måste du veta hur de presterar och om de upplever några fel eller problem. Inkludera alltid instrumentation som ett designkrav och skapa instrumentation i varje program från början. Instrumentation måste innehålla händelseloggning för rotorsaksanalys, men även telemetri och mått för att övervaka hälsotillståndet och användningen av varje program.

Spåra din tekniska skuld. Många projekt prioriterar versionsscheman framför kodkvalitet i en eller annan grad. Dokumentera alltid när genvägar tas eller andra suboptimala implementeringar och schemalägg tid för att gå tillbaka till dessa problem.

Överväg att skicka uppdateringar direkt till produktion. Om du vill minska den totala tiden för versionscykeln bör du överväga att push-överföra korrekt testade kodincheckningar direkt till produktion. Använd funktionsväxlingar för att styra vilka funktioner du aktiverar. Sedan kan du snabbt gå från utveckling till lansering med hjälp av växlingsknapparna för att aktivera eller inaktivera funktioner. Växlingsknappar är också användbara när du utför tester som kanarieversioner, där du distribuerar en viss funktion till en delmängd av produktionsmiljön.

Testning

Automatisera testning. Manuellt testning av programvara är omständligt och känsligt för fel. Automatisera vanliga testuppgifter och integrera testerna i dina byggprocesser. Automatiserad testning säkerställer konsekvent testtäckning och reproducerbarhet. När du kör integrerade användargränssnittstester använder du även ett automatiserat verktyg. Azure erbjuder utvecklings- och testresurser som kan hjälpa dig att konfigurera och köra testning. Mer information finns i Utveckla och testa på Azure.

Testa för fel. När ett system inte kan ansluta till en tjänst bör systemet svara korrekt. Och när tjänsten är tillgänglig igen bör systemet återställas. Gör felinmatningstestning till en standarddel av granskning i test- och mellanlagringsmiljöer. När testprocessen och metoderna är mogna bör du överväga att köra dessa tester i produktion.

Testa i produktion. En lanseringsprocess slutar inte med distribution till produktion. Ha tester på plats för att säkerställa att distribuerad kod fungerar som förväntat. För distributioner som du uppdaterar sällan schemalägger du produktionstestning som en vanlig del av underhållet.

Automatisera prestandatestning för att identifiera prestandaproblem tidigt. Effekten av ett allvarligt prestandaproblem kan vara lika allvarlig som en bugg i koden. Även om automatiserade funktionstester kan förhindra programbuggar kanske dessa tester inte identifierar prestandaproblem. Definiera godtagbara prestandamål för mått som svarstid, inläsningstider och resursanvändning. Inkludera automatiserade prestandatester i versionspipelinen för att se till att programmet uppfyller dessa mål.

Utför kapacitetstestning. Ett program kan fungera bra under testförhållanden och sedan ha problem i produktionen på grund av skalnings- eller resursbegränsningar. Definiera alltid den maximala förväntade kapaciteten och användningsgränserna. Testa för att se till att programmet kan hantera dessa gränser, men även testa vad som händer när du överskrider dessa gränser. Utför kapacitetstestning med jämna mellanrum.

Efter en första version bör du köra prestanda- och kapacitetstester när du uppdaterar produktionskoden. Använd historiska data för att finjustera tester och för att avgöra vilka typer av tester du behöver göra.

Utför automatiserad säkerhetspenetreringstestning. Att säkerställa säkerheten för ditt program är lika viktigt som att testa andra funktioner. Gör automatiserad intrångstestning till en standarddel av bygg- och distributionsprocessen. Schemalägg regelbundna säkerhetstester och sårbarhetsgenomsökning i distribuerade program, övervakning av öppna portar, slutpunkter och attacker. Automatiserad testning tar inte bort behovet av djupgående säkerhetsgranskningar med jämna mellanrum.

Utför automatiserad testning av affärskontinuitet. Utveckla tester för storskalig affärskontinuitet, inklusive säkerhetskopieringsåterställning och redundans. Konfigurera automatiserade processer för att utföra dessa tester regelbundet.

Frisläpp

Automatisera distributioner. Automatisering ger många fördelar, bland annat:

  • Aktivera snabbare och mer tillförlitliga distributioner.
  • Säkerställa konsekventa distributioner till alla miljöer som stöds, inklusive test, mellanlagring och produktion.
  • Ta bort risken för mänskliga fel som manuella distributioner kan introducera.
  • Gör det enkelt att schemalägga versioner för praktiska tider, vilket minimerar eventuella effekter av potentiell stilleståndstid.

Automatisera processen med att distribuera varje program till dina test-, mellanlagrings- och produktionsmiljöer. Ha system på plats för att identifiera eventuella problem under distributionen och har ett automatiserat sätt att distribuera korrigeringar eller återställa ändringar.

Använd kontinuerlig integrering. Kontinuerlig integrering (CI) är en metod för att slå samman all utvecklarkod till en central kodbas enligt ett regelbundet schema och sedan automatiskt utföra standardprocesser för bygg- och testning. CI säkerställer att ett helt team kan arbeta på en kodbas samtidigt utan konflikter. CI hjälper dig också att hitta kodfel så tidigt som möjligt. Helst bör en CI-process köras varje gång du checkar in eller checkar in kod. Den bör köras minst en gång per dag.

Överväg att använda en trunkbaserad utvecklingsmodell. I den här modellen förbinder sig utvecklare till en enda gren (stammen). Det finns ett krav på att incheckningar aldrig bryter en version. Den här modellen underlättar CI eftersom du utför allt funktionsarbete i bagageutrymmet och du löser eventuella sammanslagningskonflikter när varje incheckning sker.

Överväg att använda kontinuerlig leverans. Kontinuerlig leverans (CD) är en metod för att säkerställa att koden alltid är redo att distribueras genom att automatiskt skapa, testa och distribuera kod till produktionsliknande miljöer. Genom att lägga till CD för att skapa en fullständig CI/CD-pipeline kan du identifiera kodfel så snart som möjligt. Det säkerställer också att du kan släppa korrekt testade uppdateringar på kort tid.

Kontinuerlig distribution är en process som automatiskt tar alla uppdateringar som har passerat genom en CI/CD-pipeline och distribuerar dem till produktion. Kontinuerlig distribution kräver robust automatisk testning och avancerad processplanering. Det kanske inte är lämpligt för alla team.

Gör små, inkrementella ändringar. Stora kodändringar har större potential att introducera buggar än mindre. Håll ändringarna små när det är möjligt. Detta begränsar de potentiella effekterna av varje ändring och förenklar uppgiften att förstå och felsöka problem.

Kontrollera exponeringen för ändringar. Kontrollera att du har kontroll över när uppdateringar blir synliga för slutanvändarna. Överväg att använda funktionsväxlingar för att styra när du aktiverar funktioner för slutanvändare.

Implementera strategier för versionshantering för att minska distributionsrisken. Att distribuera en programuppdatering till produktion medför alltid en viss risk. För att minimera den här risken använder du strategier som kanarieversioner eller blå/gröna distributioner för att distribuera uppdateringar till en delmängd användare. Bekräfta att varje uppdatering fungerar som förväntat och distribuera sedan varje uppdatering till resten av systemet.

Dokumentera alla ändringar. Mindre uppdateringar och konfigurationsändringar kan vara en källa till förvirring och versionskonflikter. Håll alltid ett tydligt register över eventuella ändringar, oavsett hur liten den är. Logga allt som ändras, inklusive korrigeringar som du har tillämpat, principändringar och konfigurationsändringar. Posten för ändringarna ska vara synlig för hela teamet. Men inkludera inte känsliga data i dessa loggar. Logga till exempel att en autentiseringsuppgift har uppdaterats och vem som gjorde ändringen, men registrera inte de uppdaterade autentiseringsuppgifterna.

Överväg att göra infrastrukturen oföränderlig. Oföränderlig infrastruktur baseras på principen att du inte bör ändra infrastrukturen när du har distribuerat den till produktion. Annars kan du hamna i ett tillstånd där ad hoc-ändringar har tillämpats, vilket gör det svårt att veta exakt vad som har ändrats. Oföränderlig infrastruktur fungerar genom att ersätta hela servrar som en del av en ny distribution. Med den här metoden kan du testa och distribuera koden och värdmiljön som ett block. Efter distributionen ändrar du inte infrastrukturkomponenter förrän nästa bygg- och distributionscykel.

Övervakning

Gör system observerbara. Driftteamet bör alltid ha tydlig insyn i hälsotillståndet och statusen för ett system eller en tjänst. Konfigurera externa hälsoslutpunkter för att övervaka status och kodprogram för att instrumentera åtgärdsmått. Använd ett vanligt och konsekvent schema som hjälper dig att korrelera händelser mellan system. Standardmetoden för att spåra hälsotillståndet och statusen för Azure-resurser är att använda Azure Diagnostics och Application Insights. Azure Monitor tillhandahåller även centraliserad övervakning och hantering för moln- eller hybridlösningar.

Aggregera och korrelera loggar och mått. Ett korrekt instrumenterat telemetrisystem ger en stor mängd rådata och händelseloggar. Se till att systemet bearbetar och korrelerar telemetri och loggdata snabbt, så att driftpersonalen alltid har en uppdaterad bild av systemets hälsa. Organisera och visa data så att du har en sammanhängande vy över problem och kan se när händelser är relaterade till varandra.

Se företagets kvarhållningsprincip för krav på hur data ska bearbetas och hur länge data ska lagras.

Implementera automatiserade aviseringar och meddelanden. Konfigurera övervakningsverktyg som Monitor för att identifiera mönster eller villkor som indikerar potentiella eller aktuella problem. Skicka aviseringar till teammedlemmar som kan åtgärda problem. Justera aviseringarna för att undvika falska positiva identifieringar.

Övervaka tillgångar och resurser för förfallodatum. Vissa resurser och tillgångar, till exempel certifikat, upphör att gälla. Se till att spåra vilka tillgångar som upphör att gälla, när de upphör att gälla och vilka tjänster eller funktioner som är beroende av dem. Använd automatiserade processer för att övervaka dessa tillgångar. Meddela driftteamet innan en tillgång upphör att gälla och eskalera situationen om förfallodatum hotar att störa program.

Hantering

Automatisera åtgärder. Manuellt hantering av repetitiva åtgärdsprocesser är felbenägen. Automatisera dessa uppgifter när det är möjligt för att säkerställa konsekvent körning och kvalitet. Använd källkontroll till versionskod som implementerar automatiseringen. Precis som med annan kod testar du dina automatiseringsverktyg.

Använd en infrastruktur-som-kod-metod för etablering. Minimera mängden manuell konfiguration som du behöver för att etablera resurser. Använd i stället skript och Azure Resource Manager-mallar . Behåll skripten och mallarna i källkontrollen, precis som annan kod som du underhåller.

Överväg att använda containrar. Containrar tillhandahåller ett standardpaketbaserat gränssnitt för distribution av program. När du använder containrar distribuerar du ett program med hjälp av fristående paket som innehåller programvara, beroenden och filer som du behöver för att köra programmet. Den här metoden förenklar distributionsprocessen avsevärt.

Containrar skapar också ett abstraktionslager mellan ett program och det underliggande operativsystemet, vilket ger konsekvens mellan miljöer. Den här abstraktionen kan också isolera en container från andra processer eller program som körs på en värd.

Implementera återhämtning och självåterställning. Återhämtning är möjligheten för ett program att återställa från fel. Strategier för återhämtning omfattar återförsök av tillfälliga fel och rederiansväxlande till en sekundär instans eller till och med till en annan region. Mer information finns i Designa tillförlitliga Azure-program. Instrumentera dina program för att rapportera problem omedelbart så att du kan hantera avbrott eller andra systemfel.

Ha en åtgärdshandbok. En drifthandbok, eller runbook, dokumenterar de procedurer och hanteringsinformation som du behöver för att driftpersonalen ska kunna underhålla ett system. Dokumentera även eventuella åtgärdsscenarier och åtgärdsplaner som kan uppstå vid ett fel eller andra avbrott i tjänsten. Skapa den här dokumentationen under utvecklingsprocessen och håll den uppdaterad efteråt. Behandla dessa resurser som levande dokument som du behöver granska, testa och förbättra regelbundet.

Delad dokumentation är viktig. Uppmuntra gruppmedlemmar att bidra och dela med sig av kunskap. Hela teamet bör ha åtkomst till dokument. Gör det enkelt för alla i teamet att hålla dokumenten uppdaterade.

Dokumentera jourprocedurer. Se till att dokumentera jouruppgifter, scheman och procedurer och dela dem med alla teammedlemmar. Håll alltid den här informationen uppdaterad.

Dokumentera eskaleringsprocedurer för beroenden från tredje part. Om ditt program är beroende av externa tjänster från tredje part som du inte direkt kontrollerar behöver du en plan för att hantera avbrott. Skapa dokumentation för dina planerade åtgärdsprocesser. Inkludera supportkontakter och eskaleringsvägar.

Använd konfigurationshantering. Planera konfigurationsändringar, gör dem synliga för åtgärder och registrera dem. Du kan använda en konfigurationshanteringsdatabas eller en konfigurations-som-kod-metod för dessa ändamål. Granska konfigurationen regelbundet för att säkerställa att de förväntade inställningarna faktiskt finns på plats.

Skaffa en Azure-supportplan och förstå supportprocessen. Azure erbjuder många supportplaner. Fastställ rätt plan för dina behov och se till att hela teamet vet hur planen ska användas. Teammedlemmar bör förstå detaljerna i planen, hur supportprocessen fungerar och hur du öppnar ett supportärende med Azure. Om du förväntar dig en storskalig händelse kan Azure-supporten hjälpa dig med att öka dina tjänstgränser. Mer information finns i Vanliga frågor och svar om Azure-supportplaner.

Följ principerna för lägsta behörighet när du beviljar åtkomst till resurser. Hantera åtkomsten till resurser noggrant. Neka åtkomst som standard, såvida du inte uttryckligen ger en användare åtkomst till en resurs. Ge bara användarna åtkomst till det de behöver för att slutföra sina uppgifter. Spåra användarbehörigheter och utföra regelbundna säkerhetsgranskningar.

Använd rollbaserad åtkomstkontroll i Azure. Att tilldela användarkonton och åtkomst till resurser bör inte vara en manuell process. Använd rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja åtkomst som baseras på Microsoft Entra ID-identiteter och -grupper.

Använd ett system för felspårning för att spåra problem. Utan ett bra sätt att spåra problem är det lätt att missa objekt, duplicera arbete eller introducera nya problem. Förlita dig inte på informell kommunikation från person till person för att spåra status för buggar. Använd ett verktyg för felspårning för att registrera information om problem, tilldela resurser för att åtgärda dem och tillhandahålla en spårningslogg med förlopp och status.

Hantera alla resurser i ett ändringshanteringssystem. Om du inkluderar alla aspekter av DevOps-processen i ett hanterings- och versionssystem kan du enkelt spåra och granska ändringar. Inkludera kod, infrastruktur, konfiguration, dokumentation och skript. Behandla alla dessa typer av resurser som kod under hela processen för testning, skapande och granskning.

Använd checklistor. Checklistor för åtgärder kan hjälpa dig att följa processer. Det är lätt att missa något i en stor handbok, men att följa en checklista kan tvinga fram information som du annars kanske förbiser. Underhåll checklistorna och leta ständigt efter sätt att automatisera uppgifter och effektivisera processer.

Nästa steg