BLOG

Erros em Pipelines Azure DevOps: Soluções Práticas para Evitar Problemas e Otimizar seu CI/CD!

As pipelines do Azure DevOps são ferramentas poderosas para automação de build, testes e deploy em ambientes de CI/CD. No entanto, mesmo para engenheiros experientes, erros podem ocorrer, tornando-se um desafio comum na jornada de adoção dessa plataforma. Dessa forma, a idéia é explorar os erros mais frequentes nas pipelines do Azure DevOps e apresentar soluções práticas para resolvê-los, ajudando novos pessoas a evitar armadilhas comuns.

Problemas configurando os arquivos YAMLs

Um dos erros mais comuns ao usar pipelines baseadas em YAML é a sintaxe incorreta, especialmente para iniciantes. Problemas de identação, caracteres inválidos e uso incorreto de palavras-chave podem causar falhas imediatas ao executar a pipeline.

Alguns itens para verificar

  • Validação de Sintaxe: Antes de commitar o arquivo da pipeline (normalmente o arquivo azure-pipelines.yml), você pode utilizar validadores de YAML como YAML Lint ou IDEs como VS Code com plugins apropriados (Existem vários plugins que podem te ajudar com isso);
  • Intellisense do Azure DevOps: Utilize o Intellisense embutido no editor do Azure DevOps para verificar a conformidade do YAML com os padrões da ferramenta (Alguns detalhes sobre esse recurso na documentação oficial em https://learn.microsoft.com/pt-br/azure/devops/pipelines/get-started/yaml-pipeline-editor?view=azure-devops);
  • Comentários e Organização: Separe blocos de código com comentários e mantenha a consistência na indentação para maior clareza.
##### Esquema padrão de pipelines YAMLs

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: UseNode@1
    inputs:
      version: '16.x'
  - script: echo "Pipeline configurada corretamente!"

Falha no pool de agentes

O erro No hosted parallelism has been purchased or granted ocorre frequentemente quando as organizações utilizam os agentes hospedados pela Microsoft, mas ultrapassam os limites disponíveis.

Alguns itens para verificar

  • Solicitação de Paralelismo Adicional: Para organizações, solicite paralelismo adicional no portal do Azure DevOps, dentro das configurações da organização;
  • Agentes auto-hospedados (self-hosted agents): Configure agentes auto-hospedados para evitar limitações de paralelismo;
  • Passos para Configuração:
    • Acesse a aba de agentes no Azure DevOps;
    • Baixe o agente e configure-o (O link para download se encontra nessa página de agentes);
    • Registre-o na organização utilizando:
##### Comando para registrar um novo agente no ADO

./config.sh --unattended --url https://dev.azure.com/{org} --auth pat --token {PAT_TOKEN}

Variáveis Não Resolvidas

O uso de variáveis mal definidas, ausentes ou incorretamente referenciadas pode causar erros, como $(VariableName) não sendo resolvido em tempo de execução.

Alguns itens para verificar

  • Valide Variáveis: Garanta que todas as variáveis estão configuradas na pipeline ou no grupo de variáveis do Azure DevOps;
  • Variáveis de Ambiente: Utilize variáveis de ambiente para evitar dependências no código YAML;
  • Debugging: Ative a depuração para verificar os valores das variáveis durante a execução da pipeline. Você pode setar a variável de sistema System.Debug com o valor true, dessa forma você terá acesso a várias informações da pipeline.
##### Exemplo de Uso Correto de Variáveis

variables:
  projectName: MyApp

steps:
  - script: echo "O nome do projeto é $(projectName)"

Falhas na Integração com Repositórios

Pipeline cannot fetch the source repository ocorre quando a pipeline não consegue acessar o repositório devido a problemas de autenticação ou permissões.

Alguns itens para verificar

  • Cheque as Permissões: Verifique se o serviço de build possui acesso ao repositório. No GitHub, configure tokens de acesso pessoal (os famosos PATs) ou GitHub Apps;
  • Service Connections: Use conexões de serviço no Azure DevOps para autenticação segura;
  • SSH Key: Configure chaves SSH para autenticação se estiver usando repositórios privados.

Obs.: Para criar uma Service Connection você pode seguir os passos:

  1. Vá até “Project Settings” > “Service Connections”;
  2. Adicione uma conexão nova, escolhendo o tipo apropriado (GitHub, Bitbucket, etc.);
  3. Forneça as credenciais solicitadas;
  4. Defina um nome e clique em Save.

Configuração de Testes Automatizados

Testes automatizados falham devido à ausência de dependências ou incompatibilidades entre o ambiente de build e os requisitos do projeto.

Alguns itens para verificar

  • Defina o Ambiente de Build: Configure dependências no início do pipeline;
  • Use Tasks Pré-definidas: Utilize tarefas como UseNode@1, UsePythonVersion@0, ou UseDotNet@2 para configurar as versões corretas de linguagens e frameworks;
  • Cachê de Dependências: Ative o cache para reduzir o tempo de instalação das dependências.
##### Exemplo de Configuração para Testes Node.js

steps:
  - task: UseNode@1
    inputs:
      version: '16.x'
  - script: |
      npm install
      npm test

Deploys Interrompidos ou Incompletos

Deployment failed pode surgir por configurações incorretas no Azure App Service, permissões insuficientes ou falha na conexão com os recursos.

Alguns itens para verificar

  • Permissões: Garanta que a identidade gerenciada ou serviço de build possui acesso ao recurso do Azure;
  • Logs de Erro: Examine os logs de deploy no Azure DevOps e no recurso de destino;
  • Configuração de Chaves: Use bibliotecas seguras do Azure DevOps para armazenar secrets, como chaves de acesso.
###### Pipeline para Deploy no Azure App Service

steps:
  - task: AzureRmWebAppDeployment@4
    inputs:
      azureSubscription: 'MinhaConexao'
      appType: 'webApp'
      appName: 'MeuApp'
      package: '$(System.DefaultWorkingDirectory)/drop/MeuApp.zip'

Gerenciamento de Artefatos

Erros como Artifact not found podem ocorrer quando artefatos não são publicados corretamente em uma etapa de build.

Alguns itens para verificar

  • Publique Artefatos: Use a tarefa PublishPipelineArtifact ou PublishBuildArtifacts para salvar os artefatos de forma confiável;
  • Verifique o Caminho: Garanta que os artefatos estão sendo gerados no local esperado.
##### Exemplo de Publicação de Artefatos

steps:
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)'
      artifact: 'drop'

Conclusão

Os erros nas pipelines do Azure DevOps são inevitáveis, especialmente no começo. No entanto, com as estratégias corretas, é possível diagnosticar e resolver problemas de forma eficiente, garantindo que seus processos de CI/CD sejam robustos e confiáveis.

Por último, mas não menos importante, lembre-se de:

  • Usar e abusar da documentação oficial do Azure DevOps;
  • Adotar a prática de versionar e principalmente documentar suas pipelines;
  • Habilite alertas e monitoramento para acompanhar o desempenho das pipelines em tempo real.

Espero que tenham gostado! Não deixe de comentar o que acharam desse conteúdo! 😉

Foto de João Heytor

João Heytor

DevOps por escolha e colaborador por natureza! Prazer!

Esta gostando do conteúdo ? Compartilhe!