Exercício - Criar um pipeline de DevOps do Azure para implantar seu aplicativo nativo da nuvem
Seu gerente deseja que você altere o CI/CD do aplicativo eShop das empresas para usar o Azure Pipelines. Agora você criará um Pipeline de DevOps do Azure para criar e implantar seu serviço de produtos.
Criar um pipeline de DevOps do Azure
Importante
Antes de começar, você precisará ter uma conta do Azure DevOps. Se você não tiver um, você pode criar um gratuitamente em dev.azure.com.
- Inicie sessão no dev.azure.com.
- Selecione + Novo projeto.
- Para o nome do projeto, insira a implantação do eShop.
- Deixe a Visibilidade definida como Privada, selecione Criar.
- À esquerda, selecione Pipelines e, em seguida, selecione Create Pipeline.
- Na página Conectar, em Onde está seu código?, selecione GitHub.
- Se solicitado, entre no GitHub e autorize o Azure Pipelines a acessar sua conta do GitHub.
- Em Selecione um repositório, selecione seu repositório bifurcado.
- Na página Configurar, selecione a opção Implantar no Serviço Kubernetes do Azure.
- No painel Implantar no Serviço Kubernetes do Azure, selecione sua assinatura do Azure e selecione Continuar.
- Se solicitado, faça logon na sua assinatura do Azure.
- Para o Cluster, selecione o cluster AKS que você criou na unidade anterior aks-eshop.
- Para o namespace, deixe Existing selecionado e, em seguida, selecione padrão.
- Para o Registro de Contêiner, selecione o Registro de Contêiner do Azure que você criou na unidade anterior, por exemplo, acseshop186748394.
- Para o Nome da imagem, insira productservice.
- Para a Porta de serviço, digite 8080.
- Selecione Validar e configurar.
Revise o arquivo YAML do pipeline
O Azure Pipelines usa arquivos YAML para definir as etapas para criar e implantar seu aplicativo. O arquivo YAML é armazenado em seu repositório GitHub e foi criado automaticamente para você, com base nas informações fornecidas.
Vamos rever o arquivo YAML:
trigger:
- main
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
imageRepository: 'productservice'
containerRegistry: 'acseshop186748394.azurecr.io'
dockerfilePath: '**/Dockerfile'
tag: '$(Build.BuildId)'
imagePullSecret: 'acseshop18674839414442d34-auth'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- upload: manifests
artifact: manifests
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
As seções de gatilho e recursos definem quando o pipeline deve ser executado. Nesse caso, o pipeline será executado quando uma alteração for confirmada na ramificação principal do repositório.
A seção de variáveis define as variáveis usadas no pipeline. As variáveis são usadas para definir o Registro de Contêiner do Azure e o Dockerfile a ser usado.
O YAML então define um trabalho de compilação que usa o agente ubuntu-latest . O trabalho usa a tarefa Docker para criar e enviar a imagem por push para o Registro de Contêiner do Azure.
A última etapa é implantar o serviço de produto atualizado no AKS. O trabalho usa a tarefa KubernetesManifest para implantar a imagem no AKS.
Executar o pipeline
No canto superior direito da página Revisar seu pipeline YAML , selecione Salvar e executar. No painel Salvar e executar:
- Selecione Criar uma nova ramificação para esta confirmação.
- Deixe todas as outras opções definidas como padrão.
- Selecione Guardar e executar.
Monitorar e solucionar problemas do pipeline
Os Pipelines do Azure são monitorados e gerenciados a partir do portal do Azure DevOps. Vamos examinar a saída da execução do pipeline que você criou.
A página de resumo mostra todos os estágios do pipeline em execução. Você pode selecionar um estágio para visualizar as etapas com mais detalhes. Em um momento, você verá que o pipeline falhou. Selecione o estágio Build .
No estágio de compilação, você pode ver que a compilação falhou. Selecione a etapa Criar e enviar uma imagem por push para o Registro de Contêiner do Azure. O erro no arquivo de log mostra:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Corrigir o erro
Em DevOps, volte para a página de resumo do pipeline. Você vai editar o pipeline criado para corrigir o erro.
No canto superior direito, selecione o menu Mais ações e, em seguida, selecione Editar pipeline.
A linha 17 do arquivo YAML define o Dockerfile a ser usado e, por padrão, o pipeline espera que haja um arquivo chamado Dockerfile na raiz do repositório.
A eShop usa um arquivo docker diferente para o serviço do produto chamado DockerfileProducts. Edite a Linha 17 para ser:
dockerfilePath: '**/DockerfileProducts'
Selecione Guardar.
No painel Salvar, selecione Salvar.
Selecione Executar e, em seguida, no painel Executar pipeline , selecione Executar.
Assista à conclusão do estágio Build. O estágio Implantar pausa até que você o selecione e permita que ele seja executado.
O pipeline é concluído com êxito. Selecione o estágio Implantar para exibir as etapas.