Exercício: Criar um pipeline do Azure DevOps para implantar seu aplicativo nativo de nuvem
Seu gerente deseja que você altere o CI/CD para que o aplicativo eShop das empresas use o Azure Pipelines. Agora você criará um pipeline do Azure DevOps para criar e implantar seu serviço de produtos.
Criar um pipeline do Azure DevOps
Importante
Antes de começar, você precisará ter uma conta do Azure DevOps. Se você não tiver um, poderá criar um gratuitamente em dev.azure.com.
- Entre em dev.azure.com.
- Selecione + New project.
- Para o Nome do projeto, insira Implantação do eShop.
- Deixe a Visibilidade definida como Privada, selecione Criar.
- À esquerda, selecione Pipelines e, em seguida, selecione Criar pipeline.
- Na página Conectar, para Onde está o seu código?, selecione GitHub.
- Se solicitado, entre no GitHub e autorize o Azure Pipelines a acessar a sua conta do GitHub.
- Para Selecionar um repositório, selecione o repositório bifurcado.
- Na página Configurar, selecione a opção Implantar no Serviço de Kubernetes do Azure.
- No painel Implantar no Serviço de Kubernetes do Azure, selecione sua assinatura do Azure e selecione Continuar.
- Se solicitado, faça logon em sua assinatura do Azure.
- Para o Cluster, selecione o cluster do AKS criado na unidade anterior aks-eshop.
- Para o Namespace, deixe Existente selecionado e selecione o padrão.
- Para o Registro de contêiner, selecione o Registro de Contêiner do Azure criado na unidade anterior; por exemplo, acseshop186748394.
- Para o Nome da imagem, insira productservice.
- Para a Porta de serviço, insira 8080.
- Selecione Validate and configure.
Examinar o arquivo YAML do pipeline
O Azure Pipelines usa arquivos YAML para definir as etapas para criar e implantar o seu aplicativo. O arquivo YAML é armazenado em seu repositório do GitHub e foi criado automaticamente para você, com base nas informações fornecidas.
Vamos examinar 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 no branch principal do repositório.
A seção 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.
Em seguida, o YAML define um trabalho de Build que usa o agente ubuntu-latest. O trabalho usa a tarefa do Docker para criar e enviar a imagem por push para o Registro de Contêiner do Azure.
O último estágio é 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 Examinar o pipeline do YAML, selecione Salvar e executar. No painel Salvar e executar:
- Selecione Criar um novo branch para este commit.
- Deixe todas as outras opções definidas como o padrão.
- Selecione Salvar e executar.
Monitorar e solucionar problemas do pipeline
O Azure Pipelines é monitorado e gerenciado no 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 exibir as etapas com mais detalhes. Em determinado momento, você verá que o pipeline falha. Selecione o estágio de Build.
No estágio de build, você pode ver que o build falha. Selecione a etapa Compilar 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
No 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 arquivo docker diferente para o serviço de produto chamado DockerfileProducts. Edite a linha 17 para o seguinte:
dockerfilePath: '**/DockerfileProducts'
Selecione Salvar.
No painel Salvar, selecione Salvar.
Selecione Executar e, no painel Executar pipeline, selecione Executar.
Assista ao estágio de build concluído. O estágio de implantação 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.