Exercício – Implantar um contêiner do Docker no Azure

Concluído

Seu projeto veio com um pipeline de lançamento que compila os projetos na solução e implanta o aplicativo Web em seu Serviço de Aplicativo. Agora é hora de atualizar esse build de pipeline e implantar o projeto como um contêiner.

Nesta unidade, você vai:

  • Definirá algumas variáveis de pipeline para facilitar a manutenção do pipeline de build.
  • Substitua as tarefas de Build existentes por uma tarefa unificada para criar e enviar por push um contêiner do Docker.
  • Substitua a tarefa Implantar existente por uma que atualize o Aplicativo Web do Serviço de Aplicativo pela nova imagem de contêiner.
  • Salve o pipeline para disparar um build e uma versão.

Definir variáveis a serem compartilhadas no pipeline

Aqui, você adicionará uma nova variável de pipeline ao seu pipeline YAML existente definido em azure-pipelines.yml.

  1. No Azure DevOps, navegue até Pipelines.

  2. Selecione o pipeline.

  3. Selecione Editar. Verifique se o branch está definido como main selecionando-o no menu suspenso. Isso exibe seu arquivo azure-pipelines.yml.

  4. Adicione a linha realçada abaixo para adicionar variáveis de pipeline nomeadas webRepository e tag. Elas serão usadas em várias tarefas para identificar exclusivamente a versão específica do contêiner que está sendo referenciado. Você também pode remover a buildConfiguration variável; você não precisará mais dela.

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      webRepository: 'web'
      tag: '$(Build.BuildId)'
    

Substituir as tarefas da etapa de build

Andy: Acho que não precisamos mais dessas tarefas de build, pois o Dockerfile na pasta do projeto já define o build desejado. No entanto, ainda não tive a chance de ver o que podemos usar para criar a imagem usando um Dockerfile. Alguma ideia?

Mara: Eu só estava pesquisando isso. Parece que devemos conseguir compilar o contêiner e até mesmo enviá-lo por push para o repositório com uma só tarefa. Vamos adicioná-la agora.

Tarefa do Docker

Você pode usar a tarefa do Docker para criar e implantar imagens do Docker. Substitua todo o estágio Build pelo snippet YAML abaixo.

  • comando: especifica o comando docker a ser executado.
  • buildContext: especifica o caminho para o contexto de build.
  • repositório: especifica o nome do repositório.
  • dockerfile: especifica o caminho para o Dockerfile.
  • containerRegistry: especifica o nome da conexão de serviço do Registro do Docker.
  • etiquetas: especifica uma lista de etiquetas em linhas separadas. Essas tags são usadas nos comandos build, push e buildAndPush.
- stage: 'Build'
  displayName: 'Build and push'
  jobs:  
  - job: 'Build'
    displayName: 'Build job'
    pool:
      vmImage: 'ubuntu-20.04'
    steps:
    - task: Docker@2
      displayName: 'Build and push the image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(webRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)

Substituir a tarefa da fase de implantação

Andy: Bem, isso parece bem simples. Agora só precisamos encontrar uma tarefa que instrua o App Service a usar a nova versão da imagem de contêiner.

Clara: Já estou nisso. É um pouco diferente de implantar um build no Azure Pipelines, mas ainda é direto o suficiente para fazermos o trabalho em uma só tarefa. Vamos adicioná-la agora.

Aplicativo Web do Azure para tarefa de contêiner

A tarefa Aplicativo Web do Azure para Contêiner foi projetada para implantar contêineres do Docker no Serviço de Aplicativo do Azure. Substitua todo o estágio Deploy pelo snippet YAML abaixo.

  • appName: especifica o nome de um Serviço de Aplicativo do Azure existente.
  • azureSubscription: especifica o nome da assinatura do Azure Resource Manager para a implantação.
  • imageName: especifica o nome da imagem de contêiner totalmente qualificado; por exemplo, myregistry.azurecr.io/nginx:latest ou python:3.7.2-alpine/.
- stage: 'Deploy'
  displayName: 'Deploy the container'
  dependsOn: Build
  jobs:
  - job: 'Deploy'
    displayName: 'Deploy job'
    pool:
      vmImage: 'ubuntu-20.04'
    variables:
    - group: Release
    steps:
    - task: AzureWebAppContainer@1
      inputs:
       appName: $(WebAppName)
       azureSubscription: 'Resource Manager - Tailspin - Space Game'
       imageName: $(RegistryName)/$(webRepository):$(build.buildId)

Salvar o pipeline para disparar um build e uma versão

  1. Selecione Validar e Salvar no canto superior direito da página. Digite sua mensagem de confirmação e selecione Salvar para confirmar.

  2. Selecione Executar e verifique se o branch está definido para main. Selecione Executar quando terminar.

  3. Selecione a linha de produção para exibir os logs. Depois que o build for concluído, selecione a tarefa AzureWebAppContainer e selecione a URL do Aplicativo do Serviço de Aplicativo para exibir seu aplicativo Web implantado.

    Captura de tela do Azure Pipelines mostrando a localização da URL do site.

  4. Você deverá ver seu aplicativo Web em execução no Serviço de Aplicativo.

    Captura de tela do site do Space Game.

Paulo: Isso ficou ótimo! Acho que adotar contêineres pode ser uma grande vitória para nossa equipe.