Ü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 of the Visual Studio Code Explorer, with the main dot bicep file highlighted and located in the deploy folder.

  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 of Azure DevOps that shows the menu, with Pipelines highlighted.

  2. Wählen Sie Ihre Pipeline aus.

    Screenshot of Azure DevOps that shows the pipelines list, with the toy-website pipeline highlighted.

  3. Wählen Sie Bearbeiten aus.

    Screenshot of Azure DevOps that shows the pipeline, with Edit highlighted.

  4. Wählen Sie Variablen aus.

    Screenshot of Azure DevOps that shows the pipeline editor, with the Variables button highlighted.

  5. Wählen Sie New variable aus.

    Screenshot of Azure DevOps that shows the pipeline variable editor, with the 'New variable' button highlighted.

  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 of Azure DevOps that shows the pipeline variable editor, with the OK button highlighted.

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

    Screenshot of Azure DevOps that shows the pipeline variable list, with the plus button highlighted.

    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 of Azure DevOps that shows the pipeline variable editor.

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

    Screenshot of Azure DevOps that shows the pipeline variable editor, with the Save button highlighted.

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 of Azure DevOps that shows the pipeline, with the Run button highlighted.

    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 of Azure DevOps that shows the 'Run pipeline' page, with the Variables menu item highlighted.

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

    Screenshot of Azure DevOps that shows the 'Run pipeline' variable editor, with the Update button highlighted.

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

    Screenshot of Azure DevOps that shows the 'Run pipeline' page, with the back arrow highlighted.

  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 of Azure DevOps that shows the job page, with the Job menu item highlighted.

  8. Wählen Sie 1 Warteschlangenzeitvariable verwendet aus.

    Screenshot of Azure DevOps that shows the pipeline log, with the '1 queue time variable used' item highlighted.

    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 of the Azure portal that shows the resource group with one successful deployment.

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

    Screenshot of the Azure portal that shows the resource group deployment history, with the deployment highlighted.

    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 of the Azure portal that shows the resource group deployment details, with the App Service resources highlighted.