Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services | Azure DevOps Server 2022
Este artigo explica como usar o Azure Pipelines para criar, testar e implantar automaticamente seu aplicativo web no Serviço de Aplicativo do Azure. Você pode configurar um pipeline de CI/CD (integração contínua e entrega contínua) que é executado sempre que você faz check-in de uma alteração de código em um branch designado do repositório.
Os pipelines consistem em estágios, trabalhos e etapas. Uma etapa é o menor bloco de construção de um pipeline e pode ser um script ou uma tarefa, que é um script pré-empacotado. Para obter mais informações sobre os principais conceitos e componentes que compõem um pipeline, consulte os principais conceitos do Azure Pipelines.
Você pode usar a tarefa aplicativo Web do Azure em seu pipeline para implantar no Serviço de Aplicativo. Para cenários mais complexos, como usar parâmetros XML em implantações, você pode usar a tarefa de implantação do Serviço de Aplicativo do Azure.
Pré-requisitos
Um aplicativo do Serviço de Aplicativo do Azure de trabalho com código hospedado no GitHub ou Azure Repos. Você pode usar qualquer um dos seguintes artigos de início rápido para criar um aplicativo de exemplo:
- ASP.NET Core: Criar um aplicativo Web do ASP.NET Core no Azure
- ASP.NET: Criar um aplicativo Web do ASP.NET Framework no Azure
- JavaScript: Criar um aplicativo Web do Node.js no Serviço de Aplicativo do Azure
- Java: Criar um aplicativo Java no Serviço de Aplicativo do Azure
- Python: Criar um aplicativo Python no Serviço de Aplicativo do Azure
Uma organização do Azure DevOps que tem a capacidade de executar pipelines em agentes hospedados pela Microsoft. Você precisa solicitar uma camada gratuita de trabalhos paralelos ou comprar trabalhos paralelos. Para obter mais informações, consulte Configurar e pagar por trabalhos paralelos.
Um projeto criado na organização do Azure DevOps em que você tem permissão para criar e autorizar pipelines e conexões de serviço do Azure. Crie um projeto no Azure DevOps.
Importante
Durante os procedimentos do GitHub, você pode ser solicitado a criar uma conexão de serviço do GitHub ou ser redirecionado para o GitHub para entrar, instalar o aplicativo GitHub do Azure Pipelines, autorizar o Azure Pipelines ou autenticar-se em organizações do GitHub. Siga as instruções na tela para concluir os processos necessários. Para obter mais informações, confira Acesso ao repositórios do GitHub.
Criar um pipeline
Os exemplos de código nesta seção são para um aplicativo Web ASP.NET Core. Você pode adaptar as instruções para outras estruturas. Para obter mais informações sobre o suporte ao ecossistema do Azure Pipelines, consulte exemplos do ecossistema do Azure Pipelines.
Defina um pipeline criando um arquivo YAML azure-pipelines.yml no repositório de código.
- No menu de navegação à esquerda do seu projeto do Azure DevOps, selecione Pipelines.
- Na página Pipelines, selecione Novo pipeline ou Criar pipeline se esse pipeline for o primeiro no projeto.
- Na tela Onde está o código, selecione o local do código-fonte, Git do Azure Repos ou GitHub. Se necessário, entre no GitHub.
- Na tela Selecionar um repositório, selecione seu repositório de código.
- Na página Configurar seu pipeline, selecione Pipeline inicial.
Adicione a tarefa .NET Core (DotNetCoreCLI@2) ao pipeline e crie e publique seu aplicativo.
- Na tela Examinar o YAML do pipeline, exclua todo o código após a linha
steps:. - Selecione o final do arquivo e, em seguida, selecione Mostrar assistente à direita.
- Em Tarefas, selecione .NET Core.
- Na tela de configuração do .NET Core, na conexão do Azure Resource Manager, selecione sua assinatura do Azure e selecione Autorizar para criar a conexão de serviço necessária.
- Em Comando, selecione publicar.
- Certifique-se de que as caixas de seleção Publicar projetos da Web e Compactar projetos publicados estejam marcadas e, em seguida, selecione Adicionar.
- A tarefa é exibida no pipeline do YAML. Examine o código YAML para ver o que ele faz. Quando estiver pronto, selecione Salvar e executar e selecione Salvar e executar novamente.
- Na tela Resumo da compilação, em Trabalhos, selecione o link Permissão necessária. Na tela Verificações, selecione Permitir e selecione Permitir novamente. A concessão de permissão aqui permite o uso da conexão de serviço autorizada para todas as execuções deste pipeline.
O pipeline publica o arquivo ZIP de implantação como um artefato do Azure para a tarefa de implantação a ser usada na próxima etapa.
Adicionar a tarefa de implantação
Depois que o pipeline for executado com êxito, adicione a tarefa de implantação.
- Na tela Resumo da execução do pipeline, selecione o ícone Mais ações no canto superior direito e, em seguida, selecione Editar pipeline.
- Selecione o final do arquivo YAML e selecione Mostrar assistente se a lista Tarefas não estiver sendo exibida.
- Na lista Tarefas, pesquise e selecione a tarefa Aplicativo Web do Azure. Como alternativa, você pode usar a tarefa de implantação do Serviço de Aplicativo do Azure.
- Na tela de configuração do Aplicativo Web do Azure, na assinatura do Azure, selecione a mesma conexão de serviço configurada para a etapa anterior. Você não precisa reautorizar essa conexão.
- Para o Tipo de aplicativo, selecione Aplicativo Web do Azure no Linux ou Aplicativo Web do Azure no Windows, dependendo do seu código.
- Para Nome do aplicativo, selecione ou insira o nome do aplicativo do Serviço de Aplicativo.
- Selecione Adicionar.
- Selecione Validar e salvar e, em seguida, selecione Salvar.
- Selecione Executar e, em seguida, selecione Executar novamente.
O pipeline YAML completo deve ser semelhante ao seguinte código:
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 da conexão de serviço autorizada à sua assinatura do Azure. -
appName: nome do aplicativo existente. -
package: Caminho do arquivo para o pacote ou pasta que contém o conteúdo do Serviço de Aplicativo. Os caracteres curinga têm suporte.
Exemplos
As seções a seguir discutem a criação de diferentes tipos de pipelines de build e lançamento.
Implantar em um aplicativo virtual
A tarefa aplicativo Web do Azure é implantada no aplicativo raiz no aplicativo Web do Azure. Você pode fazer a implantação em um aplicativo virtual específico usando a propriedade VirtualApplication da tarefa de implantação do Serviço de Aplicativo do Azure.
- task: AzureRmWebAppDeployment@5
inputs:
VirtualApplication: '<name of virtual application>'
VirtualApplication é o nome do aplicativo virtual configurado no portal do Azure. Confira Configurar um aplicativo do Serviço de Aplicativo no portal do Azure para obter mais detalhes.
Implantar em um slot
O exemplo a seguir mostra como implantar em um slot de preparo e, em seguida, alternar para um slot de produção:
- 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: Sua conexão de serviço do Azure. -
appType: Tipo de aplicativo opcional, comowebAppLinuximplantar em um aplicativo Web no Linux. -
appName: O nome do aplicativo existente. -
deployToSlotOrASE: Booliano. Se deve ser implantado em um slot de implantação existente ou em um ambiente do Serviço de Aplicativo. -
resourceGroupName: Nome do grupo de recursos para o qual implantar, necessário sedeployToSlotOrASEfor true. -
slotName: Nome do slot no qual implantar, necessário sedeployToSlotOrASEfor true. Usaproductioncomo padrão. -
package: Caminho do arquivo para o pacote ou pasta que contém o conteúdo do aplicativo. Os caracteres curinga têm suporte. -
SourceSlot: slot enviado para a produção quandoSwapWithProductionfor true. -
SwapWithProduction: Booliano. Se deve trocar o tráfego do slot de origem pela produção.
Implantar em vários aplicativos Web
No seu arquivo YAML, você pode usar jobs para configurar um pipeline de desdobramentos. Usando tarefas, você pode controlar a ordem de implantação em várias aplicações 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'
Implantar condicionalmente
Para implantar condicionalmente no YAML, use uma das seguintes técnicas:
- Adicione uma condição à etapa.
- Isole as etapas de implantação em um trabalho separado e adicione uma condição a esse trabalho.
O exemplo a seguir mostra como usar condições de etapa para implantar somente builds bem-sucedidos originados do branch principal:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Para obter mais informações sobre condições, consulte Especificar condições.
Implantar usando a Implantação da Web
A tarefa de implantação do Serviço de Aplicativo do Azure pode ser implantada no Serviço de Aplicativo por meio da Implantação da 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'
Perguntas frequentes
Qual é a diferença entre as tarefas AzureWebApp e AzureRmWebAppDeployment?
A tarefa Aplicativo Web do Azure é a maneira mais simples de fazer uma implantação em um Aplicativo Web do Azure. Por padrão, você implanta o aplicativo raiz no aplicativo Web do Azure.
A tarefa Implantação do Serviço de Aplicativo do Azure pode lidar com cenários mais personalizados, como:
- Implante com a Implantação da Web se você costuma usar o processo de implantação do Serviços de Informações da Internet (IIS).
- Implantar em aplicativos virtuais.
- Implante em outros tipos de aplicativo, como aplicativos de contêiner, aplicativos de funções, WebJobs ou API e aplicativos móveis.
Observação
A tarefa Transformação de Arquivo separada também dá suporte a transformações de arquivo e substituição de variável a serem usadas no Azure Pipelines. Você pode usar a tarefa Transformação de Arquivo para aplicar transformações de arquivo e substituições de variáveis em qualquer arquivo de configuração e parâmetros.
Por que recebo a mensagem "Pacote do Serviço de Aplicativo inválido ou caminho de pasta fornecido"?
Em pipelines YAML, pode haver uma incompatibilidade entre onde seu pacote Web compilado é salvo e onde a tarefa de implantação está procurando por ele. A tarefa padrão do AzureWebApp seleciona o pacote Da Web para implantação de $(System.DefaultWorkingDirectory)/**/*.zip. Se o pacote Web for depositado em outro lugar, modifique o valor do parâmetro package.
Por que recebo a mensagem "Publicar usando opções de webdeploy só têm suporte ao usar o agente do Windows"?
Esse erro ocorre na tarefa AzureRmWebAppDeployment quando você configura a tarefa a ser implantada usando a Implantação da Web, mas o agente não executa o Windows. Verifique se o parâmetro YAML vmImage especifica o Windows.
pool:
vmImage: windows-latest
Por que o Web Deploy não funciona quando desabilito a autenticação básica?
Para obter informações de solução de problemas sobre como fazer com que a autenticação do Microsoft Entra ID funcione com a tarefa de implantação do Serviço de Aplicativo do Azure, consulte Não consigo implantar na Web em meu Serviço de Aplicativo do Azure usando a autenticação do Microsoft Entra ID do meu agente do Windows.