Implantar um contêiner personalizado no Serviço de Aplicativo do Azure com o Azure Pipelines

Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022

Usando o Azure Pipelines, você pode criar, testar e implantar automaticamente seu aplicativo Web em um contêiner do Aplicativo Web do Serviço de Aplicativo do Azure no Linux. Neste artigo, você aprenderá a usar pipelines YAML ou Classic para:

  • Crie e publique uma imagem do Docker no Registro de Contêiner do Azure.
  • Crie um Aplicativo Web do Azure.
  • Implante um contêiner no Serviço de Aplicativo do Azure.
  • Implante em slots de implantação.

Pré-requisitos

Produto Requisitos
Azure DevOps - Uma organização e um projeto de DevOps do Azure. Crie um gratuitamente.
- Permissões:
    - Para conceder acesso a todos os pipelines no projeto: Você deve ser membro do grupo Administradores de Projeto.
    - Para criar conexões de serviço: Você deve ter a função de Administrador ou Criador para conexões de serviço.
- A capacidade de executar pipelines em agentes alojados pela Microsoft. Ativa o nível gratuito ou compra um trabalho paralelo.
GitHub - Uma conta GitHub.
Azure - Um Registro de Contêiner do Azure. Crie um registro de contêiner do Azure se ainda não tiver um.

Obter o código

Faça fork da seguinte aplicação de exemplo no GitHub.

https://github.com/spring-guides/gs-spring-boot-docker.git

Criar e publicar uma imagem do Docker no Registro de Contêiner do Azure

Para concluir esta seção com êxito, você deve ter um Registro de Contêiner do Azure. Consulte a seção de pré-requisitos para obter detalhes.

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida , New Pipeline.

  3. Selecione GitHub quando solicitado para o local do seu código-fonte e, em seguida, selecione seu repositório.

  4. Selecione o modelo de pipeline Docker: criar e enviar uma imagem para o Registo de Contentores do Azure.

    Captura de tela mostrando a seleção do modelo de pipeline do Docker.

  5. Selecione sua assinatura do Azure e selecione Continuar.

  6. Selecione o seu registo de contentores no menu pendente e, em seguida, selecione Validar e configurar.

    Captura de tela da tela de validação e configuração do Docker.

  7. Revise o modelo YAML de pipeline e selecione Salvar e executar para criar e publicar a imagem do Docker no Registro de Contêiner do Azure.

    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
        # Container registry service connection established during pipeline creation
        dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}'
        imageRepository: 'javascriptdocker'
        containerRegistry: 'sampleappcontainerregistry.azurecr.io'
        dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
        tag: '$(Build.BuildId)'
    
        # Agent VM image name
        vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
        displayName: Build and push stage
        jobs:
        - job: Build
        displayName: Build
        pool:
            vmImage: $(vmImageName)
        steps:
        - task: Docker@2
            displayName: Build and push an image to container registry
            inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
                $(tag)
    
  8. Para exibir a imagem do Docker publicada após a conclusão da execução do pipeline, vá para o registro de contêiner no portal do Azure e selecione Repositórios.

    Captura de tela da imagem do Docker publicada no Registro de Contêiner do Azure.

  9. Para implantar a imagem a partir do registro do contêiner, habilite a conta de usuário administrador. Vá para o registro de contêiner no portal do Azure e selecione Chaves de acesso. Em seguida, selecione o botão de alternância para Ativar usuário administrador.

Criar uma Aplicação Web

  1. Aceda ao portal do Azure.

  2. Selecione Criar um recurso>Contêineres e, em seguida, escolha Aplicativo Web para Contêineres.

    Captura de tela da criação de um recurso de aplicativo Web para contêineres.

  3. Insira um nome para seu novo aplicativo Web e crie um novo grupo de recursos. Selecione Linux para o sistema operacional.

    Captura de ecrã a mostrar a configuração da aplicação Web.

  4. Na seção Planos de preços , selecione o plano F1 Free.

  5. Selecione Rever e criar. Reveja a configuração e selecione Criar quando terminar.

Implementar na Aplicação Web para Contentores

Neste YAML, você cria e envia por push uma imagem do Docker para um registro de contêiner e, em seguida, implanta-a no Aplicativo Web do Azure para Contêineres. Na fase de Compilação, cria e envia uma imagem do Docker para um Azure Container Registry com a tarefa Docker@2. A AzureWebAppContainer@1 task implementa a imagem na Aplicação Web para Contentores.


trigger:
- main

resources:
- repo: self

variables: 
  ## Add this under variables section in the pipeline
  azureSubscription: <Name of the Azure subscription>
  appName: <Name of the Web App>
  containerRegistry: <Name of the Azure container registry>
  dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
  imageRepository: <Name of image repository>
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)


    ## Add the below snippet at the end of your pipeline
    - task: AzureWebAppContainer@1
      displayName: 'Azure Web App on Container Deploy'
      inputs:
        azureSubscription: $(azureSubscription)
        appName: $(appName)
        containers: $(containerRegistry)/$(imageRepository):$(tag)

Implantar em um slot de implantação

Configure o contêiner do Aplicativo Web do Azure para ter vários slots. Os slots permitem que você implante seu aplicativo com segurança e teste-o antes de disponibilizá-lo para seus clientes. Saiba mais em Criar ambientes de preparação.

O trecho YAML seguinte mostra como implementar num slot de staging e, em seguida, efetuar a troca com um slot de produção:

- task: AzureWebAppContainer@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of the web app>'
    containers: $(containerRegistry)/$(imageRepository):$(tag)
    deployToSlotOrASE: true
    resourceGroupName: '<Name of the resource group>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true

FAQ

P: Como posso encontrar minhas credenciais de registro do Docker?

R: Vá para o portal do Azure e selecione seu Aplicativo Web para Contêineres. Selecione Configurações>do aplicativo e, em seguida, selecione para mostrar o valor.

Captura de tela do portal do Azure mostrando como localizar credenciais de registro do Docker.