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

Concluído

O seu projeto veio com um pipeline de lançamento que cria os projetos na solução e implanta a aplicação web no seu Serviço de Aplicações. Agora, é hora de atualizar essa compilação de pipeline e implantar o projeto como um contêiner.

Nesta unidade, você:

  • Defina algumas variáveis de pipeline para tornar o pipeline de compilação mais fácil de manter.
  • Substitua as tarefas existentes do Build por uma tarefa unificada para criar e enviar por push um contêiner do Docker.
  • Substitua a tarefa existente Implantar por uma que atualize o Aplicativo Web do Serviço de Aplicativo com a nova imagem de contêiner.
  • Salve o pipeline para acionar uma compilação e liberação.

Definir variáveis a serem compartilhadas dentro do 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 a ramificação está definida para principal selecionando-a no menu suspenso. Isto faz com que o seu arquivo azure-pipelines.yml seja exibido.

  4. Adicione a linha realçada abaixo para adicionar variáveis de pipeline chamadas webRepository e tag. Eles serão usados 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 variável buildConfiguration; você não vai precisar mais dele.

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

Substitua as tarefas do estágio de construção

Andy: acho que não precisamos mais de nenhuma dessas tarefas de compilação, porque o Dockerfile na pasta do projeto já define a compilação que queremos. No entanto, ainda não tive a oportunidade de ver o que podemos usar para construir a imagem usando um Dockerfile. Alguma ideia?

Mara: Eu estava apenas a pesquisar isso. Parece que é possível construir o contentor e até mesmo enviá-lo para o repositório com uma única tarefa. Vamos adicioná-lo agora.

Tarefa do Docker

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

  • comando: Especifica o comando do Docker a ser executado.
  • buildContext: Especifica o caminho para o contexto de compilação.
  • repositório: Especifica o nome do repositório.
  • dockerfile: Especifica o caminho para o Dockerfile.
  • containerRegistry: Especifica o nome da conexão do serviço de registro do Docker.
  • tags: Especifica uma lista de tags 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)

Substitua a tarefa do estágio de implantação

Andy: Bem, isso parece bastante simples. Agora, tudo o que precisamos é encontrar uma tarefa que instrua o Serviço de Aplicativo a usar a versão recém-enviada da imagem do contêiner.

Mara: eu já estou nisso. É um pouco diferente de implantar um build no Azure Pipelines, mas ainda assim suficientemente direto para que possamos fazer o trabalho num único passo. Vamos adicioná-lo já.

Tarefa de Aplicação Web em Azure para Contêineres

A tarefa do Azure Web App para Contêineres foi projetada para implantar contêineres Docker no Serviço de Aplicações do Azure. Substitua todo o estágio Implantar pelo trecho 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 qualificada; 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)

Salve o pipeline para acionar uma compilação e liberação

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

  2. Selecione Executare verifique se a sua ramificação está definida como principal. Selecione Executar assim que terminar.

  3. Selecione seu pipeline para visualizar os logs. Depois que a compilação for bem-sucedida, selecione a tarefa AzureWebAppContainer e selecione a URL do Aplicativo do Serviço de Aplicativo de Aplicativo de Aplicativo para exibir seu aplicativo Web implantado.

    Captura de tela do Azure Pipelines mostrando o local da URL do site.

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

    Screenshot do website do Space Game.

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