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

Concluído

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

Nesta unidade, irá:

  • Defina algumas variáveis de pipeline para tornar o pipeline de compilação mais fácil de manter.
  • Substitua as tarefas de compilação 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 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 como principal selecionando-a no menu suspenso. Isso abre seu arquivo azure-pipelines.yml .

  4. Adicione a linha realçada abaixo para adicionar uma variável de pipeline chamada 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 buildConfiguration variável, você não precisará mais dela.

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

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

Andy: Eu não acho que 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 olhando para cima. Parece que deve ser capaz de construir o contêiner 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 do Docker para criar e implantar imagens do Docker. Substitua todo o estágio Build pelo trecho YAML abaixo.

  • command: especifica o comando do Docker a ser executado.
  • buildContext: Especifica o caminho para o contexto de compilação.
  • repository: 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 uma compilação no Azure Pipelines, mas ainda assim direto o suficiente para que possamos fazer o trabalho em uma tarefa. Vamos adicioná-lo agora.

Tarefa Azure Web App for Container

A tarefa Azure Web App for Container foi projetada para implantar contêineres do Docker no Serviço de Aplicativo 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 Executar e verifique se sua ramificação está definida como principal. Selecione Executar quando terminar.

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

    Screenshot of Azure Pipelines showing the location of the website URL.

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

    Screenshot of the Space Game website.

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