Übung: Hinzufügen einer Bicep-Bereitstellungsaufgabe zur Pipeline

Abgeschlossen

Sie haben eine einfache Pipeline erstellt und Ihre Azure- und Azure Pipelines-Umgebungen für eine Verbindung konfiguriert. Nun sind Sie bereit, die Bicep-Datei Ihrer Website über Ihre Pipeline in Azure bereitzustellen.

In dieser Übung führen Sie die folgenden Schritte aus:

  • Fügen Sie Ihrem Repository eine Bicep-Datei hinzu.
  • Fügen Sie einen Pipelineschritt hinzu, um Ihre Bicep-Datei bereitzustellen.
  • Führen Sie Ihre Pipeline erneut aus, und überprüfen Sie, ob ihre Website erfolgreich bereitgestellt wurde.

Hinzufügen der Bicep-Datei Ihrer Website zum Git-Repository

Sie haben die Bicep-Datei Ihrer Website bereits vorbereitet. Sie können die Bicep-Datei je nach Umgebung und Konfiguration zum Bereitstellen verschiedener Konfigurationen der Websiteressourcen verwenden. Hier fügen Sie Ihre Bicep-Datei zu Ihrem Repository hinzu.

  1. Öffnen Sie den Visual Studio Code-Explorer.

  2. Erstellen Sie im Ordner deploy eine neue Datei namens main.bicep. Achten Sie darauf, dass Sie die Datei im Ordner deploy und nicht im Stammverzeichnis des Repositorys erstellen:

    Screenshot des Visual Studio Code-Explorers mit hervorgehobener Datei „main.bicep“ im Ordner „deploy“

  3. Kopieren Sie den folgenden Code in die Datei main.bicep:

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The type of environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    @description('Indicates whether to deploy the storage account for toy manuals.')
    param deployToyManualsStorageAccount bool
    
    @description('A unique suffix to add to resource names that need to be globally unique.')
    @maxLength(13)
    param resourceNameSuffix string = uniqueString(resourceGroup().id)
    
    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website-plan'
    var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}'
    
    // Define the SKUs for each component based on the environment type.
    var environmentConfigurationMap = {
      nonprod: {
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
    var toyManualsStorageAccountConnectionString = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : ''
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  4. Speichern Sie die geänderte Datei.

  5. Führen Sie im Visual Studio Code-Terminal folgenden Code aus, um die Änderungen zu stagen, zu committen und in Ihr Repository zu pushen:

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

Ersetzen der Pipelineschritte

Als Nächstes aktualisieren Sie Ihre Pipelinedefinition so, dass Ihre Bicep-Datei mithilfe der Dienstverbindung in Azure bereitgestellt wird.

  1. Öffnen Sie in Visual Studio Code die Datei deploy/azure-pipelines.yml.

  2. Fügen Sie vor der Zeile jobs:variables: hinzu, um eine Variable mit dem Namen deploymentDefaultLocation zu definieren:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Entfernen Sie den Schritt script aus der Pipelinedefinition, indem Sie die unteren beiden Zeilen in der Datei löschen.

    Tipp

    Wenn Sie in Visual Studio Code arbeiten und die Azure Pipelines-Erweiterung installiert haben, versuchen Sie, die Tastenkombination STRG+LEERTASTE zu verwenden. Dadurch wird ein Kontextmenü mit vorgeschlagenen Elementen angezeigt, die an der aktuellen Cursorposition hinzugefügt werden können.

  4. Fügen Sie am unteren Rand der Datei eine Aufgabe hinzu, die AzureResourceManagerTemplateDeployment verwendet, um Ihre Bicep-Datei bereitzustellen:

    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    

    Hinweis

    Es empfiehlt sich, den Code selbst einzugeben, anstatt ihn aus diesem Modul zu kopieren und einzufügen. Achten Sie auf den Einzug der Datei. Wenn Ihr Einzüge nicht korrekt sind, ist Ihre YAML-Datei ungültig. Visual Studio Code zeigt Fehler mittels Wellenlinien an.

    In diesem Schritt wird die Systemvariable $(Build.BuildNumber) verwendet, um die Bereitstellung zu benennen. Mithilfe der Variable können Sie leicht erkennen, welcher Pipelineausführung eine Bereitstellung entspricht.

    Die Aufgabeneigenschaft location wird von der Aufgabe AzureResourceManagerTemplateDeployment benötigt. Sie gibt die Azure-Region an, in der eine Ressourcengruppe erstellt werden soll. In dieser Übung haben Sie bereits eine Ressourcengruppe erstellt, sodass der hier angegebene Standort keine Rolle spielt. Sie müssen den Wert aber dennoch angeben. Hier legen Sie ihn auf den Wert der Variablen deploymentDefaultLocation fest, die Sie in einem vorherigen Schritt angegeben haben.

  5. Speichern Sie die geänderte Datei. Die Datei sollte wie dieses Beispiel aussehen:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    
  6. Stagen Sie Ihre Änderungen im Visual Studio Code-Terminal, committen Sie sie in Ihrem Repository, und pushen Sie sie in Azure Repos:

    git add deploy/azure-pipelines.yml
    git commit -m 'Add deployment task to pipeline'
    git push
    

Pipelinevariablen hinzufügen

  1. Wählen Sie in Ihrem Browser Pipelines aus.

    Screenshot von Azure DevOps mit dem Menü und der hervorgehobenen Option „Pipelines“

  2. Wählen Sie Ihre Pipeline aus.

    Screenshot von Azure DevOps mit der Liste der Pipelines und hervorgehobener Pipeline „toy-website“

  3. Wählen Sie Bearbeiten aus.

    Screenshot von Azure DevOps mit der Pipeline und der hervorgehobene Option „Bearbeiten“

  4. Wählen Sie Variablen aus.

    Screenshot von Azure DevOps mit dem Pipeline-Editor und hervorgehobener Schaltfläche „Variablen“

  5. Wählen Sie New variable aus.

    Screenshot von Azure DevOps mit dem Editor für Pipelinevariablen und hervorgehobener Schaltfläche „Neue Variable“

  6. Geben Sie in Name den Namen ServiceConnectionName ein. Geben Sie in Wert den Namen ToyWebsite ein.

    Lassen Sie die Kontrollkästchen deaktiviert, und wählen Sie OK aus.

    Screenshot von Azure DevOps mit dem Editor für Pipelinevariablen und hervorgehobener Schaltfläche „OK“

  7. Wählen Sie + aus, um weitere Variablen zu erstellen.

    Screenshot von Azure DevOps mit dem Editor für Pipelinevariablen und hervorgehobener Plusschaltfläche (+)

    Erstellen Sie die folgenden Variablen auf die gleiche Weise, wie Sie die ServiceConnectionName-Variable erstellt haben:

    Variablenname Wert
    ResourceGroupName ToyWebsite
    EnvironmentType nonprod
  8. Führen Sie den Vorgang erneut, um eine Variable namens DeployToyManualsStorageAccount mit dem Wert true zu erstellen. Aktivieren Sie für diese Variable das Kontrollkästchen Benutzern erlauben, diesen Wert beim Ausführen dieser Pipeline zu überschreiben.

    Screenshot von Azure DevOps mit dem Editor für Pipelinevariablen

  9. Wenn Sie alle vier Variablen erstellt haben, wählen Sie Speichern aus.

    Screenshot von Azure DevOps mit dem Editor für Pipelinevariablen und hervorgehobener Schaltfläche „Speichern“

Ausführen Ihrer Pipeline

Jetzt sind Sie bereit, Ihre Pipeline auszuführen.

Ihre Vorlage umfasst ein Speicherkonto, das Ihr Websiteteam zum Speichern von Gebrauchsanweisungen für Spielzeug verwendet. Da Sie Ihre Umgebung immer noch testen, müssen Sie das Speicherkonto nicht jedes Mal bereitstellen, wenn Sie die Website bereitstellen. Daher haben Sie einen Bicep-Parameter erstellt, mit dem Sie steuern, ob das Speicherkonto bereitgestellt wird. Hier führen Sie die Pipeline aus und überschreiben die Bereitstellung, damit das Speicherkonto diesmal nicht bereitgestellt wird.

  1. Klicken Sie auf Run (Ausführen).

    Screenshot von Azure DevOps mit der Pipeline und der hervorgehobenen Schaltfläche „Ausführen“

    Der Bereich Pipeline ausführen wird angezeigt. In diesem Bereich können Sie Einstellungen für diese spezifische Ausführung der Pipeline konfigurieren.

  2. Wählen Sie Variablen aus.

    Screenshot der Azure DevOps-Seite „Pipeline ausführen“ und hervorgehobenem Menü „Variablen“

  3. Wählen Sie die DeployToyManualsStorageAccount-Variable aus, und ändern Sie ihren Wert in false. Wählen Sie dann Aktualisieren aus.

    Screenshot von Azure DevOps mit dem Variablen-Editor für Pipelineausführungen und hervorgehobener Schaltfläche „Aktualisieren“

  4. Wählen Sie den Zurückpfeil aus.

    Screenshot der Azure DevOps-Seite „Pipeline ausführen“ und hervorgehobenem Pfeil nach links („Zurück“)

  5. Wählen Sie Ausführen aus, um eine neue Pipelineausführung zu starten. Das Starten der Pipeline kann einige Minuten dauern. Nachdem die Pipeline gestartet wurde, kann es einige Minuten dauern, bis die Bereitstellung abgeschlossen ist.

  6. Um den Auftrag zu öffnen, wählen Sie im Abschnitt Aufträge die Option Auftrag aus. Sie können den Auftrag während der Ausführung überwachen oder warten, bis der Auftrag abgeschlossen ist, um seinen Verlauf zu überprüfen.

    Warten Sie auf den Abschluss des Auftrags.

  7. Wählen Sie Auftrag aus.

    Screenshot der Azure DevOps-Seite „Aufträge“ mit hervorgehobenem Menüelement „Auftrag“

  8. Wählen Sie 1 Warteschlangenzeitvariable verwendet aus.

    Screenshot von Azure DevOps mit angezeigtem Pipelineprotokoll und hervorgehobenem Element „1 Warteschlangenzeitvariable verwendet“

    Der überschriebene Wert für diese Pipelineausführung wird angezeigt. Der Wert der Variable DeployToyManualsStorageAccount ist false, da Sie den ursprünglichen Wert überschrieben haben.

  9. Untersuchen Sie den Rest der Pipelineausgabe.

    Die Pipeline zeigt eine erfolgreiche Bereitstellung an.

Überprüfen der Bereitstellung

  1. Öffnen Sie das Azure-Portal.

  2. Wählen Sie im Menü auf der linken Seite die Option Ressourcengruppen aus.

  3. Wählen Sie die Option ToyWebsite aus.

  4. Unter Übersicht können Sie den Bereitstellungsstatus anzeigen. Es wird angezeigt, dass eine Bereitstellung erfolgreich war.

    Screenshot des Azure-Portals mit angezeigter Ressourcengruppe mit einer erfolgreichen Bereitstellung

  5. Wählen Sie 1 Succeeded (1 erfolgreich) aus, um die Details der Bereitstellung anzuzeigen.

    Screenshot des Azure-Portals mit angezeigtem Bereitstellungsverlauf der Ressourcengruppe und hervorgehobener Bereitstellung

    Der Bereitstellungsname ist mit dem Namen der Pipelineausführung identisch.

  6. Wählen Sie die Bereitstellung aus, um die Ressourcen anzuzeigen, die bereitgestellt wurden. Um die Bereitstellung zu erweitern und weitere Details anzuzeigen, wählen Sie Bereitstellungsdetails aus. In diesem Fall gibt es einen Azure App Service-Plan und eine App.

    Screenshot des Azure-Portals mit angezeigten Bereitstellungsdetails zur Ressourcengruppe und hervorgehobenen App Service-Ressourcen