Compartilhar via


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

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Use o Azure Pipelines para implantar automaticamente o seu aplicativo Web no Serviço de Aplicativo do Azure em cada build bem-sucedido. O Azure Pipelines permite criar, testar e implantar com CI/CD (integração contínua e entrega contínua) 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 do Aplicativo Web do Azure (AzureWebApp) para implantar no Serviço de Aplicativo do Azure no seu pipeline. Para cenários mais complicados, como quando você precisa usar parâmetros XML em sua implantação, você pode usar a tarefa AzureRmWebAppDeploymentde implantação do Serviço de Aplicativo do Azure.

Pré-requisitos:

1. Criar um pipeline para a sua pilha

Os exemplos de código nesta seção pressupõem que você está 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.

  1. Entre na organização do Azure DevOps e acesse seu projeto.

  2. Vá para Pipelines e selecione Novo Pipeline.

  3. Quando solicitado, selecione o local do código-fonte: Azure Repos Git ou GitHub.

    Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.

  4. Quando a lista de repositórios for exibida, selecione o repositório.

  5. Você poderá ser redirecionado ao GitHub para instalar o aplicativo do Azure Pipelines. Se sim, selecione Aprovar e instalar.

  6. Na guia Configurar, selecione ASP.NET Core.

  7. Quando o seu novo pipeline aparecer, observe o YAML para ver o que ele faz. Ao final, selecione Salvar e executar.

2. Adicionar a tarefa de implantação

  1. Selecione o final do arquivo YAML e, em seguida, selecione Mostrar assistente.

  2. Use o Assistente de Tarefa para adicionar a tarefa do Aplicativo Web do Azure.

    Como alternativa, você pode adicionar a tarefa de implantação AzureRmWebAppDeploymentdo Serviço de Aplicativo do Azure.

  3. Escolha sua assinatura do Azure. Selecione Autorizar para autorizar sua conexão. A autorização criará a conexão de serviço necessária.

  4. Selecione o Tipo de aplicativo, o Nome do aplicativo e a Pilha de runtime com base no aplicativo do Serviço de Aplicativo. O YAML completo 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 autorizada à sua assinatura do Azure.
    • appName: nome do aplicativo existente.
    • package: caminho do arquivo para o pacote ou uma pasta contendo o conteúdo do Serviço de Aplicativo. Os caracteres curinga têm suporte.

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 snippet a seguir para implantar o build 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 serviço de aplicativo existente.
  • package: caminho do arquivo para o pacote ou uma pasta contendo o conteúdo do Serviço de Aplicativo. Os caracteres curinga têm suporte.

Exemplo: Implantar em um aplicativo virtual

Por padrão, sua implantação ocorre com o aplicativo raiz no aplicativo Web do Azure. Você pode implantar em uma aplicação virtual específica usando a propriedade VirtualApplication da tarefa de implantação AzureRmWebAppDeployment do Serviço de Aplicativo do Azure.

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'

Exemplo: 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>'
    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 serviço de aplicativo existente.
  • deployToSlotOrASE*: Booliano. Implantar em um slot de implantação existente ou em um Ambiente de Serviço de Aplicativos do Azure.
  • resourceGroupName: nome do grupo de recursos. Necessário se deployToSlotOrASE for true.
  • slotName: nome do slot, que usa productioncomo padrão . Necessário se deployToSlotOrASE for true.
  • package: caminho do arquivo para o pacote ou uma pasta contendo o conteúdo do Serviço de Aplicativo. Os caracteres curinga têm suporte.
  • SourceSlot: slot enviado para a produção quando SwapWithProduction for true.
  • SwapWithProduction: Booliano. Troque o tráfego do slot de origem pelo de produção.

Exemplo: implantação 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'

Exemplo: implementação condicional

Para implantar condicionalmente 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 builds 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 saber mais sobre condições, confira Especificar condições.

Exemplo: Implantar usando o Web Deploy

A tarefa de implantação do Serviço de Aplicativo do Azure AzureRmWebAppDeployment 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@4
  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 Azure Web App é a maneira mais simples de implantar em um aplicativo web do Azure. Por padrão, sua implantação ocorre com o aplicativo raiz no aplicativo Web do Azure.

A tarefa Implantação do Serviço de Aplicativo do Azure (AzureRmWebAppDeployment) 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 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"?

Em pipelines em YAML, dependendo do seu pipeline, pode haver uma incompatibilidade entre o local em que o pacote web compilado é salvo e o local em que a tarefa de implantação procura por ele. Por exemplo, a tarefa AzureWebApp seleciona o pacote web para implantação. A tarefa AzureWebApp talvez procure em $(System.DefaultWorkingDirectory)/**/*.zip. Se o pacote da web estiver depositado em outro lugar, modifique o valor de 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 seu agente não estiver executando o Windows. Verifique se o YAML inclui algo semelhante ao seguinte código:

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 habilitar a autenticação do Microsoft Entra ID para trabalhar com a tarefa AzureRmWebAppDeployment, confira Não consigo usar a Implantação da Web no meu Serviço de Aplicativo do Azure usando a autenticação do Microsoft Entra ID do meu agente do Windows.