Entwerfen einer CI/CD-Pipeline mithilfe von Azure DevOps

Application Insights
Azure DevOps
Pipelines
Repos
Web Apps

Dieses Szenario fungiert als Architektur- und Entwurfsleitfaden für die Erstellung einer CI/CD-Pipeline (Continuous Integration/Continuous Deployment). In diesem Beispiel stellt die CI/CD-Pipeline eine .NET-Webanwendung mit zwei Ebenen in Azure App Service bereit.

Die Migration zu modernen CI/CD-Prozessen bietet zahlreiche Vorteile für Build-, Bereitstellungs-, Test- und Überwachungsvorgänge für Anwendungen. Durch die Verwendung von Azure DevOps mit anderen Diensten wie etwa App Service müssen sich Organisationen nicht um die Verwaltung der unterstützenden Infrastruktur kümmern und können sich stattdessen ganz auf die App-Entwicklung konzentrieren.

Mögliche Anwendungsfälle

Azure DevOps und CI/CD-Prozesse eignen sich für Folgendes:

  • Beschleunigen der Anwendungsentwicklung und Entwicklungslebenszyklen.
  • Sicherstellen der Qualität und Konsistenz für den automatisierten Build- und Freigabeprozess
  • Steigern von Anwendungsstabilität und -betriebszeit.

Aufbau

Architecture diagram of the Azure components involved in a DevOps scenario using Azure DevOps and Azure App Service

Laden Sie eine Visio-Datei dieser Architektur herunter.

Datenfluss

Die Daten durchlaufen das Szenario wie folgt:

  1. Ein Entwickler ändert den Quellcode der Anwendung.
  2. Der Anwendungscode wird im Quellcoderepository in Azure Repos committet (einschließlich der Datei „web.config“).
  3. Continuous Integration löst den Anwendungsbuildvorgang und Komponententests mit Azure Test Plans aus.
  4. Continuous Deployment in Azure Pipelines löst eine automatisierte Bereitstellung von Anwendungsartefakten mit umgebungsspezifischen Konfigurationswerten aus.
  5. Die Artefakte werden in Azure App Service bereitgestellt.
  6. Azure Application Insights sammelt und analysiert Integritäts-, Leistungs- und Nutzungsdaten.
  7. Entwickler überwachen und verwalten Integritäts-, Leistungs- und Nutzungsinformationen.
  8. Neue Features und Fehlerbehebungen werden unter Verwendung von Azure Boards auf der Grundlage von Backloginformationen priorisiert.

Komponenten

  • Azure DevOps ist ein Dienst für die umfassende und nahtlose Verwaltung Ihres Entwicklungslebenszyklus – von der Planung und dem Projektmanagement über die Codeverwaltung bis hin zum Build- und Releasevorgang.

  • Azure-Web-Apps ist ein PaaS-Dienst zum Hosten von Webanwendungen, REST-APIs und mobilen Back-Ends. In diesem Artikel geht es zwar um .NET, aber es werden auch verschiedene andere Optionen für Entwicklungsplattformen unterstützt.

  • Application Insights ist ein erweiterbarer, für Webentwickler konzipierter Erstanbieterdienst zur Verwaltung der Anwendungsleistung (Application Performance Management, APM) auf mehreren Plattformen.

Alternativen

In diesem Artikel steht zwar Azure DevOps im Mittelpunkt, Sie können aber auch Azure DevOps Server (ehemals Team Foundation Server) als lokale Alternative nutzen. Darüber hinaus steht eine Reihe von Technologien zur Verfügung, mit denen Sie eine Open-Source-Entwicklungspipeline mit Jenkins erstellen können.

Aus Sicht von „Infrastructure-as-Code“ wurden Resource Manager-Vorlagen im Rahmen des Azure DevOps-Projekts verwendet. Sie können aber auch andere Verwaltungstechnologien wie etwa Terraform oder Chef verwenden. Wenn Sie eine IaaS-basierte Bereitstellung (Infrastructure-as-a-Service) vorziehen und eine Konfigurationsverwaltung benötigen, können Sie Azure Automation State Configuration, Ansible oder Chef verwenden.

Erwägen Sie ggf. die folgenden Alternativen zum Hosten in Azure-Web-Apps :

  • Microsoft Azure Virtual Machines: Für Workloads, die ein hohes Maß an Kontrolle erfordern oder von Betriebssystemkomponenten und -diensten abhängig sind, die mit Web-Apps nicht genutzt werden können (etwa der globale Assemblycache von Windows oder COM).

  • Microsoft Azure Service Fabric: Eine gute Option, wenn die Workloadarchitektur hauptsächlich verteilte Komponenten umfasst, die von der Bereitstellung und Ausführung in einem stark kontrollierten Cluster profitieren. Service Fabric kann auch zum Hosten von Containern verwendet werden.

  • Azure Functions: Ein effektiver serverloser Ansatz, wenn die Workloadarchitektur auf abgestimmten verteilten Komponenten mit minimalen Abhängigkeiten basiert, einzelne Komponenten nur bedarfsabhängig (also nicht ständig) ausgeführt werden müssen und keine Orchestrierung von Komponenten erforderlich ist.

Diese Entscheidungsstruktur für Azure-Computedienste kann bei der Wahl des richtigen Migrationspfads hilfreich sein.

Überlegungen

Sicherheit und Verwaltung

  • Erwägen Sie die Nutzung einer der Tokenisierungsaufgaben, die auf dem VSTS-Marketplace verfügbar sind.

  • Mit Azure Key Vault-Aufgaben können Geheimnisse aus einer Azure Key Vault-Instanz in Ihr Release heruntergeladen werden. Diese Geheimnisse können dann als Variablen in Ihrer Releasedefinition verwendet werden, um die Speicherung in der Quellcodeverwaltung zu vermeiden.

  • Verwenden Sie in Ihren Releasedefinitionen Releasevariablen, um Konfigurationsänderungen Ihrer Umgebungen zu steuern. Releasevariablen können für eine gesamte Freigabe oder eine bestimmte Umgebung gelten. Denken Sie daran, auf das Schlosssymbol zu klicken, wenn Sie Variablen für Geheimnisinformationen verwenden.

  • In Ihrer Releasepipeline sollten Bereitstellungsgates verwendet werden. Auf diese Weise können Sie Überwachungsdaten in Verbindung mit externen Systemen (etwa Incident Management oder zusätzliche individuelle Systeme) nutzen, um festzustellen, ob ein Release höher gestuft werden sollte.

  • Sollte für eine Releasepipeline ein manueller Eingriff erforderlich sein, verwenden Sie die Genehmigungsfunktion.

  • Es ist ratsam, Application Insights und weitere Überwachungstools so früh wie möglich in der Releasepipeline einzusetzen. Viele Organisationen beginnen erst in der Produktionsumgebung mit der Überwachung. Durch die Überwachung Ihrer anderen Umgebungen lassen sich Fehler früher im Entwicklungsprozess erkennen und Probleme in der Produktionsumgebung vermeiden.

Kostenoptimierung

Die Kosten für Azure DevOps richten sich nach der Anzahl von Benutzern in Ihrer Organisation, die Zugriff benötigen, und anderen Faktoren wie der Anzahl von erforderlichen gleichzeitigen Builds/Releases sowie der Anzahl von Testbenutzern. Weitere Informationen finden Sie in der Azure DevOps-Preisübersicht.

Der Preisrechner liefert eine Kostenschätzung für den Betrieb von Azure DevOps mit 20 Benutzern.

Azure DevOps wird monatlich nach Benutzern abgerechnet. Es können weitere Gebühren anfallen, die sich nach den erforderlichen gleichzeitigen Pipelines und den zusätzlichen Testbenutzern bzw. Basic-Lizenzen für Benutzer richten.

Bereitstellen dieses Szenarios

Voraussetzungen

  • Sie benötigen ein bestehendes Azure-Konto. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Zuerst müssen Sie sich für eine Azure DevOps-Organisation registrieren. Weitere Informationen finden Sie unter Quickstart: Create an organization (Schnellstart: Erstellen einer Organisation).

Exemplarische Vorgehensweise

Über Azure DevOps Projects werden Ihnen ein App Service-Plan, eine App Service-Instanz und eine App Insights-Ressource bereitgestellt. Außerdem wird eine Azure Pipelines-Pipeline für Sie konfiguriert.

Nachdem Sie mit Azure DevOps Projects eine Pipeline konfiguriert haben und der Buildvorgang abgeschlossen ist, können Sie sich die entsprechenden Codeänderungen, Arbeitselemente und Testergebnisse ansehen. Sie werden bemerken, dass keine Testergebnisse angezeigt werden, da der Code keine auszuführenden Tests enthält.

Die Pipeline erstellt eine Releasedefinition und einen Continuous Deployment-Trigger für die Bereitstellung der Anwendung in der Entwicklungsumgebung. Im Rahmen eines Continuous Deployment-Prozesses können Releases für mehrere Umgebungen gelten. Ein Release kann sowohl die Infrastruktur (mit Verfahren wie „Infrastructure-as-Code“) als auch die Bereitstellung der erforderlichen Anwendungspakete mit Aufgaben nach der Konfiguration umfassen.

Nächste Schritte

Die folgenden Ressourcen enthalten weitere Informationen zu CI/CD und Azure DevOps: