Übung: Hinzufügen einer Bicep-Bereitstellungsaktion zum Workflow

Abgeschlossen

Sie haben einen einfachen Workflow erstellt und Ihre Azure- und GitHub-Umgebungen für eine Verbindung konfiguriert. Nun sind Sie bereit, die Bicep-Datei Ihrer Website über Ihren Workflow 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 Workflowschritt hinzu, um den Quellcode aus Ihrem Repository in das Dateisystem des Runners herunterzuladen.
  • Hinzufügen eines Workflowschritts für die Anmeldung bei Azure
  • Hinzufügen eines Workflowschritts für die Bereitstellung Ihrer Bicep-Datei
  • Erneutes Ausführen Ihres Workflows und Überprüfen der ordnungsgemäßen Bereitstellung Ihrer Website

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

Sie haben die Bicep-Datei Ihrer Website bereits vorbereitet, die je nach Umgebung und Konfiguration zum Bereitstellen verschiedener Konfigurationen der Websiteressourcen verwendet werden kann. Hier fügen Sie Ihre Bicep-Datei Ihrem Repository hinzu.

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

  2. Erstellen Sie im Stamm Ihres Repositorys einen Ordner deploy.

  3. Erstellen Sie im Ordner deploy eine neue Datei namens main.bicep. Achten Sie darauf, dass Sie die Datei im Ordner deploy erstellen:

    Screenshot of the Visual Studio Code Explorer, with the main dot bicep file highlighted and located in the deploy folder.

  4. 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('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 = 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}'
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  5. Speichern Sie die geänderte Datei.

  6. 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 Workflowschritte

Als Nächstes aktualisieren Sie Ihre Workflowdefinition, um Ihre Bicep-Datei in Azure bereitzustellen.

  1. Öffnen Sie in Visual Studio Code die Datei .github/workflows/workflow.yml.

  2. Fügen Sie oben in der Datei zwischen on: und jobs: einen permissions:-Abschnitt hinzu.

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    

    Durch diese Änderung kann der Workflow eine Workloadidentität verwenden.

  3. Benennen Sie den say-hello-Auftrag um in deploy:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
    
  4. Entfernen Sie den Schritt placeholder aus der Workflowdefinition, indem Sie die unteren beiden Zeilen in der Datei löschen.

  5. Im ersten Schritt fügen Sie einen Task hinzu, um den Code in das Dateisystem des Runners auszuchecken. Fügen Sie am Ende der Datei einen neuen Schritt hinzu:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
    

    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.

  6. Fügen Sie unter dem soeben hinzugefügten Schritt einen Task hinzu, um sich bei Ihrer Azure-Umgebung anzumelden. Diese Aufgabe verwendet die zuvor definierten Geheimnisse, um sich mithilfe einer Workloadidentität anzumelden:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  7. Fügen Sie unter dem soeben hinzugefügten Schritt einen weiteren Schritt hinzu, um die Bicep-Bereitstellung durchzuführen:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    

    Beachten Sie, dass der Task die Standardumgebungsvariable github.run_number verwendet, um die Bereitstellung in Azure zu benennen. Er verwendet auch Umgebungsvariablen für den Ressourcengruppennamen und für den environmentType-Parameter in der Bicep-Datei.

  8. Fügen Sie diese Variablen mit ihren Werten am Anfang Ihrer Workflowdatei zwischen permissions: und jobs hinzu:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
    
  9. Speichern Sie die geänderte Datei. Die Datei sollte wie dieses Beispiel aussehen:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT }}
    
  10. Stagen Sie Ihre Änderungen im Visual Studio Code-Terminal, committen Sie sie in Ihrem Repository, und pushen Sie sie in Azure Repos:

    git add .
    git commit -m 'Add Azure CLI tasks to workflow'
    git push
    

Ausführen Ihres Workflows

Jetzt sind Sie bereit, Ihren Workflow auszuführen.

  1. Öffnen Sie den Workflow in Ihrem Browser, indem Sie Aktionen>deploy-toy-website auswählen.

  2. Wählen Sie Workflow ausführen>Workflow ausführen aus.

  3. Eine neue Ausführung Ihres Workflows wird in der Ausführungsliste angezeigt. Falls sie nicht angezeigt wird, aktualisieren Sie Ihre Browserseite.

  4. Wählen Sie den ausgeführten Workflow aus, um Details zur Ausführung anzuzeigen.

    Warten Sie, bis die Ausführung beendet ist.

  5. Wählen Sie den Auftrag deploy (bereitstellen) aus.

    Screenshot of the GitHub interface showing the run page, with the deploy job highlighted.

  6. Wählen Sie Run azure/arm-deploy@v1 aus. Dadurch werden die Taskdetails angezeigt.

  7. Wählen Sie in den Aufgabendetails Run azure/arm-deploy@v1 aus.

    Screenshot of the GitHub interface showing the workflow log, with the 'environment variables' highlighted.

    Beachten Sie, dass bei diesem Schritt die Umgebungsvariablen verwendet werden, die Sie der Workflowdatei hinzugefügt haben.

  8. Untersuchen Sie den Rest der Workflowausgabe.

    Der Workflow 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 neben den Link 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.

    Beachten Sie, dass der Name der Bereitstellung der Ausführungsnummer des Workflows in GitHub Actions entspricht, da Sie die Umgebungsvariable github.run_number zum Benennen Ihrer Bereitstellung verwendet haben.

  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 ein Speicherkonto, 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.