Compartilhar via


Implantar no Serviço de Aplicativo do Azure usando o Azure Pipelines

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

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.

  1. No menu de navegação à esquerda do seu projeto do Azure DevOps, selecione Pipelines.
  2. Na página Pipelines, selecione Novo pipeline ou Criar pipeline se esse pipeline for o primeiro no projeto.
  3. 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.
  4. Na tela Selecionar um repositório, selecione seu repositório de código.
  5. Na página Configurar seu pipeline, selecione Pipeline inicial.

Adicione a tarefa .NET Core (DotNetCoreCLI@2) ao pipeline e crie e publique seu aplicativo.

  1. Na tela Examinar o YAML do pipeline, exclua todo o código após a linha steps:.
  2. Selecione o final do arquivo e, em seguida, selecione Mostrar assistente à direita.
  3. Em Tarefas, selecione .NET Core.
  4. 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.
  5. Em Comando, selecione publicar.
  6. Certifique-se de que as caixas de seleção Publicar projetos da Web e Compactar projetos publicados estejam marcadas e, em seguida, selecione Adicionar.
  7. 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.
  8. 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.

  1. Na tela Resumo da execução do pipeline, selecione o ícone Mais ações no canto superior direito e, em seguida, selecione Editar pipeline.
  2. Selecione o final do arquivo YAML e selecione Mostrar assistente se a lista Tarefas não estiver sendo exibida.
  3. 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.
  4. 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.
  5. Para o Tipo de aplicativo, selecione Aplicativo Web do Azure no Linux ou Aplicativo Web do Azure no Windows, dependendo do seu código.
  6. Para Nome do aplicativo, selecione ou insira o nome do aplicativo do Serviço de Aplicativo.
  7. Selecione Adicionar.
  8. Selecione Validar e salvar e, em seguida, selecione Salvar.
  9. 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, como webAppLinux implantar 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 se deployToSlotOrASE for true.
  • slotName: Nome do slot no qual implantar, necessário se deployToSlotOrASE for true. Usa production como 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 quando SwapWithProduction for 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:

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.