Partilhar via


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

Serviços | 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 integração contínua e entrega contínua (CI/CD) que é executado sempre que você faz check-in de uma alteração de código em uma ramificação designada 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 Principais conceitos de pipelines do Azure.

Você pode usar a tarefa do Aplicativo Web do Azure em seu pipeline para implantar no Serviço de Aplicativo. Para cenários mais complexos, como o uso de 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 em organizações do GitHub. Siga as instruções na tela para concluir os processos necessários. Para obter mais informações, consulte Acesso a repositórios do GitHub.

Criar uma canalização

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 em seu repositório de código.

  1. No menu de navegação esquerdo 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 do projeto.
  3. Na tela Onde está seu código , selecione o local do seu código-fonte, Azure Repos Git ou GitHub. Se necessário, faça login no GitHub.
  4. Na tela Selecione um repositório , selecione seu repositório de código.
  5. Na tela Configurar seu pipeline , selecione Pipeline inicial.

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

  1. Na tela Revisar seu pipeline YAML , exclua todo o código após a steps: linha.
  2. Selecione o final do ficheiro e, em seguida, selecione Mostrar assistente à direita.
  3. Em Tarefas, selecione .NET Core.
  4. Na tela de configuração do .NET Core , em 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. Verifique se as caixas de seleção Publicar projetos da Web e Executar projetos publicados estão marcadas e selecione Adicionar.
  7. A tarefa aparece no pipeline do YAML. Revise o código YAML para ver o que ele faz. Quando estiver pronto, selecione Salvar e executar e, em seguida, selecione Salvar e executar novamente.
  8. Na tela Resumo da compilação, em Trabalhos, selecione o link Permissão necessária . No ecrã Verificações , selecione Permitir e, em seguida, selecione Permitir novamente. Conceder permissão aqui permite o uso da conexão de serviço que você autorizou para todas as execuções desse pipeline.

O pipeline publica o arquivo ZIP de implantação como um artefato do Azure para a tarefa de implantação usar 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 aparecendo.
  3. Na lista Tarefas , procure e selecione a tarefa do 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 , em Assinatura do Azure, selecione a mesma conexão de serviço que você configurou para a etapa anterior. Não é necessário reautorizar esta ligação.
  5. Para Tipo de aplicativo, selecione Aplicativo Web do Azure no Linux ou Aplicativo Web do Azure no Windows, dependendo do seu código.
  6. Em Nome do aplicativo, selecione ou insira o nome do aplicativo do Serviço de Aplicativo.
  7. Selecione Adicionar.
  8. Selecione Validar e guardar e, em seguida, selecione Guardar.
  9. Selecione Executar e, em seguida, selecione Executar novamente.

O pipeline YAML completo deve se parecer com o 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 para sua assinatura do Azure.
  • appName: Nome do seu aplicativo existente.
  • package: Caminho do arquivo para o pacote ou pasta que contém o conteúdo do Serviço de Aplicativo. Caracteres universais são suportados.

Examples

As seções a seguir discutem a criação de diferentes tipos de pipelines de compilação e lançamento.

Implantar em um aplicativo virtual

A tarefa do Aplicativo Web do Azure é implantada no aplicativo raiz no aplicativo Web do Azure. Você pode implantar em um aplicativo virtual específico usando a VirtualApplication propriedade 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. Para obter mais informações, consulte Configurar um aplicativo do Serviço de Aplicativo no portal do Azure.

Implantar em um slot

O exemplo a seguir mostra como implantar num slot intermediário 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 seu aplicativo existente.
  • deployToSlotOrASE: Booleano. Se deseja implantar em um slot de implantação existente ou em um ambiente do Serviço de Aplicativo.
  • resourceGroupName: Nome do grupo de recursos para implantar, obrigatório se deployToSlotOrASE for verdadeiro.
  • slotName: Nome do slot a ser implantado, obrigatório se deployToSlotOrASE for verdadeiro. O padrão é production.
  • package: Caminho do arquivo para o pacote ou pasta que contém o conteúdo do aplicativo. Caracteres universais são suportados.
  • SourceSlot: Slot enviado para produção quando SwapWithProduction é verdadeiro.
  • SwapWithProduction: Booleano. Se o tráfego do slot de origem deve ser trocado pela produção.

Implantar em vários aplicativos Web

Você pode usar jobs no seu arquivo YAML para definir um pipeline de implantações. Ao utilizar tarefas, pode controlar a ordem de distribuiçã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 compilações bem-sucedidas originadas 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 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 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@5
  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 tarefas AzureWebApp e AzureRmWebAppDeployment?

A tarefa Aplicativo Web do Azure é a maneira mais simples de implantar em um aplicativo Web do Azure. Por padrão, você implanta o aplicativo raiz no aplicativo Web do Azure.

A tarefa de implantação do Serviço de Aplicativo do Azure pode lidar com cenários mais personalizados, como:

  • Utiliza o Web Deploy, se costumas usar o processo de implantação do IIS (Serviços de Informação da Internet).
  • Implante em aplicativos virtuais.
  • Implante em outros tipos de aplicativos, como aplicativos de contêiner, aplicativos de função, WebJobs ou API e aplicativos móveis.

Nota

A tarefa Transformação de Arquivo separada também dá suporte a transformações de arquivo e substituição de variáveis 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.

Por que recebo a mensagem "Pacote do Serviço de Aplicativo inválido ou caminho de pasta fornecido"?

Nos pipelines YAML, pode haver uma incompatibilidade entre onde seu pacote da Web criado é salvo e onde a tarefa de implantação está procurando por ele. A tarefa AzureWebApp padrão seleciona o pacote Web para implantação do $(System.DefaultWorkingDirectory)/**/*.zip. Se o pacote da Web for depositado em outro lugar, modifique o package valor do parâmetro.

Por que 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 parâmetro YAML vmImage especifica Windows.

pool:
  vmImage: windows-latest

Por que a Implantação da Web não funciona quando eu desabilito a autenticação básica?

Para obter informações de solução de problemas sobre como fazer com que a autenticação de ID do Microsoft Entra funcione com a tarefa de implantação do Serviço de Aplicativo do Azure , consulte Não consigo implantar na Web no meu Serviço de Aplicativo do Azure usando a autenticação de ID do Microsoft Entra do meu agente do Windows.