Esercizio - Aggiungere un'attività di distribuzione Bicep al flusso di lavoro

Completato

È stato creato un flusso di lavoro semplice ed è stata configurata la connessione tra gli ambienti Azure e GitHub. A questo punto si è pronti per distribuire il file Bicep del sito Web in Azure dal flusso di lavoro.

In questo esercizio si vedrà come:

  • Aggiungere un file Bicep al repository.
  • Aggiungere un passaggio del flusso di lavoro per scaricare il codice sorgente del repository nel file system dello strumento di esecuzione.
  • Aggiungere un passaggio del flusso di lavoro per accedere ad Azure.
  • Aggiungere un passaggio del flusso di lavoro per distribuire il file Bicep.
  • Eseguire di nuovo il flusso di lavoro e verificare che il sito Web sia stato distribuito correttamente.

Aggiungere il file Bicep del sito Web al repository GitHub

Hai già preparato il file Bicep del tuo sito Web, che puoi usare per distribuire configurazioni diverse delle risorse del sito Web a seconda dell'ambiente e della configurazione. In questo caso, aggiungerai il file Bicep al tuo repository.

  1. Aprire Esplora risorse di Visual Studio Code.

  2. Nella radice del repository creare una cartella deploy.

  3. Nella cartella deploy creare un nuovo file denominato main.bicep. Assicurarsi di creare il file all'interno della cartella deploy:

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

  4. Copiare il codice seguente nel file 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. Salvare le modifiche apportate al file.

  6. Nel terminale di Visual Studio Code eseguire questo codice per preparare le modifiche per il commit, eseguire il commit e poi eseguire il push delle modifiche nel repository:

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

Sostituire i passaggi del flusso di lavoro

Aggiornare ora la definizione del flusso di lavoro per distribuire il file Bicep in Azure.

  1. In Visual Studio Code aprire il file .github/workflows/workflow.yml.

  2. Nella parte superiore del file, tra on: e jobs: aggiungi una sezione permissions:.

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

    Questa modifica consente al flusso di lavoro di usare un'identità del carico di lavoro.

  3. Rinominare il processo say-hello come deploy:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
    
  4. Per rimuovere il passaggio placeholder dalla definizione del flusso di lavoro, eliminare le ultime due righe del file.

  5. Come primo passaggio si aggiungerà un'attività per estrarre il codice al file system dello strumento di esecuzione. Aggiungere un nuovo passaggio alla fine del file:

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

    Nota

    È consigliabile digitare questo codice invece di copiarlo e incollarlo dal modulo. Prestare attenzione al rientro del file. Se il rientro non è corretto, il file YAML non sarà valido. Visual Studio Code indica eventuali errori tramite righe ondulate.

  6. Sotto il passaggio appena aggiunto, aggiungere un'attività per accedere all'ambiente Azure. Questa attività usa i segreti definiti in precedenza per eseguire l'accesso usando un'identità del carico di lavoro:

    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. Sotto il passaggio appena aggiunto, aggiungerne un altro per eseguire la distribuzione Bicep:

    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 }}
    

    Si noti che questo task usa anche la variabile di ambiente predefinita github.run_number per assegnare un nome alla distribuzione in Azure. Usa anche variabili di ambiente per il nome del gruppo di risorse e per il parametro environmentType nel file Bicep.

  8. Aggiungere queste variabili e i relativi valori nella parte superiore del file del flusso di lavoro, tra permissions: e jobs:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
    
  9. Salvare le modifiche apportate al file. Il file avrà un aspetto simile all'esempio seguente:

    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. Nel terminale di Visual Studio Code preparare per il commit le modifiche, eseguirne il commit nel repository ed eseguirne il push in Azure Repos:

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

Eseguire il flusso di lavoro

A questo punto si è pronti per eseguire il flusso di lavoro.

  1. Nel browser aprire il flusso di lavoro selezionando Actions>deploy-toy-website.

  2. Selezionare Run workflow (Esegui flusso di lavoro)>Run workflow (Esegui flusso di lavoro).

  3. Nell'elenco delle esecuzioni verrà visualizzata una nuova esecuzione del flusso di lavoro. Se non viene visualizzata, aggiornare la pagina del browser.

  4. Selezionare il flusso di lavoro in esecuzione per visualizzare i dettagli dell'esecuzione.

    Attendere il completamento dell'esecuzione.

  5. Selezionare il processo deploy.

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

  6. Selezionare Esegui azure/arm-deploy@v1. Vengono visualizzati i dettagli dell'attività.

  7. Selezionare Esegui azure/arm-deploy@v1 nei dettagli attività.

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

    Si noti che questo passaggio usa le variabili di ambiente aggiunte al file del flusso di lavoro.

  8. Esaminare il resto dell'output del flusso di lavoro.

    Il flusso di lavoro indica che la distribuzione è riuscita.

Verificare la distribuzione

  1. Vai al portale di Azure.

  2. Nel menu a sinistra selezionare Gruppi di risorse.

  3. Selezionare ToyWebsite.

  4. In Panoramica visualizzare lo stato della distribuzione. Viene visualizzata una distribuzione completata.

    Screenshot of the Azure portal that shows the resource group with one successful deployment.

  5. Seleziona il collegamento 1 Riuscita per visualizzare i dettagli della distribuzione.

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

    Si noti che il nome della distribuzione corrisponde al numero di esecuzione del flusso di lavoro in GitHub Actions, perché è stata usata la variabile di ambiente github.run_number per assegnare un nome alla distribuzione.

  6. Per visualizzare le risorse distribuite, selezionare la distribuzione. Per espandere la distribuzione e visualizzare altri dettagli, selezionare Dettagli distribuzione. In questo caso, sono presenti un account di archiviazione, un piano di Servizio app di Azure e un'app.

    Screenshot of the Azure portal that shows the resource group deployment details, with the App Service resources highlighted.