Condividi tramite


Eseguire la distribuzione nel servizio app di Azure usando Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022

Questo articolo illustra come usare Azure Pipelines per compilare, testare e distribuire automaticamente l'app Web in Servizio app di Azure. È possibile configurare una pipeline di integrazione continua e recapito continuo (CI/CD) eseguita ogni volta che si archivia una modifica del codice in un ramo designato del repository.

Le pipeline sono costituite da fasi, processi e passaggi. Un passaggio è il blocco predefinito più piccolo di una pipeline e può essere uno script o un'attività, ossia una script predefinito. Per altre informazioni sui concetti chiave e sui componenti che costituiscono una pipeline, vedere Concetti chiave di Azure Pipelines.

È possibile usare l'attività App Web di Azure nella pipeline per eseguire la distribuzione in Servizio app. Per scenari più complessi, ad esempio l'uso di parametri XML nelle distribuzioni, è possibile usare l'attività Distribuzione di Servizio app di Azure.

Prerequisiti

Importante

Durante le procedure di GitHub, potrebbe essere richiesto di creare una connessione al servizio GitHub o di essere reindirizzati a GitHub per accedere, installare l'app GitHub di Azure Pipelines, autorizzare Azure Pipelines o eseguire l'autenticazione alle organizzazioni GitHub. Seguire le istruzioni visualizzate per completare i processi necessari. Per altre informazioni, vedere Accedere ai repository GitHub.

Creare una pipeline

Gli esempi di codice in questa sezione sono relativi a un'app Web ASP.NET Core. È possibile adattare le istruzioni per altri framework. Per altre informazioni sul supporto dell'ecosistema di Azure Pipelines, vedere Esempi di ecosistema di Azure Pipelines.

Definire una pipeline creando un file YAML azure-pipelines.yml nel repository di codice.

  1. Nel menu di spostamento a sinistra per il progetto Azure DevOps selezionare Pipelines.
  2. Nella pagina Pipelines selezionare Nuova pipeline o Crea pipeline se la pipeline è la prima nel progetto.
  3. Nella schermata Dove è il codice, selezionare il percorso del codice sorgente, Azure Repos Git o GitHub. Se necessario, accedere a GitHub.
  4. Nella schermata Selezionare un repository selezionare il repository di codice.
  5. Nella schermata Configura la pipeline, selezionare Pipeline di base.

Aggiungere l'attività .NET Core (DotNetCoreCLI@2) alla pipeline e compilare e pubblicare l'app.

  1. Nella schermata Rivedere il codice YAML della pipeline, eliminare tutto il codice dopo la riga steps:.
  2. Selezionare la fine del file, quindi selezionare Mostra assistente a destra.
  3. In Attività selezionare .NET Core.
  4. Nella schermata di configurazione di .NET Core, in Connessione di Azure Resource Manager selezionare la sottoscrizione di Azure, quindi selezionare Autorizza per creare la connessione al servizio necessaria.
  5. In Comando selezionare Pubblica.
  6. Assicurarsi che le caselle di controllo Pubblica progetti Web e Comprimi progetti pubblicati siano selezionate, quindi selezionare Aggiungi.
  7. L'attività viene visualizzata nella pipeline YAML. Rivedere il codice YAML per vedere cosa fa. Quando si è pronti, selezionare Salva ed esegui, quindi selezionare nuovamente Salva ed esegui.
  8. Nella schermata Riepilogo della compilazione, in Processi selezionare il collegamento Autorizzazione necessaria. Nella schermata Controlli selezionare Consenti, quindi selezionare di nuovo Consenti. La concessione dell'autorizzazione consente l'uso della connessione al servizio autorizzata per tutte le esecuzioni di questa pipeline.

La pipeline pubblica il file ZIP di distribuzione come artefatto di Azure per l'attività di distribuzione da usare nel passaggio successivo.

Aggiungere l’attività di distribuzione

Dopo l'esecuzione della pipeline, aggiungere l'attività di distribuzione.

  1. Nella schermata Riepilogo esecuzione pipeline selezionare l'icona Altre azioni in alto a destra, quindi selezionare Modifica pipeline.
  2. Selezionare la fine del file YAML, quindi selezionare Mostra assistente se l'elenco Attività non viene visualizzato.
  3. Nell'elenco Attività cercare e selezionare l'attività App Web di Azure. In alternativa, è possibile usare l'attività Distribuzione di Servizio app di Azure.
  4. Nella schermata di configurazione di App Web di Azure, in Sottoscrizione di Azure selezionare la stessa connessione al servizio configurata per il passaggio precedente. Non è necessario autorizzare nuovamente questa connessione.
  5. Per Tipo di app selezionare App Web di Azure in Linux o App Web di Azure in Windows, a seconda del codice.
  6. In Nome app selezionare o immettere il nome dell'app di Servizio app.
  7. Seleziona Aggiungi.
  8. Selezionare Convalida e salva, quindi selezionare Salva.
  9. Selezionare Esegui, quindi selezionare nuovamente Esegui.

La pipeline YAML completa dovrebbe essere simile al codice seguente:

trigger:
- <branch-specification>

pool:
  vmImage: <agent-specification>

steps:
- task: DotNetCoreCLI@2
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    command: 'publish'
    publishWebProjects: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    appType: 'webApp'
    appName: '<your-app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    deploymentMethod: 'auto'  
  • azureSubscription: nome della connessione al servizio autorizzato per l'abbonamento ad Azure.
  • appName: nome dell'app esistente.
  • package: percorso file del pacchetto o della cartella in cui sono presenti i contenuti di Servizio app. Sono supportati caratteri jolly.

Esempi

Le sezioni seguenti illustrano la creazione di diversi tipi di pipeline di compilazione e versione.

Eseguire la distribuzione in un'applicazione virtuale

L'attività App Web di Azure viene distribuita nell'applicazione radice nell'app Web di Azure. È possibile eseguire la distribuzione in un'applicazione virtuale specifica usando la proprietà VirtualApplication dell'attività Distribuzione di Servizio app di Azure.

- task: AzureRmWebAppDeployment@5
  inputs:
    VirtualApplication: '<name of virtual application>'

VirtualApplication è il nome dell'applicazione virtuale configurata nel portale di Azure. Per altre informazioni, vedere Configurare un'app del servizio app nel portale di Azure.

Eseguire la distribuzione in uno slot

Nell’esempio seguente viene illustrato come eseguire la distribuzione in uno slot di staging e quindi passare a uno slot di produzione:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: webAppLinux
    appName: '<app-name>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging
    package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<service-connection-name>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: connessione al servizio di Azure.
  • appType: tipo di app facoltativo, ad esempio webAppLinux per la distribuzione in un'app Web in Linux.
  • appName: nome dell'app esistente.
  • deployToSlotOrASE: booleano. Indica se eseguire la distribuzione in uno slot di distribuzione esistente o in un ambiente di Servizio app.
  • resourceGroupName: nome del gruppo di risorse in cui eseguire la distribuzione, obbligatorio se deployToSlotOrASE è true.
  • slotName: nome dello slot in cui eseguire la distribuzione, obbligatorio se deployToSlotOrASE è true. Il valore predefinito è production.
  • package: percorso file del pacchetto o della cartella in cui sono presenti i contenuti dell'app. Sono supportati caratteri jolly.
  • SourceSlot: slot inviato all'ambiente di produzione quando SwapWithProduction è true.
  • SwapWithProduction: booleano. Indica se scambiare il traffico dello slot di origine con quello di produzione.

Eseguire la distribuzione in più app Web

È possibile usare processi nel file YAML per configurare una pipeline di distribuzioni. L’utilizzo dei processi consente di controllare l’ordine della distribuzione in più app Web.

jobs:
- job: buildandtest
  pool:
    vmImage: ubuntu-latest
 
  steps:
  # publish an artifact called drop
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)' 
      artifactName: drop
  
  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<staging-app-name>'
      deployToSlotOrASE: true
      resourceGroupName: <group-name>
      slotName: 'staging'
      package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- job: deploy
  dependsOn: buildandtest
  condition: succeeded()

  pool: 
    vmImage: ubuntu-latest
  
  steps:
    # download the artifact drop from the previous job
  - task: DownloadPipelineArtifact@2
    inputs:
      source: 'current'
      artifact: 'drop'
      path: '$(Pipeline.Workspace)'

  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<production-app-name>'
      resourceGroupName: <group-name>
      package: '$(Pipeline.Workspace)/**/*.zip'

Eseguire la distribuzione in modo condizionale

Per distribuire in modo condizionale in YAML, usare una delle tecniche seguenti:

  • Aggiungere una condizione al passaggio.
  • Isolare i passaggi di distribuzione in un processo separato e aggiungere una condizione a tale processo.

L'esempio seguente illustra come usare le condizioni dei passaggi per distribuire solo le compilazioni completate che hanno origine dal ramo principale:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Per altre informazioni sulle condizioni, vedere Specificare le condizioni.

Eseguire la distribuzione con Distribuzione Web

L'attività Distribuzione di Servizio app di Azure può essere distribuita in Servizio app usando Distribuzione Web.

trigger:
- main

pool:
  vmImage: windows-latest

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration)'
    zipAfterPublish: true

- task: AzureRmWebAppDeployment@5
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<service-connection-name>'
    appType: 'webApp'
    WebAppName: '<app-name>'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
    enableCustomDeployment: true
    DeploymentType: 'webDeploy'

Domande frequenti

Qual è la differenza tra le attività AzureWebApp e AzureRmWebAppDeployment?

L'attività App Web di Azure è il modo più semplice per eseguire la distribuzione in un'app Web di Azure. Per impostazione predefinita, si distribuisce l'applicazione radice nell'app Web di Azure.

L'attività di Distribuzione di Servizio app di Azure () può gestire altri scenari personalizzati, ad esempio:

Nota

L'attività Trasformazione file separata supporta anche trasformazioni di file e sostituzione di variabili da usare in Azure Pipelines. È possibile usare l'attività Trasformazione file per applicare trasformazioni di file e sostituzioni di variabili in qualsiasi file di configurazione e parametri.

Perché viene visualizzato il messaggio "Pacchetto o percorso cartella del servizio app non valido fornito"?

Nelle pipeline YAML, potrebbe verificarsi una mancata corrispondenza tra la posizione in cui viene salvato il pacchetto Web compilato e la posizione in cui l'attività di distribuzione lo sta cercando. L'attività AzureWebApp predefinita seleziona il pacchetto Web per la distribuzione da $(System.DefaultWorkingDirectory)/**/*.zip. Se il pacchetto Web viene depositato altrove, modificare il valore del parametro package.

Perché viene visualizzato il messaggio "Le opzioni di pubblicazione tramite webdeploy sono supportate solo quando si utilizza un agente Windows"?

Questo errore si verifica nell'attività AzureRmWebAppDeployment quando si configura l'attività per la distribuzione con Distribuzione Web, ma l'agente non esegue Windows. Verificare che il parametro YAML vmImage specifichi Windows.

pool:
  vmImage: windows-latest

Perché Distribuzione Web non funziona quando si disabilita l'autenticazione di base?

Per informazioni sulla risoluzione dei problemi relativi all'uso dell'autenticazione di Microsoft Entra ID con l'attività Distribuzione di Servizio app di Azure, vedere Non è possibile eseguire la distribuzione Web nel Servizio app di Azure utilizzando l'autenticazione di Microsoft Entra ID dall'agente di Windows.