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 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à AzureRmWebAppDeployment
di distribuzione del servizio app di Azure .
Prerequisiti:
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un'organizzazione di Azure DevOps. Crearne una gratuitamente.
- Possibilità di eseguire pipeline negli agenti ospitati da Microsoft. È possibile acquistare un processo parallelo o richiedere un livello gratuito.
- Un'app del servizio app di Azure funzionante con il codice ospitato in GitHub o Azure Repos.
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.
- YAML
- Classico
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Passare a Pipeline e selezionare Nuova pipeline.
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.
Quando viene visualizzato l’elenco dei repository, selezionare il tuo repository.
È possibile che si venga reindirizzati a GitHub per installare l'app Azure Pipelines. In tal caso, selezionare Approva e installa.
Quando viene visualizzata la scheda Configura, selezionare ASP.NET Core.
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
- YAML
- Classico
Selezionare la fine del file YAML e quindi selezionare Mostra assistente.
Utilizzare Assistente attività per aggiungere l’attività App Web di Azure.
In alternativa, è possibile aggiungere l'attività di distribuzione
AzureRmWebAppDeployment
del servizio app di Azure.Scegliere la sottoscrizione di Azure. Assicurarsi di selezionare Autorizza per autorizzare la connessione. L’autorizzazione crea la connessione al servizio richiesta.
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
- YAML
- Classico
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
- YAML
- Classico
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à AzureRmWebAppDeployment
di distribuzione del servizio app di Azure :
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
-
VirtualApplication
: nome dell'applicazione virtuale configurata nel portale di Azure. Per altre informazioni, vedere Configurare un’app del servizio app nel portale di Azure.
Esempio: 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>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
-
azureSubscription
: la sottoscrizione di Azure. -
appType
: (Facoltativo) UsarewebAppLinux
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 sedeployToSlotOrASE
è true. -
slotName
: nome dello slot, che per impostazione predefinita èproduction
. Obbligatorio sedeployToSlotOrASE
è 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 quandoSwapWithProduction
è true. -
SwapWithProduction
: booleano. Scambiare il traffico dello slot di origine con quello di produzione.
Esempio: 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'
Esempio: distribuire in modo condizionale
- YAML
- Classico
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.
- 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@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:
- 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, 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.
Contenuti correlati
- Personalizzare la pipeline di Azure DevOps.