Exercício - Implantar um contêiner do Docker no Azure
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.
No Azure DevOps, navegue até Pipelines.
Selecione o pipeline.
Selecione Editar. Verifique se a ramificação está definida como principal selecionando-a no menu suspenso. Isso abre seu arquivo azure-pipelines.yml .
Adicione a linha realçada abaixo para adicionar uma variável de pipeline chamada
webRepository
etag
. 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 abuildConfiguration
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
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)
Salve o pipeline para acionar uma compilação e liberação
Selecione Salvar no canto superior direito da página. Digite sua mensagem de confirmação e selecione Salvar para confirmar.
Selecione Executar e verifique se sua ramificação está definida como principal. Selecione Executar quando terminar.
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.
Você deve ver seu aplicativo Web em execução no Serviço de Aplicativo.
Andy: Isso ficou ótimo! Acho que adotar contêineres pode ser uma grande vitória para nossa equipe.