Bereitstellen von Bicep-Dateien mithilfe einer Pipeline
Nachdem Sie nun eine einfache Pipeline erstellt haben, können Sie sie für die Bereitstellung Ihrer Bicep-Dateien einrichten. In dieser Lerneinheit erfahren Sie, wie Sie Bicep-Code aus einer Pipeline bereitstellen und wie Sie die Bereitstellungsschritte einrichten.
Hinweis
Die Befehle in dieser Lerneinheit dienen der Veranschaulichung der Konzepte. Führen Sie die Befehle jetzt noch nicht aus. Sie können das Erlernte in Kürze üben.
Dienstverbindungen
Wenn Sie eine Bicep-Datei von Ihrem eigenen Computer aus bereitstellen, verwenden Sie die Azure CLI oder Azure PowerShell. Damit Sie Ihren Code bereitstellen können, melden Sie sich bei Azure an. In der Regel werden Sie von den Tools aufgefordert, Ihre E-Mail-Adresse und Ihr Kennwort in einem Browser einzugeben. Nachdem Ihre Anmeldeinformationen überprüft wurden, werden Ihre Berechtigungen zum Bereitstellen von Ressourcen bestätigt, und Sie können dann die Tools verwenden, um Ihre Bicep-Datei bereitzustellen.
Für die Bereitstellung mithilfe einer Pipeline ist ebenfalls eine Authentifizierung erforderlich. Da Pipelines ohne Eingriffe durch Personen ausgeführt werden, müssen sie mithilfe eines Dienstprinzipals bei Azure authentifiziert werden. Die Anmeldeinformationen eines Dienstprinzipals bestehen aus einer Anwendungs-ID und einem Geheimnis, bei dem es sich in der Regel um einen Schlüssel oder ein Zertifikat handelt. In Azure Pipelines verwenden Sie eine Dienstverbindung, um diese Anmeldeinformationen sicher zu speichern, damit sie von Ihrer Pipeline verwendet werden können. Eine Dienstverbindung umfasst außerdem einige weitere Informationen, mit deren Hilfe Ihre Pipeline die Azure-Umgebung identifizieren kann, in der Sie die Bereitstellung durchführen möchten.
Tipp
In diesem Modul verwenden Sie Azure DevOps, um beim Herstellen einer Dienstverbindung automatisch einen Dienstprinzipal zu erstellen. Im Modul Authentifizieren Ihrer Azure-Bereitstellungspipeline mit Dienstprinzipalen werden Dienstprinzipale, deren Funktionsweise, die Erstellung, das Zuweisen von Rollen und die Verwaltung ausführlicher erläutert.
Wenn Sie eine Dienstverbindung erstellen, geben Sie ihr einen Namen. In den Schritten wird über diesen Namen auf die Dienstverbindung verwiesen, sodass Ihr YAML-Pipelinecode keine geheimen Informationen enthalten muss.
Wenn Ihre Pipeline gestartet wird, hat der Agent, der Ihre Bereitstellungsschritte ausführt, Zugriff auf die Dienstverbindung, einschließlich ihrer Anmeldeinformationen. Ein Pipelineschritt verwendet genau wie Sie selbst Anmeldeinformationen, um sich bei Azure anzumelden. Anschließend verwenden die im Schritt definierten Aktionen die Identität des Dienstprinzipals.
Sie müssen sicherstellen, dass Ihr Dienstprinzipal über die Berechtigungen verfügt, die zum Ausführen Ihrer Bereitstellungsschritte erforderlich sind. Beispielsweise müssen Sie dem Dienstprinzipal möglicherweise die Rolle „Mitwirkender“ für die Ressourcengruppe zuweisen, in der Ihre Ressourcen bereitgestellt werden.
Warnung
Es kann Ihnen einfacher erscheinen, die Anmeldeinformationen Ihres Dienstprinzipals in Ihrer YAML-Datei zu speichern und die Anmeldung mit dem Befehl az login
durchzuführen. Diesen Ansatz sollten Sie jedoch niemals verwenden, um Ihren Dienstprinzipal zu authentifizieren. Anmeldeinformationen in einer YAML-Datei werden in Klartext gespeichert. Jeder Benutzer, der Zugriff auf Ihr Repository hat, kann die Anmeldeinformationen anzeigen und verwenden. Selbst wenn Sie den Zugriff auf Ihre Azure DevOps-Organisation und Ihr Projekt einschränken, befindet sich die YAML-Datei mit den Anmeldeinformationen immer auf dem Computer der Person, wenn diese Ihr Repository klont. Es ist wichtig, immer eine Dienstverbindung zu verwenden, wenn Sie über eine Pipeline mit Azure arbeiten. Dienstverbindungen bieten auch noch andere Sicherheits- und Zugriffssteuerungsfunktionen.
Dienstverbindungen werden in Ihrem Azure DevOps-Projekt erstellt. Eine einzelne Dienstverbindung kann von mehreren Pipelines gemeinsam genutzt werden. Es empfiehlt sich jedoch in der Regel, eine Dienstverbindung mit dem entsprechenden Dienstprinzipal für jede Pipeline und jede Umgebung einzurichten, in der Sie Bereitstellungen durchführen. Dieses Vorgehen trägt zur Erhöhung der Sicherheit Ihrer Pipelines bei und verringert die Wahrscheinlichkeit, dass Ressourcen versehentlich in einer anderen Umgebung bereitgestellt oder konfiguriert werden als erwartet.
Sie können Ihre Dienstverbindung auch so einrichten, dass sie nur in bestimmten Pipelines verwendet werden kann. Wenn Sie beispielsweise eine Dienstverbindung erstellen, die in der Produktionsumgebung Ihrer Website bereitgestellt wird, sollten Sie sicherstellen, dass nur die Pipeline Ihrer Website diese Dienstverbindung verwenden kann. Durch das Einschränken einer Dienstverbindung auf bestimmte Pipelines wird verhindert, dass eine andere Person versehentlich dieselbe Dienstverbindung für ein anderes Projekt verwendet und eventuell einen Ausfall Ihrer Produktionswebsite verursacht.
Bereitstellen einer Bicep-Datei über die Aufgabe „Bereitstellung einer Azure-Ressourcengruppe“
Wenn Sie eine Bicep-Datei aus einer Pipeline bereitstellen müssen, können Sie die Aufgabe Bereitstellung einer Azure-Ressourcengruppe verwenden. Hier sehen Sie ein Beispiel für das Konfigurieren eines Schritts zur Verwendung der Aufgabe:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: 'MyServiceConnection'
location: 'westus3'
resourceGroupName: Example
csmFile: deploy/main.bicep
overrideParameters: >
-parameterName parameterValue
Die erste Zeile gibt AzureResourceManagerTemplateDeployment@3
an. Dadurch wird Azure Pipelines mitgeteilt, dass der Task, den Sie für diesen Schritt verwenden möchten, AzureResourceManagerTemplateDeployment
heißt und dass Sie die Version 3
des Tasks verwenden möchten.
Wenn Sie die Aufgabe „Bereitstellung einer Azure-Ressourcengruppe“ verwenden, geben Sie eine Reihe von Eingaben an, um ihr mitzuteilen, was auszuführen ist. Hier sind einige Eingaben, die Sie beim Verwenden der Aufgabe angeben können:
connectedServiceName
ist der Name der zu verwendenden Dienstverbindung.location
muss angegeben werden, auch wenn der Wert möglicherweise nicht verwendet wird. Die Aufgabe „Bereitstellung einer Azure-Ressourcengruppe“ kann auch eine Ressourcengruppe für Sie erstellen. In diesem Fall muss ihr mitgeteilt werden, in welcher Azure-Region die Ressourcengruppe erstellt werden soll. In diesem Modul geben Sie denlocation
-Eingabewert an, dessen Wert jedoch nicht verwendet wird.resourceGroupName
gibt den Namen der Ressourcengruppe an, für die die Bicep-Datei bereitgestellt werden soll.overrideParameters
enthält Parameterwerte, die Sie zur Bereitstellungszeit an Ihre Bicep-Datei übergeben möchten.
Wenn der Task gestartet wird, verwendet er die Dienstverbindung, um sich bei Azure anzumelden. Zu dem Zeitpunkt, an dem die Aufgabe die von Ihnen angegebene Bereitstellung ausführt, ist sie also bereits authentifiziert. Sie müssen az login
nicht ausführen.
Ausführen von Azure CLI- und Azure PowerShell-Befehlen
Zwei der nützlichsten integrierten Aufgaben in Azure-Pipelines sind die Azure CLI- und Azure PowerShell-Aufgaben. Sie können diese Aufgaben verwenden, um einen oder mehrere Azure CLI- oder PowerShell-Befehle auszuführen.
In zukünftigen Microsoft Learn-Modulen erfahren Sie, wie Sie mit dem Azure CLI-Befehl weitere Teile Ihres Bereitstellungsprozesses über eine Pipeline automatisieren können.
Variablen
Häufig enthalten Ihre Pipelines Werte, die Sie von Ihrer YAML-Datei getrennt halten möchten. Wenn Sie beispielsweise eine Bicep-Datei in einer Ressourcengruppe bereitstellen, geben Sie den Namen der Ressourcengruppe an. Der Name der Ressourcengruppe unterscheidet sich wahrscheinlich, wenn Sie die Bereitstellung in verschiedenen Umgebungen durchführen. Darüber hinaus müssen Sie möglicherweise Parameter für Ihre Bicep-Dateien angeben, einschließlich Geheimnissen wie den Kennwörtern für Datenbankserver. Diese Werte sollten Sie nicht in Ihrer YAML-Pipelinedatei oder an einer anderen Stelle in Ihrem Git-Repository speichern. Verwenden Sie stattdessen Variablen, um die Sicherheit zu erhöhen und Ihre Pipelinedefinitionen wiederverwendbar zu machen.
Erstellen einer Variablen
Die Azure Pipelines-Weboberfläche bietet einen Editor, mit dem Sie Variablen für Ihre Pipeline erstellen können:
Sie können einen Azure Pipelines-Variablenwert als Geheimnis festlegen. Wenn Sie einen Variablenwert als Geheimnis festlegen, können Sie ihn nicht mehr anzeigen, nachdem Sie ihn festgelegt haben. Azure Pipelines ist so konzipiert, dass keine Geheimniswerte in Ihren Pipelineprotokollen offengelegt werden.
Warnung
Azure Pipelines verschleiert standardmäßig Variablenwerte mit Geheimnissen in Pipelineprotokollen, trotzdem sollten Sie darüber hinaus bewährte Methoden befolgen. Ihre Pipelineschritte haben Zugriff auf alle Variablenwerte, einschließlich Geheimnissen. Wenn Ihre Pipeline einen Schritt enthält, bei dem eine sichere Variable nicht sicher verarbeitet wird, besteht die Möglichkeit, dass die Variable mit dem Geheimnis in den Pipelineprotokollen enthalten ist.
Sie können Benutzern auch gestatten, Variablenwerte zu überschreiben, wenn sie Ihre Pipeline manuell ausführen. Der Wert, den ein Benutzer angibt, wird nur für diese spezielle Pipeline verwendet. Das Überschreiben von Variablen kann nützlich sein, wenn Sie Ihre Pipeline testen.
Verwenden einer Variablen in ihrer Pipeline
Nachdem Sie eine Variable erstellt haben, verwenden Sie eine spezielle Syntax, um in Ihrer YAML-Pipelinedatei auf die Variable zu verweisen:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: $(ServiceConnectionName)
location: $(DeploymentDefaultLocation)
resourceGroupName: $(ResourceGroupName)
csmFile: deploy/main.bicep
overrideParameters: >
-environmentType $(EnvironmentType)
Das Format der Pipelinedefinitionsdatei umfasst eine spezielle $(VariableName)
-Syntax. Mit diesem Ansatz können Sie auf eine beliebige Variable verweisen – ob sie geheim ist oder nicht.
Tipp
Beachten Sie im vorherigen Beispiel, dass der Name der Bicep-Datei nicht in einer Variablen gespeichert ist. Genau wie bei Bicep-Parametern müssen Sie nicht für alles Variablen erstellen. Es empfiehlt sich, Variablen für alles zu erstellen, was sich zwischen Umgebungen ändern kann, sowie für alle geheimen Informationen. Da die Pipeline immer dieselbe Vorlagendatei verwendet, müssen Sie keine Variable für den Pfad erstellen.
Systemvariablen
Azure Pipelines verwendet auch Systemvariablen. Systemvariablen enthalten vordefinierte Informationen, die Sie möglicherweise in Ihrer Pipeline verwenden möchten. Hier sind einige der Systemvariablen aufgeführt, die Sie in Ihrer Pipeline verwenden können:
Build.BuildNumber
ist der eindeutige Bezeichner für Ihre Pipelineausführung. Trotz seines Namens ist derBuild.BuildNumber
-Wert häufig eine Zeichenfolge und keine Zahl. Sie können diese Variable verwenden, um Ihre Azure-Bereitstellung zu benennen, damit Sie die Bereitstellung bis zu der spezifischen Pipelineausführung zurückverfolgen können, die sie ausgelöst hat.Agent.BuildDirectory
ist der Pfad im Dateisystem Ihres Agent-Computers, in dem die Dateien Ihrer Pipelineausführung gespeichert werden. Diese Informationen können nützlich sein, wenn Sie im Build-Agent auf Dateien verweisen möchten.
Erstellen von Variablen in der YAML-Datei Ihrer Pipeline
Zusätzlich zur Verwendung der Azure Pipelines-Weboberfläche zum Erstellen von Variablen können Sie Variablenwerte auch in der YAML-Datei Ihrer Pipeline festlegen. Diese Möglichkeit können Sie nutzen, wenn Sie Werte haben, die nicht geheim sind und die Sie in Ihrem Repository speichern möchten, und wenn Sie die Variablenwerte in der Datei an einem Ort zusammenhalten möchten, damit Sie in der gesamten Pipelinedefinition darauf verweisen können. Mit diesem Ansatz können Sie auch Änderungen an der Variable in Ihrem Versionskontrollsystem nachverfolgen.
Fügen Sie einen Abschnitt variables
hinzu, um eine Variable in Ihrer YAML-Datei festzulegen:
trigger: none
pool:
vmImage: ubuntu-latest
variables:
ServiceConnectionName: 'MyServiceConnection'
EnvironmentType: 'Test'
ResourceGroupName: 'MyResourceGroup'
DeploymentDefaultLocation: 'westus3'
jobs:
- job:
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: $(ServiceConnectionName)
location: $(DeploymentDefaultLocation)
resourceGroupName: $(ResourceGroupName)
csmFile: deploy/main.bicep
overrideParameters: >
-environmentType $(EnvironmentType)
In diesem Pipelinebeispiel sind vier Variablen definiert: ServiceConnectionName
, EnvironmentType
, ResourceGroupName
und DeploymentDefaultLocation
.
Später in diesem Modul sehen Sie, wie Sie an verschiedenen Stellen definierte Variablen in einer einzigen Pipeline kombinieren können.