Blog

Terraform Plan-Genehmigung in Azure DevOps Release Pipeline einbeziehen

Laurens Knoll

Laurens Knoll

Aktualisiert Oktober 21, 2025
3 Minuten

In Automatisierungsumgebungen wie Azure DevOps können Sie Terraforms interaktive Genehmigung nicht verwenden. Daher erstellen Sie einen Bereitstellungsplan, warten auf die Genehmigung des Plans und wenden den Bereitstellungsplan an. In diesem Blog wird eine Planfreigabe in Azure Pipelines mithilfe der Aufgabe Manuelle Intervention implementiert.

Plan-Genehmigung Freigabe-Pipeline

Eine Freigabe-Pipeline zur Plangenehmigung erstellt zunächst einen Terraform-Plan und wartet auf eine Genehmigung, bevor sie den Plan anwendet. Die folgende Freigabe-Pipeline implementiert die Planfreigabe mithilfe der Aufgabe Manuelle Intervention. Diese Aufgabe benachrichtigt ausgewählte Benutzer oder Gruppen und wartet auf eine manuelle Genehmigung.

Anmerkung: Diese Pipeline erfordert die Terraform Extension-Erweiterung. Bitten Sie Ihren Administrator, sie zu installieren und zu konfigurieren.

Pipeline freigeben

Die Veröffentlichung besteht aus zwei Phasen: Test und Produktion. Die Einsätze werden über Release-Variablen gesteuert.

Das zugehörige Quellcode-Repository ist auf GitHub verfügbar.

[caption id="" align="alignnone" width="900"] Pipeline freigeben[/caption]

[caption id="" align="alignnone" width="900"] Variablen freigeben[/caption]

Der Einfachheit halber wird in diesem Beispiel keine stufenspezifische Konfiguration verwendet. Fügen Sie zusätzliche Konfigurationen mit Hilfe zusätzlicher Release-Variablen hinzu und wenden Sie diese mit der Aufgabe Token ersetzen an.

Pipeline für die Bereitstellung

Die Bereitstellungspipeline konfiguriert Terraform, plant die erforderlichen Änderungen, wartet auf die Genehmigung und wendet die Änderungen an. Da Pipeline-Artefakte in Release-Pipelines nicht unterstützt werden, geht die Deployment-Pipeline davon aus, dass die Infra unverändert ist, während sie auf die Genehmigung wartet.

[caption id="" align="alignnone" width="900"] Terraform Plan erstellen[/caption]

[caption id="" align="alignnone" width="900"] Genehmigung des Plans[/caption]

[caption id="" align="alignnone" width="900"] Plan anwenden[/caption]

Befehl-ReferenzAufgabeKonfiguration
InitKonfiguration Verzeichnis$(System.DefaultWorkingDirectory)/GitHub/terraform/projects/$(Terraform.Project)/stacks/$(Terraform.Stack)
Status Schlüssel$(Terraform.Projekt)/$(Terraform.Konfiguration)
PlanKonfiguration Verzeichnis$(System.DefaultWorkingDirectory)/GitHub/terraform/projects/$(Terraform.Project)/stacks/$(Terraform.Stack)
Befehl Args-input=false -var-file="$(System.DefaultWorkingDirectory)/GitHub/terraform/projects/$(Terraform.Project)/settings/$(Terraform.Configuration).tfvars"
AnwendenKonfigurations-Verzeichnis$(System.DefaultWorkingDirectory)/GitHub/terraform/projects/$(Terraform.Project)/stacks/$(Terraform.Stack)
Befehl Args-input=false -auto-approve -lock-timeout=0s -var-file="$(System.DefaultWorkingDirectory)/GitHub/terraform/projects/$(Terraform.Project)/settings/$(Terraform.Configuration).tfvars"

Diskussion

Azure Pipelines unterstützt auch Gates und yaml-pipelines. Gates werden verwendet, um Einsätze zu steuern, und yaml-pipelines werden verwendet, um die Build- und Release-Pipelines neben Ihrem Quellcode zu speichern. Warum verwenden Sie das nicht?

Ich bin der Meinung, dass Gates und yaml-pipelines anstelle der Aufgabe Manuelles Eingreifen verwendet werden sollten. Derzeit bedeutet dies, dass die Konfiguration für die Genehmigung von Pipelines in die Umgebungskonfiguration auf Projektebene verschoben wird[1]. Das gefällt mir nicht, denn ich bevorzuge in sich geschlossene Pipelines.

Aber können Sie Gates nicht auch ohne yaml-pipelines verwenden? Leider unterstützen Release Pipelines nicht die Veröffentlichung von Pipeline-Artefakten. Dies lässt sich durch die Verwendung einer externen Infrastruktur umgehen, aber ich warte lieber darauf, dass das Azure DevOps-Team dies mit yaml-pipelines [2] implementiert.

Fazit

Verwenden Sie die Aufgabe des manuellen Eingriffs, um Ihre Terraform-Bereitstellungen zu genehmigen. Obwohl Release Pipelines es nicht erlauben, den geplanten Plan auszuführen, ist eine kontrollierte Bereitstellung immer besser als eine blinde.

Verfasst von

Laurens Knoll

As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.

Contact

Let’s discuss how we can support your journey.