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

Concluído

Seu projeto veio com um pipeline de lançamento que cria os projetos na solução e implanta o aplicativo Web para o 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.
  • Substituirá as tarefas de Build por uma tarefa unificada para criar e enviar por push um contêiner do Docker.
  • Substituirá a tarefa Implantação por uma que atualize o Aplicativo Web do Serviço de Aplicativo com a 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 variável de pipeline ao pipeline YAML existente definido em azure-pipelines.yml.

  1. No Azure DevOps, acesse Pipelines.

  2. Selecione o pipeline.

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

  4. Adicione a linha realçada abaixo para adicionar variáveis de pipeline chamadas 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 referenciada. Você também pode remover a variável buildConfiguration, pois não precisará mais dela.

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

Substituir as tarefas da fase de build

Paulo: Acho que não precisamos mais de nenhuma dessas tarefas de build, pois o Dockerfile da pasta do projeto já define o build que queremos. No entanto, ainda não consegui ver o que podemos usar para criar a imagem usando um Dockerfile. Alguma ideia?

Clara: Eu estava justamente pensando nisso. 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

Use a tarefa do Docker para compilar e implantar imagens do Docker. Substitua toda a fase Build pelo snippet de YAML abaixo.

  • command: especifica o comando do Docker a ser executado.
  • buildContext: especifica o caminho para o contexto de build.
  • repository: 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.
  • tags: especifica uma lista de marcas 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

Paulo: Bem, isso parece bem simples. Agora, basta encontrarmos uma tarefa que instrua o Serviço de Aplicativo a usar a versão recentemente enviada por push da imagem de contêiner.

Clara: Já estou trabalhando 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 toda a fase Implantação pelo snippet de 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 totalmente qualificado da imagem de contêiner, 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 Save no canto superior direito da página. Digite a mensagem do commit e selecione Salvar para confirmar.

  2. Selecione Executar e verifique se a ramificação está definido como principal. Selecione Executar quando terminar.

  3. Selecione o pipeline 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.

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

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

    Screenshot of the Space Game website.

Paulo: Isso ficou ótimo! Acredito que a adoção de contêineres poderá trazer grandes vantagens para nossa equipe.