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.
- Insira o nome do projeto para a implantação do eShop .
- Deixe a Visibilidade definida como Privada e selecione Criar.
- À esquerda, selecione Pipelines e, em seguida, selecione Create Pipeline.
- Na página Connect, para Onde está o seu código?, selecione GitHub.
- Se solicitado, entre no GitHub e autorize o Azure Pipelines a acessar sua conta do GitHub.
- Para Selecione um repositório, selecione o seu repositório clonado.
- 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, como acseshop186748394.
- Para o Nome da imagem, insira productservice.
- Para o Service Port, 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)
O acionar e recursos seções 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 variáveis define as variáveis utilizadas no pipeline. As variáveis são usadas para definir o Registro de Contêiner do Azure e o Dockerfile a ser usado.
Em seguida, o YAML define um trabalho Build que usa o agente de mais recente do ubuntu. O trabalho usa a tarefa Docker para criar e fazer push da imagem para o Registo de Contentores do Azure.
A última etapa é Implementar o serviço atualizado do produto no AKS. O trabalho usa a tarefa KubernetesManifest para implantar a imagem no AKS.
Executar o pipeline
No canto superior direito da página Revisão do pipeline YAML, selecione Guardar e executar. No painel Salvar e executar:
- Selecione Criar uma nova ramificação para este commit.
- Deixe todas as outras opções definidas como padrão.
- Selecione Salvar e execute.
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 apresenta-te todos os estágios do teu 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 para o Registo de Contentores 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.
O eShop usa um ficheiro Docker diferente para o serviço do produto chamado DockerfileProducts. Edite a Linha 17 para ser:
dockerfilePath: '**/DockerfileProducts.acr'Selecione Salvar.
No painel Salvar, selecione Salvar.
Selecione Executar e, em seguida, no painel Executar pipeline, selecione Executar.
Veja o estágio Build concluído. O estágio Implantar pausa até que o selecione e permita que ele seja executado.
O pipeline é concluído com êxito. Selecione o estágio Implementar para ver as etapas.