Exercício – Implantar o um contêiner do Docker no Azure
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.
No Azure DevOps, acesse Pipelines.
Selecione o pipeline.
Selecione Editar. Verifique se o branch está definido como main selecionando-o no menu suspenso. Isso abrirá o arquivo azure-pipelines.yml.
Adicione a linha realçada abaixo para adicionar variáveis de pipeline chamadas
webRepository
etag
. 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ávelbuildConfiguration
, 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
oupython: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
Selecione Save no canto superior direito da página. Digite a mensagem do commit e selecione Salvar para confirmar.
Selecione Executar e verifique se a ramificação está definido como principal. Selecione Executar quando terminar.
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.
Você verá o aplicativo Web em execução no Serviço de Aplicativo.
Paulo: Isso ficou ótimo! Acredito que a adoção de contêineres poderá trazer grandes vantagens para nossa equipe.