Implementar no Serviço de Aplicações com o Azure Pipelines
Serviços de DevOps do Azure | Azure DevOps Server 2020 | Azure DevOps Server 2019
Nota
A partir de 1º de junho de 2024, todos os aplicativos do Serviço de Aplicativo recém-criados terão a opção de gerar um nome de host padrão exclusivo usando a convenção <app-name>-<random-hash>.<region>.azurewebsites.net
de nomenclatura. Os nomes de aplicativos existentes permanecerão inalterados.
Exemplo: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Para obter mais detalhes, consulte Nome de host padrão exclusivo para recurso do Serviço de Aplicativo.
Use o Azure Pipelines para implantar automaticamente seu aplicativo Web no Serviço de Aplicativo do Azure em cada compilação bem-sucedida. O Azure Pipelines permite criar, testar e implantar com integração contínua (CI) e entrega contínua (CD) usando o Azure DevOps.
Os pipelines YAML são definidos usando um arquivo YAML em seu repositório. Uma etapa é o menor bloco de construção de um pipeline e pode ser um script ou tarefa (script pré-empacotado). Saiba mais sobre os principais conceitos e componentes que compõem um pipeline.
Você usará a tarefa Aplicativo Web do Azure (AzureWebApp
) para implantar no Serviço de Aplicativo do Azure em seu pipeline. Para cenários mais complicados, como a necessidade de usar parâmetros XML em sua implantação, você pode usar a tarefa de implantação do Serviço de Aplicativo do Azure (AzureRmWebAppDeployment).
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Uma organização Azure DevOps. Crie um gratuitamente.
- Capacidade de executar pipelines em agentes hospedados pela Microsoft. Você pode comprar um trabalho paralelo ou solicitar um nível gratuito.
- Um aplicativo do Serviço de Aplicativo do Azure em funcionamento com código hospedado no GitHub ou Azure Repos.
- .NET: Criar um aplicativo Web ASP.NET Core no Azure
- ASP.NET: Criar um aplicativo Web do ASP.NET Framework no Azure
- JavaScript: Criar um aplicativo Web 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
1. Crie um pipeline para sua pilha
Os exemplos de código nesta seção pressupõem que você esteja implantando um aplicativo Web ASP.NET. Você pode adaptar as instruções para outras estruturas.
Saiba mais sobre o suporte ao ecossistema do Azure Pipelines.
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Vá para Pipelines e selecione New Pipeline.
Quando solicitado, selecione o local do seu código-fonte: Azure Repos Git ou GitHub.
Poderá ser redirecionado para o GitHub para iniciar sessão. Em caso afirmativo, insira suas credenciais do GitHub.
Quando a lista de repositórios aparecer, selecione seu repositório.
Você pode ser redirecionado para o GitHub para instalar o aplicativo Azure Pipelines. Em caso afirmativo, selecione Aprovar e instalar.
Quando a guia Configurar for exibida, selecione ASP.NET Core.
Quando seu novo pipeline aparecer, dê uma olhada no YAML para ver o que ele faz. Quando estiver pronto, selecione Salvar e executar.
2. Adicione a tarefa de implantação
Clique no final do arquivo YAML e selecione Mostrar assistente.'
Use o Assistente de tarefas para adicionar a tarefa do Aplicativo Web do Azure.
Como alternativa, você pode adicionar a tarefa de implantação do Serviço de Aplicativo do Azure (AzureRmWebAppDeployment).
Escolha sua assinatura do Azure. Certifique-se de Autorizar sua conexão. A autorização cria a conexão de serviço necessária.
Selecione o Tipo de aplicativo, o nome do aplicativo e a pilha de tempo de execução com base no seu aplicativo do Serviço de Aplicativo. Seu YAML completo deve ser semelhante ao código a seguir.
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 da conexão de serviço autorizado à sua assinatura do Azure.
- appName: nome do seu aplicativo existente.
- package: caminho do arquivo para o pacote ou uma pasta que contém o conteúdo do serviço de aplicativo. Curingas são suportados.
Exemplo: implantar um aplicativo .NET
Para implantar um pacote Web .zip (por exemplo, de um aplicativo Web ASP.NET) em um Aplicativo Web do Azure, use o trecho a seguir para implantar a compilação em um aplicativo.
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: sua assinatura do Azure.
- appType: seu tipo de aplicativo Web.
- appName: o nome do seu serviço de aplicativo existente.
- Pacote: o caminho do arquivo para o pacote ou uma pasta que contém o conteúdo do serviço de aplicativo. Curingas são suportados.
Exemplo: implantar em um aplicativo virtual
Por padrão, sua implantação acontece com o aplicativo raiz no Aplicativo Web do Azure. Você pode implantar em um aplicativo virtual específico usando a VirtualApplication
propriedade da tarefa de implantaçãoAzureRmWebAppDeployment
() do Serviço de Aplicativo do Azure:
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
- VirtualApplication: o nome do Aplicativo Virtual configurado no portal do Azure. Para obter mais informações, consulte Configurar um aplicativo do Serviço de Aplicativo no portal do Azure .
Exemplo: Implantar em um slot
O exemplo a seguir mostra como implantar em um slot de preparo e, em seguida, trocar 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>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
- azureSubscription: sua assinatura do Azure.
- appType: (opcional) Use
webAppLinux
para implantar em um aplicativo Web no Linux. - appName: o nome do seu serviço de aplicativo existente.
- deployToSlotOrASE: Booleano. Implante em um slot de implantação existente ou no Ambiente do Serviço de Aplicativo do Azure.
- resourceGroupName: Nome do grupo de recursos. Obrigatório se
deployToSlotOrASE
for verdadeiro. - slotName: Nome do slot, cujo padrão é
production
. Obrigatório sedeployToSlotOrASE
for verdadeiro. - Pacote: o caminho do arquivo para o pacote ou uma pasta que contém o conteúdo do serviço de aplicativo. Curingas são suportados.
- SourceSlot: Slot enviado para produção quando
SwapWithProduction
for verdadeiro. - SwapWithProduction: Booleano. Troque o tráfego do slot de origem pela produção.
Exemplo: implantar em vários aplicativos Web
Você pode usar trabalhos em seu arquivo YAML para configurar um pipeline de implantações. Usando trabalhos, você pode controlar a ordem de implantação em vários aplicativos 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'
Exemplo: Fazer substituições de variáveis
Para a maioria das pilhas de idiomas, as configurações do aplicativo e as cadeias de conexão podem ser definidas como variáveis de ambiente em tempo de execução.
Mas há outras razões pelas quais você gostaria de fazer substituições variáveis para o seu Web.config. Neste exemplo, seu arquivo Web.config contém uma cadeia de conexão chamada connectionString
. Você pode alterar seu valor antes de implantar em cada aplicativo Web. Você pode fazer isso aplicando uma transformação Web.config ou substituindo variáveis em seu arquivo Web.config.
O trecho a seguir mostra um exemplo de substituição de variáveis usando a tarefa Implantar do Serviço de Aplicativo do Azure (AzureRmWebAppDeployment
):
jobs:
- job: test
variables:
connectionString: <test-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Test stage Azure service connection>'
WebAppName: '<name of test stage web app>'
enableXmlVariableSubstitution: true
- job: prod
dependsOn: test
variables:
connectionString: <prod-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Prod stage Azure service connection>'
WebAppName: '<name of prod stage web app>'
enableXmlVariableSubstitution: true
Exemplo: Implantar condicionalmente
Para fazer isso no YAML, você pode usar uma das seguintes técnicas:
- Isole as etapas de implantação em um trabalho separado e adicione uma condição a esse trabalho.
- Adicione uma condição à etapa.
O exemplo a seguir mostra como usar condições de etapa para implantar somente compilações originárias da ramificação principal:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Para saber mais sobre condições, consulte Especificar condições.
Exemplo: implantar usando a implantação da Web
A tarefa de implantaçãoAzureRmWebAppDeployment
() do Serviço de Aplicativo do Azure pode ser implantada no Serviço de Aplicativo usando a 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@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
Perguntas mais frequentes
Qual é a diferença entre as AzureWebApp
tarefas e AzureRmWebAppDeployment
?
A tarefa do Aplicativo Web do Azure (AzureWebApp
) é a maneira mais simples de implantar em um Aplicativo Web do Azure. Por padrão, sua implantação acontece com o aplicativo raiz no Aplicativo Web do Azure.
A tarefa de Implantação do Serviço de Aplicativo do Azure (AzureRmWebAppDeployment
) pode lidar com cenários mais personalizados, como:
- Modifique as definições de configuração dentro de pacotes da Web e arquivos de parâmetros XML.
- Implante com a Implantação da Web, se você estiver acostumado com o processo de implantação do IIS.
- Implante em aplicativos virtuais.
- Implante em outros tipos de aplicativos, como aplicativos de contêiner, aplicativos de função, WebJobs ou aplicativos de API e móveis.
Nota
As transformações de arquivo e a substituição de variáveis também são suportadas pela tarefa Transformação de Arquivo separada para uso 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.
Recebo a mensagem "Pacote do Serviço de Aplicativo inválido ou caminho de pasta fornecido".
Nos pipelines YAML, dependendo do seu pipeline, pode haver uma incompatibilidade entre onde o pacote da Web criado é salvo e onde a tarefa de implantação está procurando. Por exemplo, a AzureWebApp
tarefa pega o pacote da Web para implantação. Por exemplo, a tarefa AzureWebApp procura em $(System.DefaultWorkingDirectory)/**/*.zip
. Se o pacote da Web for depositado em outro lugar, modifique o valor de package
.
Recebo a mensagem "As opções de publicação usando webdeploy são suportadas somente ao usar o agente do Windows".
Esse erro ocorre na tarefa AzureRmWebAppDeployment quando você configura a tarefa para implantar usando a Implantação da Web, mas seu agente não está executando o Windows. Verifique se o seu YAML tem algo semelhante ao código a seguir:
pool:
vmImage: windows-latest
A Implantação da Web não funciona quando desativo 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, consulte Não consigo implantar a Web no meu Serviço de Aplicativo do Azure usando a AzureRmWebAppDeployment
autenticação do Microsoft Entra ID do meu agente do Windows
Próximos passos
- Personalize seu pipeline do Azure DevOps.