Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
Un’app del Servizio app di Azure funzionante con codice ospitato in GitHub o Azure Repos. È possibile usare uno degli articoli di avvio rapido seguenti per creare un'app di esempio:
Un'organizzazione di Azure DevOps che ha la possibilità di eseguire pipeline su agenti ospitati da Microsoft. È necessario richiedere un livello gratuito di processi paralleli o acquistare processi paralleli. Per ulteriori informazioni, vedere Configurare e pagare per i processi paralleli.
Progetto creato nell'organizzazione di Azure DevOps in cui si dispone dell'autorizzazione per creare e autorizzare pipeline e connessioni al servizio di Azure. Creare un progetto in Azure DevOps.
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.
- YAML
- Classico
Definire una pipeline creando un file YAML azure-pipelines.yml nel repository di codice.
- Nel menu di spostamento a sinistra per il progetto Azure DevOps selezionare Pipelines.
- Nella pagina Pipelines selezionare Nuova pipeline o Crea pipeline se la pipeline è la prima nel progetto.
- Nella schermata Dove è il codice, selezionare il percorso del codice sorgente, Azure Repos Git o GitHub. Se necessario, accedere a GitHub.
- Nella schermata Selezionare un repository selezionare il repository di codice.
- Nella schermata Configura la pipeline, selezionare Pipeline di base.
Aggiungere l'attività .NET Core (DotNetCoreCLI@2) alla pipeline e compilare e pubblicare l'app.
- Nella schermata Rivedere il codice YAML della pipeline, eliminare tutto il codice dopo la riga
steps:. - Selezionare la fine del file, quindi selezionare Mostra assistente a destra.
- In Attività selezionare .NET Core.
- 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.
- In Comando selezionare Pubblica.
- Assicurarsi che le caselle di controllo Pubblica progetti Web e Comprimi progetti pubblicati siano selezionate, quindi selezionare Aggiungi.
- 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.
- 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.
- YAML
- Classico
- Nella schermata Riepilogo esecuzione pipeline selezionare l'icona Altre azioni in alto a destra, quindi selezionare Modifica pipeline.
- Selezionare la fine del file YAML, quindi selezionare Mostra assistente se l'elenco Attività non viene visualizzato.
- Nell'elenco Attività cercare e selezionare l'attività App Web di Azure. In alternativa, è possibile usare l'attività Distribuzione di Servizio app di Azure.
- 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.
- Per Tipo di app selezionare App Web di Azure in Linux o App Web di Azure in Windows, a seconda del codice.
- In Nome app selezionare o immettere il nome dell'app di Servizio app.
- Seleziona Aggiungi.
- Selezionare Convalida e salva, quindi selezionare Salva.
- 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
- YAML
- Classico
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
- YAML
- Classico
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 esempiowebAppLinuxper 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 sedeployToSlotOrASEè true. -
slotName: nome dello slot in cui eseguire la distribuzione, obbligatorio sedeployToSlotOrASEè 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 quandoSwapWithProductionè true. -
SwapWithProduction: booleano. Indica se scambiare il traffico dello slot di origine con quello di produzione.
Eseguire la distribuzione in più app Web
- YAML
- Classico
È 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
- YAML
- Classico
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.
- YAML
- Classico
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:
- Eseguire la distribuzione con Web Deploy, se in genere si usa il processo di distribuzione di Internet Information Services (IIS).
- Distribuire in applicazioni virtuali.
- Eseguire la distribuzione in altri tipi di app, ad esempio App contenitore, app per le funzioni, processi Web o app per dispositivi mobili ed API.
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.