Empfehlungen für die Verwendung der kontinuierlichen Integration

Gilt für diese Checkliste für azure Well-Architected Framework Operational Excellence:

OE:04 Optimieren Sie die Softwareentwicklungs- und Qualitätssicherungsprozesse der Workload mit branchenerprobten Praktiken für die Durchführung von Entwicklungs- und Testaktivitäten. Standardisieren Sie Methoden für eindeutige Rollenbezeichnungen für Komponenten wie Tools, Quellcodeverwaltung, Anwendungsentwurfsmuster, Dokumentation und Formatvorlagen.

Verwandter Leitfaden: Verbessern der Buildgeschwindigkeit | Standardisieren von Tools und Prozessen

Wenn Code entwickelt, aktualisiert oder sogar entfernt wird, ermöglicht es Entwicklern eine intuitive und sichere Methode, diese Änderungen in den Hauptcodezweig zu integrieren.

Als Entwickler können Sie kleine Codeänderungen vornehmen, diese Änderungen an ein Code-Repository übertragen und nahezu sofortiges Feedback zu Qualität, Testabdeckung und eingeführten Fehlern erhalten. Mit diesem Prozess können Sie schneller und mit mehr Vertrauen und weniger Risiken arbeiten.

Continuous Integration (CI) ist eine Methode, bei der Quellcodeverwaltungssysteme und Softwarebereitstellungspipelines integriert werden, um automatisierte Build-, Test- und Feedbackmechanismen für Teams bereitzustellen, die Software entwickeln.

Wichtige Entwurfsstrategien

Kontinuierliche Integration ist eine Softwareentwicklungspraxis, die Entwickler verwenden, um Softwareupdates in ein Quellcodeverwaltungssystem in regelmäßigen Abständen zu integrieren.

Der fortlaufende Integrationsprozess beginnt, wenn ein Techniker eine GitHub-Pullanforderung erstellt, um dem CI-System zu signalisieren, dass Codeänderungen für die Integration bereit sind. Im Idealfall überprüft der Integrationsprozess den Code anhand mehrerer Basispläne und Tests. Anschließend wird dem anfordernden Techniker Feedback zum Status dieser Tests übermittelt.

Wenn grundlegende Überprüfungen und Tests gut funktionieren, erzeugt der Integrationsprozess Ressourcen und stufen sie auf, die die aktualisierte Software bereitstellen. Zu diesen Ressourcen gehören kompilierter Code und Containerimages.

Die kontinuierliche Integration kann Ihnen helfen, qualitativ hochwertige Software schneller bereitzustellen, indem Sie die folgenden Aktionen ausführen:

  • Führen Sie automatisierte Tests mit dem Code aus, um eine frühzeitige Erkennung von änderungen zu ermöglichen.
  • Ausführung von Codeanalysen, um die Einhaltung von Code- und Qualitätsstandards und eine ordnungsgemäße Konfiguration sicherzustellen
  • Führen Sie Compliance- und Sicherheitsprüfungen aus, um sicherzustellen, dass die Software keine bekannten Sicherheitsrisiken aufweist.
  • Führen Sie Akzeptanz- oder Funktionstests aus, um sicherzustellen, dass die Software erwartungsgemäß funktioniert.
  • Geben Sie schnelles Feedback zu erkannten Problemen.
  • Erstellen bereitstellbarer Ressourcen oder Pakete mit dem aktualisierten Code, falls zutreffend

Automatisieren der kontinuierlichen Integration in Pipelines

Verwenden Sie Softwarelösungen zum Verwalten, Integrieren und Automatisieren des Prozesses, um Continuous Integration zu erzielen. Eine gängige Vorgehensweise besteht darin, eine fortlaufende Integrationspipeline zu verwenden.

Eine fortlaufende Integrationspipeline umfasst eine Software (häufig in der Cloud gehostet), die Folgendes bereitstellt:

  • Eine Plattform zum Ausführen automatisierter Tests.
  • Compliancescans.
  • Die Berichterstellung
  • Alle anderen Komponenten, die den kontinuierlichen Integrationsprozess bilden.

In den meisten Fällen ist die Pipelinesoftware an die Quellcodeverwaltung angefügt, sodass die fortlaufende Integrationspipeline ausgeführt wird, wenn Pullanforderungen erstellt oder Software mit einer bestimmten Verzweigung zusammengeführt werden. Die Integration der Quellcodeverwaltung bietet auch die Möglichkeit, CI-Feedback direkt auf Pull-Anforderungen zu geben.

Viele Lösungen, z. B. Azure-Pipelines oder GitHub-Aktionen, bieten die Funktionen kontinuierlicher Integrationspipelines.

Integrieren von Pipelines in die Quellcodeverwaltung

Die Integration Ihrer kontinuierlichen Integrationspipeline mit Ihrem Quellcodeverwaltungssystem ist der Schlüssel, um schnelle Self-Service-Codebeiträge zu ermöglichen.

Die CI-Pipeline wird auf einer neu erstellten Pullanforderung ausgeführt. Die Pipeline umfasst alle Tests, Sicherheitsbewertungen und andere Prüfungen. CI-Testergebnisse werden direkt in der Pull-Anforderung angezeigt, um nahezu echtzeitbasiertes Feedback zur Qualität zu ermöglichen.

Eine weitere gängige Vorgehensweise besteht darin, kleine Berichte oder Signale zu erstellen, die in der Quellcodeverwaltung angezeigt werden können, um die aktuellen Buildzustände sichtbar zu machen.

In der folgenden Abbildung ist die Integration zwischen GitHub und einer Azure DevOps-Pipeline dargestellt. In diesem Beispiel löst die Erstellung einer Pullanforderung eine Azure DevOps-Pipeline aus. Der Pipelinestatus wird in der Pullanforderung angezeigt.

Screenshot eines Azure DevOps-Statussignals in einem GitHub-Repository.

Integrieren automatisierter Tests

Ein wichtiges Element der kontinuierlichen Integration ist das kontinuierliche Erstellen und Testen von Code, da Entwickler Codebeiträge leisten. Das Testen von Pullanforderungen, während sie erstellt werden, gibt schnelles Feedback, dass der Commit keine grundlegenden Änderungen eingeführt hat. Der Vorteil besteht darin, dass die Tests in der kontinuierlichen Integrationspipeline die gleichen Tests sein können, die während der testgesteuerten Entwicklung ausgeführt werden.

Der folgende Codeausschnitt veranschaulicht einen Testschritt aus einer Azure DevOps-Pipeline. Der Schritt umfasst zwei Aufgaben:

  • Die erste Aufgabe verwendet ein beliebtes Python-Testframework zum Ausführen von CI-Tests. Diese Tests sind zusammen mit dem Python-Code in der Quellcodeverwaltung enthalten. Die Testergebnisse gehen zu einer Datei mit dem Namen test-results.xml.
  • Die zweite Aufgabe nutzt die Testergebnisse und veröffentlicht sie als integrierten Bericht in der Azure DevOps-Pipeline.
- 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)'

Die folgende Abbildung zeigt Testergebnisse, die im Azure DevOps-Portal angezeigt werden.

Screenshot der Azure DevOps-Pipelinetests im Azure DevOps-Portal.

Tests mit Fehlern

Fehlgeschlagene Tests sollten vorübergehend eine Bereitstellung blockieren und zu einer tieferen Analyse der geschehenen Ereignisse führen. Fehlgeschlagene Tests sollten auch zu einer Verfeinerung der Tests oder zu einer Verbesserung der Änderung führen, die dazu führte, dass die Tests fehlschlugen.

Buildstatus veröffentlichen

Viele Entwickler zeigen, dass ihre Codequalität hoch ist, indem ein Statussignal in ihrem Repository angezeigt wird. Die folgende Abbildung zeigt ein Azure Pipelines-Signal, das in der Readme-Datei für ein Open-Source-Projekt in GitHub angezeigt wird.

Screenshot eines Azure Pipelines-Badges in einer Infodatei in GitHub.

Azure-Erleichterung

Azure DevOps ist eine Sammlung von Diensten, die Ihnen helfen, eine zusammenarbeitende, effiziente und konsistente Entwicklungspraxis zu entwickeln.

Azure Pipelines bietet Build- und Releasedienste zur Unterstützung der kontinuierlichen Integration und kontinuierlichen Bereitstellung (CI/CD) Ihrer Anwendungen.

GitHub für Aktionen für Azure ermöglicht die Automatisierung von CI/CD-Prozessen. Sie wird direkt in Azure integriert, um Bereitstellungen zu vereinfachen. Sie können Workflows erstellen, die jede Pullanforderung in Ihrem Repository erstellen und testen oder zusammengeführte Pullanforderungen für die Produktion bereitstellen.

Erfahren Sie, wie Sie eine fortlaufende Integrationspipeline mithilfe von GitHub oder Azure DevOps erstellen:

Erfahren Sie, wie Sie Signale in Ihren Repositorys anzeigen:

Checkliste für operative Exzellenz