Rekommendationer för att använda kontinuerlig integrering

Gäller för den här rekommendationen om checklista för driftseffektivitet i Azure Well-Architected Framework:

OE:04 Optimera processer för programvaruutveckling och kvalitetssäkring genom att följa branschbeprövade metoder för utveckling och testning. För tydlig rollbeteckning standardiserar du metoder för komponenter som verktyg, källkontroll, programdesignmönster, dokumentation och stilguider.

Relaterad guide: Förbättra kompileringshastigheten | Standardisera verktyg och processer

När koden utvecklas, uppdateras eller till och med tas bort kan utvecklare ge värde genom att ha en intuitiv och säker metod för att integrera dessa ändringar i huvudkodgrenen.

Som utvecklare kan du göra små kodändringar, skicka ändringarna till en kodlagringsplats och få nästan omedelbar feedback om kvalitet, testtäckning och introducerade buggar. Med den här processen kan du arbeta snabbare och med större förtroende och mindre risk.

Kontinuerlig integrering (CI) är en metod där källkontrollsystem och pipelines för programvarudistribution är integrerade för att tillhandahålla automatiserade mekanismer för utveckling, testning och feedback för programvaruutvecklingsteam.

Viktiga designstrategier

Kontinuerlig integrering är en programutvecklingspraxis som utvecklare använder för att integrera programuppdateringar i ett källkontrollsystem med jämna mellanrum.

Processen för kontinuerlig integrering startar när en tekniker skapar en GitHub-pullbegäran för att signalera till CI-systemet att kodändringar är redo att integreras. Vi rekommenderar att integreringsprocessen validerar koden mot flera baslinjer och tester. Den ger sedan feedback till den begärande teknikern om statusen för dessa tester.

Om baslinjekontroller och testning går bra skapar och faser integreringsprocessen tillgångar som distribuerar den uppdaterade programvaran. Dessa tillgångar omfattar kompilerad kod och containeravbildningar.

Kontinuerlig integrering kan hjälpa dig att leverera programvara av hög kvalitet snabbare genom att utföra följande åtgärder:

  • Kör automatiserade tester mot koden för att ge tidig identifiering av icke-bakåtkompatibla ändringar.
  • Kör kodanalys för att säkerställa kodstandarder, kvalitet och konfiguration.
  • Kör efterlevnads- och säkerhetskontroller för att säkerställa att programvaran inte har några kända säkerhetsrisker.
  • Kör godkännande- eller funktionstester för att säkerställa att programvaran fungerar som förväntat.
  • Ge snabb feedback om identifierade problem.
  • I förekommande fall skapar du distribuerbara tillgångar eller paket som innehåller den uppdaterade koden.

Pipelines för kontinuerlig integrering

Använd programvarulösningar för att hantera, integrera och automatisera processen för att uppnå kontinuerlig integrering. En vanlig metod är att använda en pipeline för kontinuerlig integrering.

En pipeline för kontinuerlig integrering omfattar en programvara (ofta värdbaserad i molnet) som tillhandahåller:

  • En plattform för att köra automatiserade tester.
  • Efterlevnadsgenomsökningar.
  • Rapportering.
  • Alla andra komponenter som utgör processen för kontinuerlig integrering.

I de flesta fall är pipelineprogramvaran kopplad till källkontrollen så att pipelinen för kontinuerlig integrering körs när pull-begäranden skapas eller programvara slås samman till en specifik gren. Källkontrollintegrering ger också möjlighet att ge CI-feedback direkt på pull-begäranden.

Många lösningar, till exempel Azure Pipelines eller GitHub Actions, tillhandahåller funktionerna i pipelines för kontinuerlig integrering.

Källkontrollsintegrering

Integreringen av din pipeline för kontinuerlig integrering med källkontrollsystemet är nyckeln till att möjliggöra snabba kodbidrag med självbetjäning.

CI-pipelinen körs på en nyligen skapad pull-begäran. Pipelinen innehåller alla tester, säkerhetsutvärderingar och andra kontroller. CI-testresultat visas direkt i pull-begäran för att ge feedback om kvalitet i nästan realtid.

En annan populär metod är att skapa små rapporter eller märken som kan visas i källkontrollen för att göra de aktuella byggtillstånden synliga.

Följande bild visar integreringen mellan GitHub och en Azure DevOps-pipeline. I det här exemplet utlöser skapandet av en pull-begäran en Azure DevOps-pipeline. Pipelinestatusen visas i pull-begäran.

Skärmbild av statusikonen för Azure DevOps på en GitHub-lagringsplats.

Testintegrering

En viktig del av den kontinuerliga integreringen är att kontinuerligt skapa och testa kod när utvecklare gör kodbidrag. Testning av pull-begäranden när de skapas ger snabb feedback om att incheckningen inte har introducerat icke-bakåtkompatibla ändringar. Fördelen är att testerna i pipelinen för kontinuerlig integrering kan vara samma tester som körs under testdriven utveckling.

Följande kodfragment visar ett teststeg från en Azure DevOps-pipeline. Steget innehåller två uppgifter:

  • Den första uppgiften använder ett populärt Python-testramverk för att köra CI-tester. Dessa tester finns i källkontrollen tillsammans med Python-koden. Testresultaten går till en fil med namnet test-results.xml.
  • Den andra uppgiften förbrukar testresultaten och publicerar dem till Azure DevOps-pipelinen som en integrerad rapport.
- script: |
    pip3 install pytest
    pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
    continueOnError: true

- task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    failTaskOnFailedTests: true
    testRunTitle: 'Python $(python.version)'

Följande bild visar testresultat som visas i Azure DevOps-portalen.

Skärmbild av Azure DevOps-pipelinetester i Azure DevOps-portalen.

Misslyckade tester

Misslyckade tester bör tillfälligt blockera en distribution och leda till en djupare analys av vad som hände. Misslyckade tester bör också leda till antingen en förfining av testerna eller en förbättring av ändringen som gjorde att testerna misslyckades.

Aktivitetsikoner för CI-resultat

Många utvecklare visar att deras kodkvalitet är hög genom att visa ett statusmärke på deras lagringsplats. Följande bild visar ett Märke för Azure Pipelines som visas i readme-filen för ett projekt med öppen källkod i GitHub.

Skärmbild av ett Märke för Azure Pipelines på en readme-fil i GitHub.

Azure-underlättande

Azure DevOps är en samling tjänster som hjälper dig att skapa en samarbetsinriktad, effektiv och konsekvent utvecklingspraxis.

Azure Pipelines tillhandahåller bygg- och versionstjänster för kontinuerlig integrering och kontinuerlig leverans (CI/CD) av dina program.

GitHub for Actions för Azure möjliggör automatisering av CI/CD-processer. Den integreras direkt med Azure för att förenkla distributioner. Du kan skapa arbetsflöden som skapar och testar varje pull-begäran i din lagringsplats eller som distribuerar sammanfogade pull-begäranden till produktion.

Lär dig hur du skapar en pipeline för kontinuerlig integrering med hjälp av antingen GitHub eller Azure DevOps:

Lär dig hur du visar märken på dina lagringsplatser:

Checklista för utmärkt driftseffektivitet