civil-and-structural-engineering
Azure Devops Pipelines Yaml para fluxos de trabalho de Ci/cd controlados por versões
Table of Contents
Os pipelines Azure DevOps YAML oferecem uma abordagem rigorosa e controlada por versões para integração contínua e entrega contínua (CI/CD) que se alinha perfeitamente com as práticas de entrega de software modernas. Ao codificar toda a definição de pipeline em arquivos YAML armazenados ao lado do código de aplicação, as equipes alcançam transparência, repetibilidade e audibilidade que os editores gráficos não conseguem combinar. Esta abordagem transforma o pipeline de uma caixa preta em um cidadão de primeira classe da base de código, sujeito à mesma revisão, ramificação e rastreamento de histórico como o próprio código fonte.
Quer você esteja automatizando construções para uma arquitetura de microservices, implantando infraestrutura como código ou orquestrando fluxos de trabalho complexos de liberação multi-ambiente, os pipelines Azure DevOps YAML lhe dão o controle, flexibilidade e escalabilidade necessários para enviar software de forma confiável. Este artigo fornece uma análise aprofundada do que são os pipelines YAML, como criá-los, padrões avançados e práticas comprovadas de melhores práticas tiradas de ambientes de produção.
O que são Azure DevOps YAML Pipelines?
Os pipelines Azure DevOps YAML são arquivos de configuração declarativos que definem as etapas, etapas, tarefas e dependências necessárias para construir, testar e implantar aplicativos. Ao contrário do editor clássico que armazena definições de pipeline no banco de dados de serviços Azure DevOps, os pipelines YAML existem como arquivos de texto no seu repositório – tipicamente chamados ] ou colocados sob um diretório . Este arquivo contém toda a definição de pipeline usando um formato estruturado que o Azure DevOps analisa em tempo de execução.
O arquivo pipeline pode referenciar outros arquivos YAML (templates) para lógica reutilizável, incluir declarações condicionais, variáveis dinâmicas e até mesmo desencadear comportamentos diferentes com base em filtros de branch, tag ou caminho. Isso torna o processo CI/CD totalmente scriptable e capaz de lidar com cenários complexos do mundo real sem intervenção manual.
Componentes Principais das Tubagens YAML
Um gasoduto YAML é composto por vários elementos hierárquicos que funcionam em conjunto: triggers, variáveis[, ]estágios, trabalhos[, passos[], e templates[]. Compreender estes blocos de construção é essencial para a escrita de condutas mantendíveis e eficientes.
Etapas, Empregos e Passos
Os estágios representam divisões principais no gasoduto, como o Compilação, Teste e Implantação. Eles podem correr sequencialmente ou em paralelo. Dentro de cada fase, ]jobs[ definem o ambiente de execução (conjunto de agentes ou recipiente) e contêm uma sequência de passos [. Os passos são a menor unidade de trabalho – um script a executar, uma tarefa a executar ou um modelo a incluir. O Azure DevOps fornece centenas de tarefas integradas para operações comuns, como instalar dependências, executar testes ou publicar artefatos.
Ativadores
[[ FLT: 0]]Triggers[[ FLT: 1]] define quando o gasoduto deve iniciar automaticamente. O mais comum é o gatilho CI, que dispara em commits para ramos especificados (por exemplo, [[ FLT: 2]], [[ FLT: 3]]). Você também pode usar gatilhos PR para a validação de pedidos de puxar, agendar gatilhos para compilação noturna e filtros de caminho para limitar o disparo a mudanças em pastas específicas. Configurações avançadas de gatilho permitem que você use wildcards, exclua caminhos ou execute condicionalmente com base em tags.
trigger:
branches:
include:
- main
- releases/*
paths:
exclude:
- docs/*
- README.md
Variáveis e Parâmetros
Variáveis] armazena valores que podem ser usados durante todo o pipeline – cadeias de conexão, números de versão ou nomes de ambiente. Eles podem ser definidos no nível do pipeline, nível de estágio ou nível de trabalho, e podem ser substituídos no tempo da fila. Parâmetros[ são um mecanismo mais poderoso para introduzir escolhas de tempo de execução (por exemplo, qual ambiente para implantar) e são especialmente úteis em modelos. Parâmetros suportam valores padrão, restrições de tipo e lógica condicional.
O Azure DevOps também suporta variáveis secretas, que são criptografadas e nunca expostas em logs. Para segredos de nível de produção, integre-se com o Azure Key Vault usando a tarefa "Azure Key Vault" ou a referência de grupo variável.
Modelos para a reutilização
[[FLT: 0]] Os Templates[[[FLT: 1]] são uma das funcionalidades mais poderosas dos gasodutos YAML. Permitem- lhe considerar a lógica comum em ficheiros YAML separados e incluí- los em múltiplos gasodutos. Existem dois tipos: [[FLT: 2]] modelos de trabalho[[[FLT: 3]]] e [[FLT: 4]] modelos de passos[. Os modelos de trabalho encapsulam uma tarefa inteira (incluindo pool, variáveis e passos), enquanto os modelos de passos reutilizam um grupo de passos entre trabalhos ou estágios.
Os parâmetros de suporte aos modelos, o que os torna flexíveis. Por exemplo, você pode criar um modelo "build-node-app.yml" que toma uma versão Node.js como parâmetro e executa a instalação, compilação e teste do npm. Qualquer pipeline que precise para construir um aplicativo Node.js pode simplesmente incluir esse modelo com a versão apropriada. Isto elimina a duplicação e garante consistência entre projetos.
# templates/build-node-app.yml
parameters:
- name: nodeVersion
type: string
default: '18.x'
steps:
- task: NodeTool@0
inputs:
versionSpec: ${{ parameters.nodeVersion }}
- script: npm install
displayName: 'Install dependencies'
- script: npm run build
displayName: 'Build application'
- script: npm test
displayName: 'Run tests'
Principais benefícios do CI/CD controlado por versões
A adoção de pipelines YAML traz várias vantagens concretas sobre os pipelines clássicos baseados em UI:
- Controlo completo da versão: Cada alteração ao gasoduto é rastreada no mesmo repositório que o código da aplicação. Você pode diff, comentar e reverter as alterações do gasoduto usando fluxos de trabalho padrão do Git. Isso elimina o mistério "quem mudou o gasoduto" e garante que a definição do gasoduto está sempre em sincronia com o código que ele constrói.
- Reproducibilidade e auditabilidade: Porque o pipeline é definido como código, você pode reconstruir qualquer commit com exatamente as mesmas etapas, variáveis e dependências de quando foi construído pela primeira vez. Isso é fundamental para depurar problemas de produção e atender aos requisitos de conformidade.
- Automação além das compilações: Os pipelines YAML suportam lógica condicional, loops e expressões complexas usando a linguagem de expressão do Azure DevOps. Você pode implementar fluxos de trabalho sofisticados, como implantar em várias regiões em paralelo, executar testes de fumaça apenas em ramos de liberação ou desencadear pipelines a jusante.
- Portabilidade: Os pipelines YAML podem ser copiados entre projetos, reutilizados entre equipes e até usados para iniciar o CI/CD para novos repositórios. Os modelos aumentam ainda mais essa portabilidade, permitindo que as equipes compartilhem e mantenham a lógica comum do pipeline centralmente.
- Colaboração e revisão de código: As alterações de pipeline estão sujeitas ao mesmo processo de revisão de pedidos de pull que o código fonte. Isso incentiva as melhores práticas, como a revisão por pares de mudanças de infraestrutura, reduz as configurações erradas e promove uma cultura de colaboração DevOps.
Criando um Pipeline YAML controlado por versões
A configuração de um gasoduto YAML do zero é simples. Abaixo estão os passos recomendados:
- Decida sobre uma estrutura de arquivos. Você pode colocar seu arquivo principal de pipeline na raiz do repositório () ou em uma pasta dedicada, como . A última abordagem escala melhor quando você tem vários pipelines.
- Escreva a definição do gasoduto. Comece com um arquivo YAML mínimo válido que inclui um gatilho, um pool (imagem de VM agente ou recipiente) e pelo menos um trabalho. Exemplo:
- ]Poupe o arquivo no seu repositório. Persistir e empurrar para o controle remoto, certificando-se de que o arquivo está no branch que pretende usar como branch padrão para o pipeline.
- [[ FLT: 0]]Criar o gasoduto no Azure DevOps. [[ FLT: 1]] Navegar para Pipelines & gt; Criar Pipeline, selecione "Azure Repos Git" (ou sua fonte escolhida), escolha o repositório e selecione "Existindo o arquivo Azure Pipelines YAML". Aponte para a localização do arquivo que você acabou de criar (por exemplo, [[FLT: 9]]). Azure DevOps irá processar o YAML e mostrar uma visualização.
- Confirmar e executar. Clique em "Executar" para executar o pipeline pela primeira vez. Você pode monitorar a saída em tempo real. Commits posteriores aos branches de disparo iniciarão automaticamente novas execuções.
Para projetos existentes que já possuem um pipeline clássico, você pode migrar para YAML exportando a definição do pipeline ou recriando-o usando o editor YAML. A Microsoft fornece um guia de migração para facilitar a transição.
Exemplo de Passo a Linha de Tubo
Vamos examinar um pipeline mais realista para uma aplicação web Node.js que constrói, testa, publica um artefato e implementa para um ambiente de estadiamento. Este exemplo demonstra várias fases, variáveis e implantação condicional.
trigger:
branches:
include:
- main
- develop
paths:
exclude:
- 'README.md'
variables:
nodeVersion: '18.x'
artifactName: 'webapp'
stages:
- stage: Build
displayName: 'Build and Test'
jobs:
- job: BuildJob
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: $(nodeVersion)
- script: npm install
displayName: 'Install dependencies'
- script: npm run lint
displayName: 'Lint code'
- script: npm run build
displayName: 'Build application'
- script: npm test
displayName: 'Run unit tests'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'dist'
ArtifactName: $(artifactName)
- stage: DeployStaging
displayName: 'Deploy to Staging'
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: DeployJob
pool:
vmImage: 'ubuntu-latest'
environment: staging
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: $(artifactName)
- script: echo "Deploying artifact to staging server..."
displayName: 'Deploy step'
- script: echo "Running smoke tests..."
displayName: 'Smoke test'
Este gasoduto mostra:
- Trigger with path exclusion – as alterações de documentação não irão desencadear uma compilação completa.
- Variáveis definidos no topo para reutilização.
- Duas etapas – Compilação (não implantação) e ImplantaçãoStaging (trabalho de implantação). A etapa de implantação só é executada se a ramificação de origem for ] e a compilação tiver sido bem- sucedida.
- Trabalho de implantação] utilizando a palavra-chave , que permite a rastreabilidade, aprovações e portões.
- Publicação e download de artefatos – a saída de compilação é salva e posteriormente recuperada pela etapa de implantação.
Padrões Avançados
Multi-Stage com aprovações manuais
Os pipelines Azure DevOps YAML suportam ambientes com verificações de aprovação manual. Você pode exigir que usuários ou grupos específicos aprovem uma implantação antes de ela prosseguir. Isto é definido no YAML referenciando um ambiente que tenha as aprovações configuradas.
- stage: DeployProduction
dependsOn: DeployStaging
condition: succeeded()
jobs:
- deployment: ProdDeployment
pool:
vmImage: 'ubuntu-latest'
environment: production
strategy:
runOnce:
deploy:
steps:
- script: echo "Deploying to production..."
Execução condicional
Use expressões como para controlar quais estágios, tarefas ou etapas são executados. Azure DevOps suporta uma linguagem de expressão rica com funções para manipulação de strings, operadores lógicos e verificações de coleção.
Utilização de Contentores
Em vez de usar uma imagem VM, você pode executar tarefas inteiras dentro de um recipiente. Isto é ideal para garantir ambientes consistentes em todo o desenvolvimento e CI/CD. Basta especificar um elemento sob o trabalho ou pool.
pool:
vmImage: 'ubuntu-latest'
container: node:18-alpine
Melhores práticas para tubulações YAML
A partir de implementações de produção, aqui estão as práticas fundamentais para manter seus pipelines robustos e mantendíveis:
- Use modelos liberalmente. Extraia passos comuns em modelos parametrizados. Isso reduz a duplicação e torna mais fácil aplicar padrões (por exemplo, um modelo de verificação de segurança que todos os projetos devem executar).
- Mantenha os arquivos YAML pequenos e focados. Um único arquivo monolítico torna-se difícil de ler e depurar. Dividir em vários arquivos organizados por estágio ou função (por exemplo, , , ).
- Segredos seguros com o Azure Key Vault. Evite senhas de codificação de disco rígido, chaves API ou certificados. Use grupos variáveis ligados ao Key Vault e faça referência a eles no seu oleoduto. O Azure DevOps irá automaticamente buscar os valores mais recentes em tempo de execução.
- Validate YAML sintaxe antes de commit. Use um plugin linter ou IDE para capturar erros de indentação e chaves faltando. Azure DevOps também fornece um botão "Validate" no editor de oleodutos.
- Nome recursos claramente. Dar etapas, trabalhos e passos significativos valores. Isso melhora muito a legibilidade em logs e visualizações.
- Use cache de pipeline para acelerar as compilações. Dependências de cache como ou pacotes NuGet para evitar re-downloadá-los em cada execução. O Azure DevOps fornece uma tarefa para esse fim.
- Implementar falha inicial. Falhar o pipeline o mais rápido possível. Executar verificação de sintaxe e fitting antes de testes de integração caros. Use a opção em tarefas de script para capturar avisos transformados em erros.
- Documente o seu gasoduto. Incluir comentários no ficheiro YAML explicando escolhas não óbvias, especialmente quando se utiliza expressões ou lógica condicional. Considere manter um README ao lado dos ficheiros do gasoduto.
Integrando com outras ferramentas
Os gasodutos Azure DevOps YAML integram-se nativamente com numerosos serviços. As integrações comuns incluem:
- SonarQube para inspeção contínua de qualidade de código – adicione uma tarefa SonarQubePrepare antes de construir e uma tarefa SonarQubeAnalyze depois.
- Docker para construção de containers – use a tarefa Docker@2 para construir e empurrar imagens para Azure Container Registry ou Docker Hub.
- GitHub – Os gasodutos YAML podem ser configurados para trabalhar com repositórios GitHub, não apenas com Azure Repos. Basta selecionar GitHub como sua fonte durante a criação do pipeline.
- ServiceNow para gerenciamento de mudanças – a extensão ServiceNow Change Management permite que pipelines criem e atualizem solicitações de alterações durante as implementações.
Para uma lista completa de tarefas disponíveis, consulte a documentação Azure Pipelines Tasks.
Pistas comuns e como evitá - las
Mesmo equipes experientes ocasionalmente se deparam com problemas com pipelines YAML. Abaixo estão os erros frequentes e suas soluções:
- Pyntaxe YAML inválida – espaços de trilha, indentação inconsistente (YAML não permite tabulações). Use uma ferramenta de validação no seu editor ou analisador YAML do Azure DevOps.
- Unklear variable scoping – variáveis definidas no nível superior sobrepor variáveis de estágio/trabalho a menos que você use a sintaxe macro corretamente. Use para expressões de modelo e para avaliação em tempo de execução.
- Ativadores mal configurados – esquecendo de definir um resultado de gatilho no pipeline apenas rodando em gatilhos manuais ou agendados. Verifique se a seção de gatilho cobre seus ramos e caminhos pretendidos.
- Capacidade de agrupamento de agentes ignorados – usando um pool de agentes privados sem garantir que agentes suficientes possam causar atrasos ou falhas. Considere usar agentes hospedados pela Microsoft para melhorar a elasticidade.
- Não testar mudanças de tubulação – executar sempre uma compilação de teste em um ramo antes de se fundir com main. Até mesmo pequenas alterações nos modelos podem quebrar dezenas de tubagens silenciosamente.
Conclusão
Os pipelines Azure DevOps YAML representam uma abordagem avançada e de código para CI/CD que escala desde pequenos projetos até a engenharia de lançamentos de nível empresarial. Ao colocar as definições de pipelines sob controle de versão, as equipes ganham transparência, reprodutibilidade e uma ponte perfeita entre desenvolvimento e operações. A sintaxe YAML é expressiva o suficiente para modelar fluxos de trabalho complexos, mas estruturada o suficiente para permanecer legível e mantendível quando emparelhada com modelos e melhores práticas.
Adotar pipelines controlados por versão não é apenas sobre automação – trata-se de tratar o processo de entrega com o mesmo rigor que o código de aplicação. Para equipes que procuram aumentar a frequência de implantação, reduzir erros manuais e melhorar a colaboração, os pipelines Azure DevOps YAML são uma base comprovada. Comece definindo um pipeline simples para o seu projeto, e depois adicione etapas, modelos e integrações incrementais à medida que sua maturidade cresce.