Condividi tramite


Eseguire la distribuzione nel servizio app di Azure usando Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Usa Azure Pipelines per distribuire automaticamente la tua app Web su Servizio app di Azure a ogni build riuscito. Azure Pipelines consente di compilare, testare e distribuire con integrazione continua e recapito continuo (CI/CD) usando Azure DevOps.

Le pipeline YAML vengono definite usando un file YAML nel repository. Un passaggio è il blocco costitutivo più piccolo di una pipeline e può essere uno script o un'attività (script preconfezionato). Informazioni su concetti chiave e componenti che costituiscono una pipeline.

Usare l'attività App Web di Azure (AzureWebApp) per eseguire la distribuzione nel servizio app di Azure nella pipeline. Per scenari più complessi, ad esempio quando è necessario usare i parametri XML nella distribuzione, è possibile usare l'attività AzureRmWebAppDeploymentdi distribuzione del servizio app di Azure .

Prerequisiti:

1. Crea una pipeline per il tuo stack

Gli esempi di codice in questa sezione presuppongono che si stia distribuendo un'app Web ASP.NET. È possibile adattare le istruzioni per altri framework.

Altre informazioni sul supporto dell’ecosistema di Azure Pipelines.

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Passare a Pipeline e selezionare Nuova pipeline.

  3. Quando richiesto, selezionare il percorso del codice sorgente: Git Azure Repos o GitHub.

    Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.

  4. Quando viene visualizzato l’elenco dei repository, selezionare il tuo repository.

  5. È possibile che si venga reindirizzati a GitHub per installare l'app Azure Pipelines. In tal caso, selezionare Approva e installa.

  6. Quando viene visualizzata la scheda Configura, selezionare ASP.NET Core.

  7. Quando viene visualizzata la nuova pipeline, osserva il YAML per vedere cosa fa. Quando si è pronti, selezionare Salva ed esegui.

2. Aggiungere l’attività di distribuzione

  1. Selezionare la fine del file YAML e quindi selezionare Mostra assistente.

  2. Utilizzare Assistente attività per aggiungere l’attività App Web di Azure.

    In alternativa, è possibile aggiungere l'attività di distribuzione AzureRmWebAppDeploymentdel servizio app di Azure.

  3. Scegliere la sottoscrizione di Azure. Assicurarsi di selezionare Autorizza per autorizzare la connessione. L’autorizzazione crea la connessione al servizio richiesta.

  4. Seleziona il tipo di app, il nome dell’app e lo stack di runtime in base all'app del Servizio App. Il codice YAML completo dovrebbe essere simile al seguente.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        publishWebProjects: true
    - task: AzureWebApp@1
      inputs:
        azureSubscription: '<service-connection-name>'
        appType: 'webAppLinux'
        appName: '<app-name>'
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    
    • azureSubscription: nome della connessione al servizio autorizzato per l'abbonamento ad Azure.
    • appName: nome dell'app esistente.
    • package: percorso del file del pacchetto o di una cartella contenente il contenuto del servizio app. Sono supportati caratteri jolly.

Esempio: distribuire un’app .NET

Per distribuire un pacchetto Web .zip (ad esempio, da un'app Web ASP.NET) a un'app Web di Azure, usare il frammento di codice seguente per distribuire la compilazione in un'app.

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: 'webAppLinux'
    appName: '<app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
  • azureSubscription: la sottoscrizione di Azure.
  • appType: tipo di applicazione Web.
  • appName: nome del servizio app esistente.
  • package: percorso del file del pacchetto o di una cartella contenente il contenuto del servizio app. Sono supportati caratteri jolly.

Esempio: Eseguire la distribuzione in un'applicazione virtuale

Per impostazione predefinita, la distribuzione si verifica nell'applicazione radice nell'app Web di Azure. È possibile eseguire la distribuzione in un'applicazione virtuale specifica usando la VirtualApplication proprietà dell'attività AzureRmWebAppDeploymentdi distribuzione del servizio app di Azure :

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

Esempio: 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>'
    appType: webAppLinux
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: la sottoscrizione di Azure.
  • appType: (Facoltativo) Usare webAppLinux per eseguire la distribuzione in un'app Web in Linux.
  • appName: nome del servizio app esistente.
  • deployToSlotOrASE*: booleano. Eseguire la distribuzione in uno slot di distribuzione esistente o in un ambiente del servizio app di Azure.
  • resourceGroupName: nome del gruppo di risorse. Obbligatorio se deployToSlotOrASE è true.
  • slotName: nome dello slot, che per impostazione predefinita è production. Obbligatorio se deployToSlotOrASE è true.
  • package: percorso del file del pacchetto o di una cartella contenente il contenuto del servizio app. Sono supportati caratteri jolly.
  • SourceSlot: slot inviato all'ambiente di produzione quando SwapWithProduction è true.
  • SwapWithProduction: booleano. Scambiare il traffico dello slot di origine con quello di produzione.

Esempio: 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'

Esempio: distribuire in modo condizionale

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

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

L’esempio seguente illustra come usare le condizioni dei passaggi per distribuire solo le compilazioni 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 condizioni.

Esempio: Distribuire con Web Deploy

L'attività AzureRmWebAppDeployment di distribuzione del servizio app di Azure può essere distribuita nel 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@4
  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 AzureAzureWebApp è il modo più semplice per eseguire la distribuzione su un'app web di Azure. Per impostazione predefinita, la distribuzione si verifica nell'applicazione radice nell'app Web di Azure.

L’attività di distribuzione del Servizio app di Azure (AzureRmWebAppDeployment) può gestire scenari più 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, a seconda della pipeline, 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. Ad esempio, l’attività AzureWebApp seleziona il pacchetto Web per la distribuzione. L'attività AzureWebApp potrebbe apparire in $(System.DefaultWorkingDirectory)/**/*.zip. Se il pacchetto Web viene depositato altrove, modificare il valore 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à quando si configura l'attività AzureRmWebAppDeployment per la distribuzione tramite Distribuzione Web, ma l'agente non esegue Windows. Verificare che YAML includa un codice simile al seguente:

pool:
  vmImage: windows-latest

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

Per informazioni sulla risoluzione dei problemi per far funzionare l'autenticazione di Microsoft Entra ID con l'attività AzureRmWebAppDeployment, vedere Non riesco a distribuire tramite Web nel servizio app di Azure usando l'autenticazione di Microsoft Entra ID dall'agente Windows.