DevOps-controlelijst

DevOps is de integratie van ontwikkelings-, kwaliteitsgarantie- en IT-activiteiten in een uniforme cultuur en set processen voor het leveren van software. Gebruik deze controlelijst als uitgangspunt om uw DevOps-cultuur en -proces te beoordelen.

Cultuur

Zorg voor bedrijfsuitlijning tussen organisaties en teams. Conflicten over resources, doelen, doelen en prioriteiten binnen een organisatie kunnen een risico vormen voor succesvolle bewerkingen. Zorg ervoor dat bedrijfs-, ontwikkelings- en operationele teams zijn afgestemd.

Zorg ervoor dat uw team de levenscyclus van uw software begrijpt. Uw team moet de algehele levenscyclus van uw toepassingen begrijpen en waar elke toepassing zich binnen die levenscyclus bevindt. Als u deze informatie hebt, weten alle teamleden wat ze nu moeten doen en wat ze in de toekomst moeten plannen en voorbereiden.

Verkort de cyclustijd. Het doel is om de tijd die nodig is om van ideeën naar bruikbare ontwikkelde software over te stappen tot een minimum te beperken. Beperk de grootte en het bereik van afzonderlijke releases om de testlast laag te houden. Automatiseer waar mogelijk build-, test-, configuratie- en implementatieprocessen. Wis eventuele obstakels voor communicatie tussen ontwikkelaars en tussen ontwikkelaars en operationele teams.

Processen beoordelen en verbeteren. Uw processen en procedures, zowel geautomatiseerd als handmatig, zijn nooit definitief. Stel regelmatig beoordelingen in van huidige werkstromen, procedures en documentatie, met als doel continue verbetering.

Doe proactieve planning. Plan proactief fouten. Zorg ervoor dat processen worden uitgevoerd om snel problemen te identificeren wanneer ze optreden, problemen te escaleren naar de juiste teamleden die ze kunnen oplossen en hun oplossing te bevestigen.

Meer informatie over fouten. Fouten zijn onvermijdelijk, maar het is belangrijk om te leren van fouten om te voorkomen dat ze opnieuw worden herhaald. Als er een operationele fout optreedt, sorteert u het probleem, documenteer de oorzaak en oplossing en deelt u eventuele lessen die u leert. Werk indien mogelijk uw buildprocessen bij om dergelijke fouten in de toekomst automatisch te detecteren.

Optimaliseer voor snelheid en verzamel gegevens. Elke geplande verbetering is een hypothese. Werk in de kleinste stappen die mogelijk zijn. Behandel nieuwe ideeën als experimenten. Instrumenteer de experimenten zodat u productiegegevens kunt verzamelen om de effectiviteit van het experiment te beoordelen. Wees klaar om snel te mislukken als de hypothese onjuist is.

Tijd voor leren toestaan. Fouten en successen bieden mogelijkheden voor leren. Voordat u verdergaat met nieuwe projecten, kunt u tijd vrijmaken om belangrijke lessen te verzamelen en ervoor te zorgen dat uw team deze lessen opneemt. Geef uw team ook de tijd om vaardigheden te ontwikkelen, te experimenteren en meer te weten te komen over nieuwe hulpprogramma's en technieken.

Documentbewerkingen. Documenteer alle hulpprogramma's, processen en geautomatiseerde taken met hetzelfde kwaliteitsniveau als uw productcode. Documenteer het huidige ontwerp en de architectuur van alle systemen die u ondersteunt, samen met herstelprocessen en andere onderhoudsprocedures. Richt u op de stappen die u daadwerkelijk uitvoert, niet theoretisch optimale processen. Controleer uw documentatie regelmatig en werk deze bij. Zorg ervoor dat u voor code zinvolle opmerkingen opneemt, met name in openbare API's. Gebruik hulpprogramma's om waar mogelijk automatisch codedocumentatie te genereren.

Kennis delen. Documentatie is alleen nuttig als mensen weten dat deze bestaat en kunnen vinden. Houd uw documentatie georganiseerd en maak deze gemakkelijk vindbaar. Wees creatief: gebruik bruine tassen (informele presentaties), video's of nieuwsbrieven om kennis te delen.

Ontwikkeling

Ontwikkelaars voorzien van productieachtige omgevingen. Als ontwikkel- en testomgevingen niet overeenkomen met uw productieomgeving, is het moeilijk om problemen te testen en diagnosticeren. Ontwikkel- en testomgevingen zo dicht mogelijk bij uw productieomgeving houden. Zorg ervoor dat testgegevens consistent zijn met de gegevens die u in productie gebruikt, zelfs als het voorbeeldgegevens zijn en geen echte productiegegevens (om privacy- of nalevingsredenen). Plan om voorbeeldtestgegevens te genereren en anoniem te maken.

Zorg ervoor dat alle geautoriseerde teamleden infrastructuur kunnen inrichten en toepassingen kunnen implementeren. Het instellen van productieachtige resources en het implementeren van een toepassing mag geen ingewikkelde handmatige taken of gedetailleerde technische kennis van een systeem omvatten. Iedereen met de juiste machtigingen moet productie-achtige resources kunnen maken of implementeren zonder naar uw operationele team te gaan.

Deze aanbeveling impliceert niet dat iedereen live-updates naar een productie-implementatie kan pushen. Het gaat om het verminderen van wrijving voor ontwikkel- en QA-teams om productieachtige omgevingen te maken.

Instrumenteer elke toepassing voor inzicht. Als u de status van uw toepassingen wilt begrijpen, moet u weten hoe ze presteren en of ze fouten of problemen ondervinden. Neem instrumentatie altijd op als ontwerpvereiste en bouw instrumentatie in elke toepassing vanaf het begin. Instrumentatie moet gebeurtenislogboeken bevatten voor hoofdoorzaakanalyse, maar ook telemetrie en metrische gegevens om de status en het gebruik van elke toepassing te bewaken.

Houd uw technische schuld bij. Veel projecten prioriteren releaseschema's boven codekwaliteit in één of andere mate. Documenteer altijd wanneer snelkoppelingen worden gemaakt of andere suboptimale implementaties en plan tijd om deze problemen opnieuw te bekijken.

Overweeg updates rechtstreeks naar productie te pushen. Als u de totale tijd van de releasecyclus wilt verminderen, kunt u overwegen om codedoorvoeringen rechtstreeks naar productie te pushen. Gebruik functieknoppen om te bepalen welke functies u inschakelt. Vervolgens kunt u snel van ontwikkeling naar release gaan met behulp van de wisselknoppen om functies in of uit te schakelen. Wisselknoppen zijn ook handig wanneer u tests uitvoert zoals canary-releases, waarbij u een bepaalde functie implementeert in een subset van uw productieomgeving.

Testen

Automatiseer testen. Het handmatig testen van software is tijdrovend en gevoelig voor fouten. Automatiseer algemene testtaken en integreer de tests in uw buildprocessen. Geautomatiseerd testen zorgt voor consistente testdekking en reproduceerbaarheid. Wanneer u geïntegreerde UI-tests uitvoert, gebruikt u ook een geautomatiseerd hulpprogramma. Azure biedt ontwikkelings- en testbronnen waarmee u tests kunt configureren en uitvoeren. Zie Ontwikkelen en testen in Azure voor meer informatie.

Test op fouten. Wanneer een systeem geen verbinding kan maken met een service, moet het systeem correct reageren. En wanneer de service weer beschikbaar is, moet het systeem worden hersteld. Maak foutinjectietests een standaardonderdeel van beoordeling over test- en faseringsomgevingen. Wanneer uw testproces en procedures volwassen zijn, kunt u overwegen om deze tests in productie uit te voeren.

Testen tijdens productie. Een releaseproces eindigt niet met de implementatie naar productie. Zorg ervoor dat geïmplementeerde code werkt zoals verwacht. Voor implementaties die u onregelmatig bijwerkt, plant u productietests als regelmatig onderdeel van onderhoud.

Automatiseer prestatietests om prestatieproblemen vroeg te identificeren. De impact van een ernstig prestatieprobleem kan net zo ernstig zijn als een bug in code. Hoewel geautomatiseerde functionele tests toepassingsfouten kunnen voorkomen, kunnen deze tests mogelijk geen prestatieproblemen detecteren. Definieer acceptabele prestatiedoelen voor metrische gegevens, zoals latentie, laadtijden en resourcegebruik. Neem geautomatiseerde prestatietests op in uw release-pijplijn om ervoor te zorgen dat uw toepassing aan deze doelstellingen voldoet.

Capaciteitstests uitvoeren. Een toepassing werkt mogelijk prima onder testvoorwaarden en ondervindt vervolgens problemen in de productie vanwege schaal- of resourcebeperkingen. Definieer altijd de maximale verwachte capaciteit en gebruikslimieten. Test om ervoor te zorgen dat de toepassing deze limieten kan afhandelen, maar test ook wat er gebeurt wanneer u deze limieten overschrijdt. Capaciteitstests uitvoeren met regelmatige tussenpozen.

Na een eerste release moet u prestaties en capaciteitstests uitvoeren wanneer u productiecode bijwerkt. Gebruik historische gegevens om tests af te stemmen en te bepalen welke typen tests u moet uitvoeren.

Voer geautomatiseerde beveiligingspenetratietests uit. Het waarborgen van de beveiliging van uw toepassing is net zo belangrijk als het testen van andere functionaliteiten. Maak geautomatiseerde penetratietests een standaardonderdeel van uw build- en implementatieproces. Plan regelmatige beveiligingstests en scannen op beveiligingsproblemen voor geïmplementeerde toepassingen, bewaking voor open poorten, eindpunten en aanvallen. Met geautomatiseerd testen hoeft u niet regelmatig uitgebreide beveiligingsbeoordelingen uit te voeren.

Voer geautomatiseerde tests voor bedrijfscontinuïteit uit. Ontwikkel tests voor grootschalige bedrijfscontinuïteit, waaronder back-upherstel en failover. Stel geautomatiseerde processen in om deze tests regelmatig uit te voeren.

Vrijgeven

Automatiseer implementaties. Automatisering biedt veel voordelen, waaronder:

  • Snellere en betrouwbaardere implementaties inschakelen.
  • Zorgen voor consistente implementaties in elke ondersteunde omgeving, waaronder testen, faseren en productie.
  • Het risico op menselijke fouten verwijderen dat handmatige implementaties kunnen veroorzaken.
  • Hierdoor kunt u gemakkelijk releases plannen voor handige tijden, waardoor eventuele gevolgen van potentiële downtime worden geminimaliseerd.

Automatiseer het proces van het implementeren van elke toepassing in uw test-, faserings- en productieomgevingen. Zorg ervoor dat systemen aanwezig zijn om eventuele problemen tijdens de implementatie te detecteren en een geautomatiseerde manier hebben om oplossingen door te voeren of wijzigingen terug te draaien.

Gebruik continue integratie. Continue integratie (CI) is de praktijk van het samenvoegen van alle code voor ontwikkelaars in een centrale codebasis volgens een regelmatig schema en het automatisch uitvoeren van standaard build- en testprocessen. CI zorgt ervoor dat een volledig team tegelijkertijd zonder conflicten op een codebasis kan werken. CI helpt u ook om codefouten zo vroeg mogelijk te vinden. Bij voorkeur moet een CI-proces worden uitgevoerd telkens wanneer u code doorvoert of inchecken. Het moet ten minste één keer per dag worden uitgevoerd.

Overweeg om een ontwikkelmodel op basis van trunk te gebruiken. In dit model verbinden ontwikkelaars zich tot één vertakking (de trunk). Er is een vereiste dat doorvoeringen nooit een build breken. Dit model vereenvoudigt CI, omdat u alle functies in de trunk uitvoert en eventuele samenvoegingsconflicten oplost wanneer elke doorvoering plaatsvindt.

Overweeg het gebruik van continue levering. Continue levering (CD) is de praktijk om ervoor te zorgen dat code altijd gereed is voor implementatie, door automatisch code te bouwen, testen en implementeren in productieachtige omgevingen. Door CD toe te voegen om een volledige CI/CD-pijplijn te maken, kunt u zo snel mogelijk codefouten detecteren. Het zorgt er ook voor dat u binnen korte tijd goed geteste updates kunt vrijgeven.

Continue implementatie is een proces dat automatisch updates gebruikt die zijn doorgegeven via een CI/CD-pijplijn en deze in productie implementeert. Continue implementatie vereist robuuste automatische tests en geavanceerde procesplanning. Het is mogelijk niet geschikt voor alle teams.

Breng kleine, incrementele wijzigingen aan. Grote codewijzigingen hebben een groter potentieel om bugs te introduceren dan kleinere. Houd zo mogelijk wijzigingen klein. Dit beperkt de mogelijke effecten van elke wijziging en vereenvoudigt de taak van het begrijpen en opsporen van problemen.

Controle over blootstelling aan wijzigingen. Zorg ervoor dat u de controle hebt over wanneer updates zichtbaar worden voor uw eindgebruikers. Overweeg het gebruik van functieknoppen om te bepalen wanneer u functies voor eindgebruikers inschakelt.

Implementeer releasebeheerstrategieën om het implementatierisico te verminderen. Het implementeren van een toepassingsupdate naar productie brengt altijd een risico met zich mee. Als u dit risico wilt minimaliseren, gebruikt u strategieën zoals canary-releases of blauw-groene implementaties om updates te implementeren voor een subset van gebruikers. Controleer of elke update werkt zoals verwacht en implementeer vervolgens elke update voor de rest van het systeem.

Documenteer alle wijzigingen. Kleine updates en configuratiewijzigingen kunnen een bron zijn van verwarring en versiebeheerconflicten. Houd altijd een duidelijk overzicht van eventuele wijzigingen, ongeacht hoe klein. Registreer alles wat er verandert, inclusief patches die u hebt toegepast, beleidswijzigingen en configuratiewijzigingen. De record van de wijzigingen moet zichtbaar zijn voor uw hele team. Maar neem geen gevoelige gegevens op in deze logboeken. Meld bijvoorbeeld aan dat een referentie is bijgewerkt en wie de wijziging heeft aangebracht, maar noteer de bijgewerkte referenties niet.

Overweeg infrastructuur onveranderbaar te maken. Onveranderbare infrastructuur is gebaseerd op het principe dat u de infrastructuur niet moet wijzigen nadat u deze in productie hebt geïmplementeerd. Anders krijgt u een status waarin ad-hocwijzigingen zijn toegepast, waardoor u moeilijk precies weet wat er is gewijzigd. Onveranderbare infrastructuur werkt door volledige servers te vervangen als onderdeel van een nieuwe implementatie. Met deze aanpak kunt u uw code en uw hostingomgeving testen en implementeren als blok. Na de implementatie wijzigt u de infrastructuuronderdelen pas na de volgende build- en implementatiecyclus.

Controleren

Maak systemen waarneembaar. Uw operationele team moet altijd duidelijk inzicht hebben in de status en status van een systeem of service. Stel externe statuseindpunten in voor het bewaken van de status en codetoepassingen om metrische gegevens over bewerkingen te instrumenteren. Gebruik een gemeenschappelijk en consistent schema waarmee u gebeurtenissen in verschillende systemen kunt correleren. De standaardmethode voor het bijhouden van de status en status van Azure-resources is het gebruik van Azure Diagnostics en Application Insights. Azure Monitor biedt ook gecentraliseerde bewaking en beheer voor cloud- of hybride oplossingen.

Logboeken en metrische gegevens aggregeren en correleren. Een correct geïnstrueerd telemetriesysteem biedt een grote hoeveelheid onbewerkte prestatiegegevens en gebeurtenislogboeken. Zorg ervoor dat uw systeem telemetrie- en logboekgegevens snel verwerkt en correleert, zodat operationele medewerkers altijd een up-to-date beeld van de systeemstatus hebben. Gegevens ordenen en weergeven, zodat u een samenhangende weergave van problemen hebt en kunt zien wanneer gebeurtenissen aan elkaar zijn gerelateerd.

Raadpleeg het bewaarbeleid van uw bedrijf voor vereisten voor het verwerken van gegevens en hoe lang gegevens moeten worden opgeslagen.

Geautomatiseerde waarschuwingen en meldingen implementeren. Stel bewakingshulpprogramma's in, zoals Monitor , om patronen of voorwaarden te detecteren die potentiële of huidige problemen aangeven. Waarschuwingen verzenden naar teamleden die problemen kunnen oplossen. Stem de waarschuwingen af om fout-positieven te voorkomen.

Bewaak assets en resources voor vervaldatums. Sommige resources en assets, zoals certificaten, verlopen. Zorg ervoor dat u bijhoudt welke assets verlopen, wanneer ze verlopen en welke services of functies hiervan afhankelijk zijn. Gebruik geautomatiseerde processen om deze assets te bewaken. Informeer uw operations-team voordat een asset verloopt en escaleer de situatie als het verlopen van toepassingen dreigt te verstoren.

Beheer

Bewerkingstaken automatiseren. Het handmatig verwerken van terugkerende bewerkingsprocessen is foutgevoelig. Automatiseer deze taken waar mogelijk om consistente uitvoering en kwaliteit te garanderen. Gebruik broncodebeheer om versiecode te gebruiken waarmee de automatisering wordt geïmplementeerd. Net als bij andere code test u uw automatiseringshulpprogramma's.

Gebruik een infrastructuur als code-benadering voor het inrichten. Minimaliseer de hoeveelheid handmatige configuratie die u nodig hebt om resources in te richten. Gebruik in plaats daarvan scripts en Azure Resource Manager-sjablonen . Houd de scripts en sjablonen in broncodebeheer, net als alle andere code die u onderhoudt.

Overweeg het gebruik van containers. Containers bieden een standaardinterface op basis van pakketten voor het implementeren van toepassingen. Wanneer u containers gebruikt, implementeert u een toepassing met behulp van zelfstandige pakketten met software, afhankelijkheden en bestanden die u nodig hebt om de toepassing uit te voeren. Deze procedure vereenvoudigt het implementatieproces aanzienlijk.

Containers maken ook een abstractielaag tussen een toepassing en het onderliggende besturingssysteem, die consistentie biedt in omgevingen. Deze abstractie kan ook een container isoleren van andere processen of toepassingen die op een host worden uitgevoerd.

Implementeer tolerantie en zelfherstel. Tolerantie is de mogelijkheid van een toepassing om te herstellen van fouten. Strategieën voor tolerantie zijn onder andere het opnieuw proberen van tijdelijke fouten en het uitvoeren van een failover naar een secundair exemplaar of zelfs naar een andere regio. Zie Betrouwbare Azure-toepassingen ontwerpen voor meer informatie. Instrumenteer uw toepassingen om problemen onmiddellijk te melden, zodat u storingen of andere systeemfouten kunt beheren.

Een bewerkingshandleiding hebben. Een bewerkingshandleiding, of runbook, documenteren de procedures en beheergegevens die u nodig hebt voor het operationele personeel om een systeem te onderhouden. Documenteer ook bewerkingsscenario's en risicobeperkingsplannen die kunnen worden afgespeeld tijdens een storing of andere onderbreking van uw service. Maak deze documentatie tijdens uw ontwikkelingsproces en houd deze later up-to-date. Behandel deze resources als levende documenten die u regelmatig moet controleren, testen en verbeteren.

Gedeelde documentatie is essentieel. Moedig teamleden aan om kennis bij te dragen en te delen. Uw hele team moet toegang hebben tot documenten. Maak het voor iedereen in het team gemakkelijk om documenten bijgewerkt te houden.

Documenteer procedures ter plaatse. Zorg ervoor dat u taken, planningen en procedures documenteert en deelt met alle teamleden. Houd deze informatie altijd up-to-date.

Documenteer escalatieprocedures voor afhankelijkheden van derden. Als uw toepassing afhankelijk is van externe services van derden die u niet rechtstreeks beheert, hebt u een plan nodig om storingen af te handelen. Maak documentatie voor uw geplande risicobeperkingsprocessen. Neem ondersteuningscontactpersonen en escalatiepaden op.

Configuratiebeheer gebruiken. Plan configuratiewijzigingen, maak ze zichtbaar voor bewerkingen en noteer ze. U kunt een configuratiebeheerdatabase of een configuratie-as-code-benadering gebruiken voor deze doeleinden. Controleer regelmatig de configuratie om ervoor te zorgen dat de verwachte instellingen daadwerkelijk aanwezig zijn.

Krijg een ondersteuning voor Azure plan en krijg inzicht in het ondersteuningsproces. Azure biedt veel ondersteuningsplannen. Bepaal het juiste plan voor uw behoeften en zorg ervoor dat uw hele team weet hoe het plan moet worden gebruikt. Teamleden moeten inzicht krijgen in de details van het plan, hoe het ondersteuningsproces werkt en hoe ze een ondersteuningsticket kunnen openen met Azure. Als u een grootschalige gebeurtenis verwacht, kunt ondersteuning voor Azure u helpen bij het verhogen van uw servicelimieten. Zie ondersteuning voor Azure veelgestelde vragen over abonnementen voor meer informatie.

Volg principes met minimale bevoegdheden wanneer u toegang verleent tot resources. Beheer de toegang tot resources zorgvuldig. Toegang standaard weigeren, tenzij u een gebruiker expliciet toegang geeft tot een resource. Alleen gebruikers toegang verlenen tot wat ze nodig hebben voor het voltooien van hun taken. Houd gebruikersmachtigingen bij en voer regelmatig beveiligingscontroles uit.

Op rollen gebaseerd toegangsbeheer van Azure gebruiken. Het toewijzen van gebruikersaccounts en toegang tot resources mag geen handmatig proces zijn. Gebruik op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) om toegang te verlenen die is gebaseerd op Microsoft Entra ID-identiteiten en -groepen.

Gebruik een systeem voor het bijhouden van fouten om problemen bij te houden. Zonder een goede manier om problemen bij te houden, is het gemakkelijk om items te missen, dubbel werk te dupliceren of nieuwe problemen te introduceren. Vertrouw niet op informele communicatie tussen personen om de status van bugs bij te houden. Gebruik een hulpprogramma voor het bijhouden van fouten om details over problemen vast te leggen, resources toe te wijzen om deze op te lossen en een audittrail met voortgang en status op te geven.

Beheer alle resources in een wijzigingsbeheersysteem. Als u alle aspecten van uw DevOps-proces opneemt in een beheer- en versiebeheersysteem, kunt u eenvoudig wijzigingen bijhouden en controleren. Voeg code, infrastructuur, configuratie, documentatie en scripts toe. Behandel al deze typen resources als code tijdens het proces van testen, bouwen en beoordelen.

Gebruik controlelijsten. Controlelijsten voor bewerkingen kunnen u helpen bij het volgen van processen. Het is eenvoudig om iets in een grote handleiding te missen, maar als u een controlelijst volgt, kunt u de aandacht vestigen op details die u anders over het hoofd zou kunnen zien. Onderhoud de controlelijsten en zoek voortdurend naar manieren om taken te automatiseren en processen te stroomlijnen.

Volgende stappen