Bereitstellungen automatisieren

Last reviewed 2023-07-17 UTC

In diesem Dokument im Google Cloud-Architektur-Framework finden Sie Best Practices zur Automatisierung Ihrer Builds, Tests und Bereitstellungen.

Die Automatisierung unterstützt Sie bei der Standardisierung Ihrer Builds, Tests und Bereitstellungen, da durch Nutzer verursachte Fehler bei wiederkehrenden Prozessen wie Codeaktualisierungen eliminiert werden. In diesem Abschnitt wird beschrieben, wie Sie verschiedene Prüfungen und Sicherheitsmaßnahmen bei der Automatisierung verwenden. Ein standardisierter maschinengesteuerter Prozess sorgt dafür, dass Ihre Bereitstellungen sicher angewendet werden. Er bietet auch einen Mechanismus, um frühere Bereitstellungen nach Bedarf wiederherzustellen, ohne die Nutzererfahrung wesentlich zu beeinträchtigen.

Code in zentralen Code-Repositories speichern

Speichern Sie Ihren Code in zentralen Code-Repositories, die ein Versionsverwaltungssystem mit Tagging und der Möglichkeit enthalten, Rollback von Codeänderungen durchzuführen. Mit der Versionsverwaltung können Sie Dateien organisieren und den Zugriff, die Aktualisierung und das Löschen zwischen Teams und Organisationen steuern.

Sie können die Repositories nach Bedarf in verschiedenen Entwicklungsphasen versionieren und mit Labels versehen. Labels könnten beispielsweise test, dev und prod sein.

In Google Cloud können Sie Ihren Code in Cloud Source Repositories speichern, versionieren in andere Google Cloud-Produkte einbinden. Wenn Sie Containeranwendungen erstellen, verwenden Sie Artifact Registry, eine verwaltete Registry für Container.

Weitere Informationen zur Versionsverwaltung finden Sie unter Versionsverwaltung. Weitere Informationen zur Implementierung der Entwicklung nach Baumschema mit Ihren Repositories finden Sie unter Entwicklung nach Baumschema.

Continuous Integration und Continuous Deployment (CI/CD) verwenden

Automatisieren Sie Ihre Bereitstellungen mit einem Verfahren für Continuous Integration und kontinuierliche Bereitstellung (CI/CD). Ein CI/CD-Ansatz ist eine Kombination aus Pipelines, die Sie konfigurieren, und Prozessen, denen Ihr Entwicklungsteam folgt.

Ein CI/CD-Ansatz erhöht die Bereitstellungsgeschwindigkeit, indem Ihr Softwareentwicklungsteam produktiver wird. Auf diese Weise können Entwickler kleinere und häufigere Änderungen vornehmen, die gründlich getestet werden, während die für die Bereitstellung dieser Änderungen erforderliche Zeit verkürzt wird.

Automatisieren Sie im Rahmen Ihres CI/CD-Ansatzes alle Schritte, die zum Erstellen, Testen und Bereitstellen Ihres Codes erforderlich sind. Beispiel:

  • Wenn neuer Code per Commit an das Repository übergeben wird, ruft der Commit automatisch die Build- und Testpipeline auf.
  • Automatisieren Sie Integrationstests.
  • Automatisieren Sie Ihre Bereitstellung, damit Änderungen erst dann bereitgestellt werden, wenn Ihr Build bestimmte Testkriterien erfüllt.

In Google Cloud können Sie Cloud Build und Cloud Deploy für Ihre CI/CD-Pipelines verwenden.

Mit Cloud Build können Sie Abhängigkeiten und Versionen definieren, die Sie zum Verpacken und Erstellen eines Anwendungspakets verwenden können. Versionieren Sie Ihre Build-Konfiguration, damit alle Builds konsistent sind und Sie bei Bedarf ein Rollback zu einer vorherigen Konfiguration durchführen können.

Mit Cloud Deploy können Sie Ihre Anwendungen in bestimmten Umgebungen in Google Cloud bereitstellen und Ihre Bereitstellungspipelines verwalten.

Weitere Informationen zur Implementierung von CI/CD finden Sie unter Continuous Integration und Bereitstellungsautomatisierung.

Infrastruktur mithilfe von IaC (Infrastruktur als Code) bereitstellen und verwalten

Infrastruktur als Code ist die Verwendung eines Beschreibungsmodells für die Verwaltung von Infrastrukturen, wie z. B. VMs, und Konfigurationen, wie z. B. Firewallregeln. Mit Infrastruktur als Code können Sie Folgendes tun:

  • Erstellen Sie automatisch Ihre Cloud-Ressourcen, einschließlich der Bereitstellungs- und Testumgebungen für Ihre CI/CD-Pipeline.
  • Infrastrukturänderungen wie Anwendungsänderungen behandeln. Sie sollten zum Beispiel sicherstellen, dass Änderungen an der Konfiguration geprüft und getestet werden und sich nachprüfen lassen.
  • Ihre Cloud-Infrastruktur basiert auf einer einzigen aktuellen Version.
  • Replizieren Sie Ihre Cloud-Umgebung nach Bedarf.
  • Falls erforderlich, führen Sie ein Rollback zu einer vorherigen Konfiguration durch.

Dieses Konzept von Infrastruktur als Code gilt auch für Projekte in Google Cloud. Sie können diesen Ansatz verwenden, um in Ihren Projekten Ressourcen wie freigegebene VPC-Verbindungen oder IAM-Zugriff (Identity and Access Management) zu definieren. Ein Beispiel für diesen Ansatz finden Sie unter Terraform-Modul für Google Cloud Project Factory.

Tools von Drittanbietern wie Terraform helfen Ihnen beim automatischen Erstellen der Infrastruktur in Google Cloud. Weitere Informationen finden Sie unter Infrastruktur als Code mit Terraform, Cloud Build und GitOps verwalten.

Sie können Google Cloud-Features wie diese verwenden: Projektsperren, Aufbewahrungsrichtlinien für Cloud Storage und Bucket-Sperren für Cloud Storage, um wichtige Ressourcen vor versehentlichem oder böswilligem Löschen zu schützen.

Tests während des gesamten Lebenszyklus der Softwarebereitstellung integrieren

Tests sind entscheidend für die erfolgreiche Einführung Ihrer Software. Kontinuierliche Tests unterstützen Teams dabei, qualitativ hochwertige Software schneller zu erstellen und die Softwarestabilität zu verbessern.

Testtypen:

  • Unittests. Unittests sind schnell und helfen Ihnen, schnelle Bereitstellungen durchzuführen. Behandeln Sie Unittests als Teil der Codebasis und nehmen Sie sie in den Build-Prozess auf.
  • Integrationstests. Integrationstests sind wichtig, insbesondere für Arbeitslasten, die für die Skalierung entwickelt wurden und von mehr als einem Dienst abhängen. Diese Tests können komplex werden, wenn Sie die Integration mit verbundenen Diensten testen.
  • Systemtests. Systemtests sind zeitaufwendig und komplex. Sie helfen Ihnen jedoch, Grenzfälle zu erkennen und Probleme vor der Bereitstellung zu beheben.
  • Andere Tests. Es sollten noch andere Tests ausgeführt werden, darunter statische Tests, Lasttests, Sicherheitstests und Richtlinienvalidierungstests. Führen Sie diese Tests aus, bevor Sie die Anwendung in der Produktion bereitstellen.

So integrieren Sie Tests:

  • Alle Testarten kontinuierlich während des gesamten Lebenszyklus der Softwarebereitstellung durchführen.
  • Automatisieren Sie diese Tests und fügen Sie sie in die CI/CD-Pipeline ein. Ihre Pipeline sollte fehlschlagen, wenn einer der Tests fehlschlägt.
  • Aktualisieren die Tests und fügen Sie kontinuierlich neue Tests hinzu, um den Betriebszustand Ihrer Bereitstellung zu verbessern und beizubehalten.

Für Ihre Testumgebungen:

  • Verwenden Sie separate Google Cloud-Projekte für jede Ihrer Testumgebungen. Verwenden Sie für jede Anwendung eine separate Projektumgebung. Diese Trennung sorgt für eine klare Abgrenzung zwischen Ressourcen der Produktionsumgebung und den Ressourcen Ihrer niedrigeren Umgebungen. Diese Trennung trägt dazu bei, dass Änderungen in einer Umgebung nicht versehentlich andere Umgebungen beeinträchtigen.
  • Automatisieren Sie die Erstellung von Testumgebungen. Eine Möglichkeit für diese Automatisierung ist die Verwendung von Infrastruktur als Code.
  • Testen Sie Änderungen in einer synthetischen Produktionsumgebung. Diese Umgebung bietet eine produktionsähnliche Umgebung, um Ihre Anwendung zu testen und verschiedene Arten von Tests für Ihre Arbeitslasten durchzuführen. Dazu gehören End-to-End-Tests und Leistungstests.

Weitere Informationen zur Implementierung von kontinuierlichen Tests finden Sie unter Testautomatisierung.

Bereitstellungen schrittweise einführen

Wählen Sie Ihre Bereitstellungsstrategie anhand wichtiger Parameter wie minimalen Unterbrechungen für Endnutzer, Rolling Updates, Rollback-Strategien und A/B-Teststrategien aus. Bewerten Sie für jede Arbeitslast diese Anforderungen und wählen Sie eine Bereitstellungsstrategie aus bewährten Verfahren wie Rolling Updates, Blau/Grün-Bereitstellungen und Canary-Deployments aus.

Lassen Sie nur CI/CD-Prozesse Änderungen in Ihrer Produktionsumgebung vornehmen und veröffentlichen.

Ziehen Sie die Verwendung einer unveränderlichen Infrastruktur in Betracht. Eine unveränderliche Infrastruktur ist eine Infrastruktur, die nicht geändert oder aktualisiert wird. Wenn Sie neuen Code bereitstellen oder eine andere Konfiguration in Ihrer Umgebung ändern müssen, ersetzen Sie die gesamte Umgebung (z. B. eine Sammlung von VMs oder Pods) durch die neue Umgebung. Blau/Grün-Bereitstellungen sind ein Beispiel für eine unveränderliche Infrastruktur.

Wir empfehlen, Canary-Tests durchzuführen und Ihr System auf Fehler zu beobachten, während Sie Änderungen bereitstellen. Diese Art der Beobachtung ist einfacher, wenn Sie ein robustes Monitoring- und Benachrichtigungssystem haben. Für A/B-Tests oder Canary-Tests können Sie die verwalteten Instanzgruppen von Google Cloud verwenden. Sie können dann einen langsamen Roll-out oder bei Bedarf eine Wiederherstellung ausführen.

Mit Cloud Deploy können Sie Bereitstellungen automatisieren und Ihre Bereitstellungspipeline verwalten. Sie können auch viele Tools von Drittanbietern wie Spinnaker und Tekton in Google Cloud sowohl für automatisierte Bereitstellungen als auch für das Erstellen von Bereitstellungspipelines verwenden.

Frühere Releases nahtlos wiederherstellen

Definieren Sie Ihre Wiederherstellungsstrategie als Teil Ihrer Bereitstellungsstrategie. Prüfen Sie, ob Sie eine Bereitstellung oder eine Infrastrukturkonfiguration auf eine frühere Version des Quellcodes zurücksetzen können. Die Wiederherstellung einer vorherigen stabilen Bereitstellung ist ein wichtiger Schritt beim Vorfallmanagement für Zuverlässigkeits- und Sicherheitsvorfälle.

Achten Sie außerdem darauf, dass Sie die Umgebung in dem Zustand wiederherstellen können, in dem sie sich vor dem Start des Bereitstellungsprozesses befand. Dies kann Folgendes beinhalten:

  • Die Möglichkeit, Codeänderungen in Ihrer Anwendung rückgängig zu machen.
  • Die Möglichkeit, alle Konfigurationsänderungen rückgängig zu machen, die an der Umgebung vorgenommen wurden.
  • Verwendung einer unveränderlichen Infrastruktur und Sicherstellung, dass Bereitstellungen die Umgebung nicht ändern Durch diese Vorgehensweisen können Konfigurationsänderungen leichter rückgängig gemacht werden.

CI/CD-Pipelines überwachen

Überwachen Sie Ihre CI/CD-Pipelines, um Ihren automatisierten Prozess für das Entwickeln, Testen und Bereitstellen reibungslos zu gestalten. Legen Sie Benachrichtigungen fest, die angeben, wenn etwas in einer Pipeline fehlschlägt. Jeder Schritt Ihrer Pipeline sollte geeignete Logberichte schreiben, damit Ihr Team die Ursachenanalyse durchführen kann, wenn eine Pipeline fehlschlägt.

In Google Cloud sind alle CI/CD-Dienste in Google Cloud Observability eingebunden. Beispiel:

Weitere Informationen zum Monitoring und Logging finden Sie unter Monitoring, Benachrichtigungen und Logging einrichten.

Anwendungen sicher bereitstellen

Lesen Sie den Abschnitt Anwendungen sicher bereitstellen in der Kategorie Sicherheit, Compliance und Datenschutz des Architektur-Frameworks.

Verwaltungsrichtlinien für Versions-Releases festlegen

Damit Ihre Entwickler Fehler vermeiden können und eine schnelle Softwarebereitstellung ermöglicht wird, müssen Ihre Verwaltungsrichtlinien für die Veröffentlichung neuer Softwareversionen klar dokumentiert sein.

Release-Entwickler überwachen, wie Software erstellt und ausgeliefert wird. Das Release-Engineering basiert auf vier Vorgehensweisen:

  • Selfservice-Modus: Erstellen Sie Richtlinien, mit denen Softwareentwickler häufige Fehler vermeiden können. Diese Richtlinien werden im Allgemeinen in automatisierten Prozessen kodifiziert.

  • Häufige Releases: Eine hohe Geschwindigkeit hilft bei der Fehlerbehebung. Häufige Releases basieren auf automatisierten Einheitentests.

  • Hermetische Builds: Achten Sie auf Konsistenz mit Ihren Build-Tools. Versionieren Sie die Build-Compiler, die Sie zum Erstellen von Versionen im Vergleich zu vor einem Monat verwenden.

  • Richtlinienerzwingung: Alle Änderungen erfordern eine Codeüberprüfung, idealerweise eine Reihe von Richtlinien zur Durchsetzung der Sicherheit. Die Durchsetzung von Richtlinien verbessert den Code Review, die Fehlerbehebung und das Testen eines neuen Releases.

Nächste Schritte