Rekommendationer för att använda kontinuerlig integrering

Gäller för denna checklista för Azure Well-Architected Framework Operational Excellence:

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, standardisera metoder för komponenter som verktyg, källkontroll, mönster för programdesign, dokumentation och formatguider.

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

När kod utvecklas, uppdateras eller till och med tas bort, med en intuitiv och säker metod för att integrera dessa ändringar i huvudkodgrenen kan utvecklare tillhandahålla värde.

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 praxis där källkontrollsystem och pipelines för programvarudistribution är integrerade för att tillhandahålla automatiserade mekanismer för att skapa, testa och feedback för programvaruutvecklingsteam.

Viktiga designstrategier

Kontinuerlig integrering är en metod för programutveckling 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-pull-begäran för att signalera till CI-systemet att kodändringar är redo att integreras. Helst validerar integreringsprocessen 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 integreringsprocessen och faser 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 tidigt identifiera 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 tillämpliga fall skapar du distribuerade tillgångar eller paket som innehåller den uppdaterade koden.

Automatisera kontinuerlig integrering med pipelines

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

En pipeline för kontinuerlig integrering omfattar en programvara (ofta molnbaserad) som tillhandahåller:

  • En plattform för att köra automatiserade tester.
  • Efterlevnadsgenomsökningar.
  • Rapportering.
  • Alla andra komponenter som utgör den kontinuerliga integreringsprocessen.

I de flesta fall är pipelineprogramvaran kopplad till källkontroll så att när pull-begäranden skapas eller programvara slås samman till en specifik gren körs pipelinen för kontinuerlig integrering. 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.

Integrera pipelines med källkontroll

Integreringen av din pipeline för kontinuerlig integrering med källkontrollsystemet är nyckeln till att aktivera 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 möjliggöra nästan realtidsfeedback om kvalitet.

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 ett Azure DevOps-statusmärke på en GitHub-lagringsplats.

Införliva automatiserade tester

En viktig del av kontinuerlig integrering är kontinuerlig skapande och testning av kod när utvecklare gör kodbidrag. Testning av pull-begäranden när de skapas ger snabb feedback om att incheckningen inte har infört 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 har 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 använder 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 den ändring som gjorde att testerna misslyckades.

Publicera versionsstatus

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

Skärmbild av ett Azure Pipelines-märke 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 på lagringsplatsen 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 i dina lagringsplatser:

Checklista för driftskvalitet