Bearbeiten

Freigeben über


CI/CD-Pipeline für Gridwich

Microsoft Entra ID
Azure Event Grid
Azure-Funktionen
Azure-Schlüsseltresor
Azure Pipelines

Für Gridwich ist es erforderlich, dass mehrere Ressourcen innerhalb und außerhalb von Azure sicher miteinander kommunizieren können. Diese Anforderung stellt CI/CD-Herausforderungen, für die Berechtigungen, Gates, die Ressourcenerstellung, die Reihenfolge von Vorgängen und die Bereitstellung von Funktionen mit langer Laufzeit in Microsoft Entra berücksichtigt werden müssen. Die folgenden grundlegenden Prinzipen befassen sich mit diesen Herausforderungen:

  • Ein einzelnes Buildartefakt wirkt sich auf alle Umgebungen einer Pipeline aus.
  • Die Bereitstellung von Umgebungen ohne Gate kann aufgehoben werden.
  • Terraform erstellt deklarativ idempotente Umgebungen.
  • Terraform veröffentlicht keine Software.
  • Bei Infrastrukturerstellung und Softwarerelease handelt es sich um zwei unterschiedliche Phasen der Pipeline.
  • Die CI/CD-Pipeline weist keine Microsoft Entra-Berechtigungen zu.
  • Für die Pipeline gilt alles als Code.
  • Die Pipeline verwendet wiederverwendbare Komponenten, deren Fokus auf der Kombinierbarkeit liegt.

Die folgenden Überlegungen thematisieren die oben genannten Prinzipien.

Einzelnes Artefakt, mehrere Umgebungen

Die Gridwich-Pipeline kann in mehrere Umgebungen skaliert werden, es gibt jedoch nur ein einzelnes Artefakt, das von der Pipeline von einer Umgebung zur nächsten weitergegeben wird.

Softwarerelease vs. Infrastrukturerstellung

In Gridwich handelt es sich bei Softwarerelease und Infrastrukturbereitstellung um zwei eigenständige Aufgaben. Eine einzelne Pipeline verarbeitet beide Aufgaben während verschiedener Phasen. Dafür wird das folgende allgemeine Muster verwendet:

Softwarebuilds > Infrastrukturbereitstellung > Softwarerelease > Softwarekonfiguration > Benutzerdefinierte Skriptbereitstellung

Das grundlegende Prinzip, dass Infrastruktur- und Softwarerelease zwei unterschiedliche Aufgaben sind, gestaltet das Bereitstellen von Event Grid-Abonnements schwieriger. Wenn Azure ein Webhookabonnement in Event Grid erstellt, wird ein Überprüfungsereignis gesendet, um zu überprüfen, ob der Registrierungsendpunkt Event Grid-Ereignisse akzeptiert. Zur Übermittlung dieser Überprüfung, muss die Azure-Funktion veröffentlicht worden sein und ausgeführt werden, bevor Terraform die Event Grid-Abonnementressourcen erstellen kann.

Zur Lösung dieses Problems gibt es zwei Terraform-Aufträge in der CI/CD-Pipeline:

Diagram showing the Terraform sandwich jobs.

  • Terraform 1 erstellt alle Ressourcen außer derjenigen für die Azure Event Grid-Abonnements.
  • Terraform 2 erstellt die Event Grid-Abonnements, sobald die Software ordnungsgemäß ausgeführt wird.

Da Terraform aktuell keine Möglichkeit aufweist, bestimmte Module auszuschließen, muss der Terraform 1-Auftrag explizit alle Module außer den Event Grid-Abonnements als Ziel verwenden. Diese Anforderung ist möglicherweise fehleranfällig. In einem aktuellen GitHub-Issue zu Terraform wird dieses Problem nachverfolgt.

Skripts nach der Bereitstellung

Die CI/CD-Pipeline führt keine Vorgänge durch, für die erhöhte Rechte erforderlich sind. Es werden jedoch Administratorskriptvorlagen verwendet, um mehrere Administratorskripts als Pipelineartefakte zu erstellen. Ein Administrator mit erhöhten Rechten muss diese Administratorskripts ausführen, sobald eine neue Gridwich-Umgebung erstellt wird. Weitere Informationen finden Sie unter Von der Pipeline erstellte Administratorskripts.

Terraform und Softwarereleases können bestimmte Gridwich-Vorgänge nicht abschließen. Dazu gehören die folgenden:

  • Kopieren von Zertifikaten in Azure Key Vault
  • Aktivieren von Storage Analytics in Azure Storage

Das Azure CLI-Skript azcli-last-steps-template.yml kann diese letzten Schritte durchführen.

Alles gilt als Code und Wiederverwenden von Code

Ein Vorteil des Ansatzes, alles als Code zu verstehen, besteht in der Wiederverwendung von Komponenten.

  • In Bezug auf Terraform basiert Gridwich stark auf Terraform-Modulen, um die Kombinierbarkeit und Wiederverwendbarkeit zu verbessern.
  • Für YAML in Azure Pipelines verwendet Gridwich Pipelinevorlagen.

Nächste Schritte