Esercizio - Aggiungere un'attività di distribuzione Bicep alla pipeline

Completato

È stata creata una pipeline semplice ed è stata configurata la connessione tra gli ambienti Azure e Azure Pipelines. A questo punto si è pronti per distribuire il file Bicep del sito Web in Azure dalla pipeline.

In questo esercizio si vedrà come:

  • Aggiungere un file Bicep al repository.
  • Aggiungere un passaggio della pipeline per distribuire il file Bicep.
  • Eseguire di nuovo la pipeline e verificare che il sito Web sia stato distribuito correttamente.

Aggiungere il file Bicep del sito Web al repository Git

Il file Bicep del sito Web è già stato preparato. È possibile usare il file Bicep per distribuire configurazioni diverse delle risorse del sito Web a seconda dell'ambiente e della configurazione. In questo caso, il file Bicep viene aggiunto al repository.

  1. Aprire Esplora risorse di Visual Studio Code.

  2. Nella cartella deploy creare un nuovo file denominato main.bicep. Assicurarsi di creare il file all'interno della cartella deploy e non nella radice del repository:

    Screenshot di Esplora risorse di Visual Studio Code, con il file main.bicep evidenziato nella cartella deploy.

  3. 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('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. Salvare le modifiche apportate al file.

  5. 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 della pipeline

Aggiornare ora la definizione della pipeline per distribuire il file Bicep in Azure usando la connessione al servizio.

  1. In Visual Studio Code aprire il file deploy/azure-pipelines.yml.

  2. Sopra la riga jobs: aggiungere deploymentDefaultLocation per definire una variabile denominata variables::

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Per rimuovere il passaggio script dalla definizione della pipeline, eliminare le ultime due righe del file.

    Suggerimento

    Quando si lavora in Visual Studio Code con l'estensione Azure Pipelines installata, provare a usare la combinazione di tasti CTRL+BARRA SPAZIATRICE. Viene visualizzato un menu di scelta rapida con elementi suggeriti per l'aggiunta nella posizione corrente del cursore.

  4. Nella parte inferiore del file aggiungere un'attività che usa l'attività AzureResourceManagerTemplateDeployment per distribuire il file Bicep:

    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)
    

    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.

    Questo passaggio usa la variabile di sistema $(Build.BuildNumber) per assegnare un nome alla distribuzione. La variabile consente di visualizzare facilmente a quale esecuzione della pipeline corrisponde una distribuzione.

    La proprietà dell'attività location è richiesta dall'attività AzureResourceManagerTemplateDeployment. Specifica l'area di Azure in cui deve essere creato un gruppo di risorse. In questo esercizio è già stato creato un gruppo di risorse e quindi la località specificata qui non è importante. Tuttavia, è comunque necessario fornire il valore. In questo caso, è stato impostato sul valore della variabile deploymentDefaultLocation impostata in un passaggio precedente.

  5. Salvare le modifiche apportate al file. Il file avrà un aspetto simile all'esempio seguente:

    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. 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 deploy/azure-pipelines.yml
    git commit -m 'Add deployment task to pipeline'
    git push
    

Aggiungere variabili della pipeline

  1. Nel browser selezionare Pipeline.

    Screenshot di Azure DevOps che mostra il menu, con Pipelines evidenziato.

  2. Selezionare la pipeline dell'esercizio.

    Screenshot di Azure DevOps che mostra l'elenco delle pipeline, con la pipeline toy-website evidenziata.

  3. Seleziona Modifica

    Screenshot di Azure DevOps che mostra la pipeline, con l'opzione Modifica evidenziata.

  4. Seleziona Variabili.

    Screenshot di Azure DevOps che mostra l'editor della pipeline, con il pulsante Variabili evidenziato.

  5. Selezionare Nuova variabile.

    Screenshot di Azure DevOps che mostra l'editor delle variabili della pipeline, con il pulsante

  6. In Nome immettere ServiceConnectionName. In Valore immettere ToyWebsite.

    Lasciare deselezionate le caselle di controllo e selezionare OK.

    Screenshot di Azure DevOps che mostra l'editor delle variabili della pipeline, con il pulsante OK evidenziato.

  7. Per creare altre variabili, selezionare +.

    Screenshot di Azure DevOps che mostra l'elenco di variabili della pipeline, con il pulsante di aggiunta evidenziato.

    Creare le variabili seguenti usando la stessa procedura con cui è stata creata la variabile ServiceConnectionName:

    Nome variabile Valore
    ResourceGroupName ToyWebsite
    EnvironmentType nonprod
  8. Completare i passaggi di nuovo per creare una variabile denominata DeployToyManualsStorageAccount con valore true. Per questa variabile selezionare la casella di controllo Consenti agli utenti di eseguire l'override di questo valore durante l'esecuzione della pipeline.

    Screenshot di Azure DevOps che mostra l'editor delle variabili della pipeline.

  9. Dopo aver creato tutte e quattro le variabili, selezionare Salva.

    Screenshot di Azure DevOps che mostra l'editor delle variabili della pipeline, con il pulsante Salva evidenziato.

Eseguire la pipeline

A questo punto si è pronti per eseguire la pipeline.

Il modello include un account di archiviazione, usato dal team del sito Web per archiviare i manuali di istruzioni per i giocattoli. Poiché si sta ancora testando l'ambiente, non è necessario distribuire l'account di archiviazione ogni volta che si distribuisce il sito Web. È stato quindi creato un parametro Bicep per controllare se l'account di archiviazione è distribuito. In questo caso, si esegue la pipeline e si esegue l'override della distribuzione in modo che questa volta non distribuisca l'account di archiviazione.

  1. Selezionare Esegui.

    Screenshot di Azure DevOps che mostra la pipeline, con il pulsante Esegui evidenziato.

    Viene visualizzato il riquadro Esegui la pipeline. In questo riquadro è possibile configurare le impostazioni per questa esecuzione specifica della pipeline.

  2. Seleziona Variabili.

    Screenshot di Azure DevOps che mostra la pagina

  3. Selezionare la variabile DeployToyManualsStorageAccount e impostarne il valore su false. Quindi, selezionare Aggiorna.

    Screenshot di Azure DevOps che mostra l'editor delle variabili

  4. Selezionare la freccia Indietro.

    Screenshot di Azure DevOps che mostra la pagina

  5. Per avviare una nuova esecuzione della pipeline, selezionare Esegui. L'avvio della pipeline può richiedere alcuni minuti. Dopo l'avvio della pipeline, il completamento della distribuzione potrebbe richiedere alcuni minuti.

  6. Per aprire il processo, nella sezione Processi selezionare Processo. È possibile monitorare il processo durante l'esecuzione o attendere il completamento del processo per esaminarne la cronologia.

    Attendere il completamento del processo.

  7. Seleziona Mansione.

    Screenshot di Azure DevOps che mostra la pagina del processo, con la voce di menu Processo evidenziata.

  8. Selezionare 1 variabile del tempo di attesa usata.

    Screenshot di Azure DevOps che mostra il log della pipeline, con l'elemento

    Viene visualizzato il valore di override per questa esecuzione della pipeline. Il valore della variabile DeployToyManualsStorageAccount è false perché si è eseguito l'override del valore originale.

  9. Esaminare il resto dell'output della pipeline.

    La pipeline 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 del portale di Azure che mostra il gruppo di risorse con una distribuzione riuscita.

  5. Selezionare 1 completata per visualizzare i dettagli della distribuzione.

    Screenshot del portale di Azure che mostra la cronologia di distribuzione del gruppo di risorse con la distribuzione evidenziata.

    Il nome della distribuzione corrisponde al nome dell'esecuzione della pipeline.

  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 piano di Servizio app di Azure e un'app.

    Screenshot del portale di Azure che mostra i dettagli di distribuzione del gruppo di risorse, con le risorse del servizio app evidenziate.