Criando um Pipeline de CI com o Azure Pipelines
Defina um pipeline YAML acionado por solicitações de pull, execute testes unitários e produza um artefato de compilação; depois, analise os resultados dos testes e a cobertura de código no portal.
Criando um Pipeline de CI com o Azure Pipelines é uma aula grátis de Azure Fundamentals no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Azure Fundamentals, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Azure Fundamentals inclui 4 aulas no total.
O que é integração contínua
Integração contínua (CI) é a prática de mesclar frequentemente alterações de código em uma branch compartilhada, fazendo com que cada mesclagem acione automaticamente uma compilação e uma execução de testes. O objetivo é detectar falhas de integração antecipadamente — antes que elas se acumulem e se transformem em problemas grandes e difíceis de corrigir. Um bom pipeline de CI compila o código, executa testes unitários, mede a cobertura de código, realiza análise estática e produz um artefato implantável em poucos minutos. O Azure Pipelines fornece o mecanismo de automação para essa prática.
Estrutura de um pipeline YAML
Os pipelines de CI do Azure Pipelines são definidos em um arquivo azure-pipelines.yml na raiz do seu repositório. O arquivo YAML especifica gatilhos (quando executar), um pool (qual tipo de agente usar) e uma hierarquia de estágios, tarefas e etapas. Por padrão, os estágios são executados sequencialmente. As tarefas dentro de um estágio são executadas em paralelo por padrão. As etapas dentro de uma tarefa são executadas sequencialmente. Essa estrutura proporciona um controle detalhado sobre o fluxo de execução do pipeline.
# azure-pipelines.yml skeleton
trigger:
branches:
include:
- main
- 'feature/*'
paths:
exclude:
- docs/**
- '*.md'
pool:
vmImage: ubuntu-latest
variables:
buildConfiguration: Release
nodeVersion: '18.x'
stages:
- stage: CI
displayName: 'Build and Test'
jobs:
- job: Build
displayName: 'Build Application'
steps: []Configuração de gatilhos
O Azure Pipelines oferece suporte a vários tipos de gatilho. Gatilhos de branch executam o pipeline quando o código é enviado para branches especificadas. Gatilhos de solicitação de pull (gatilhos de PR) são executados quando uma PR é aberta ou atualizada tendo branches de destino como referência — algo essencial para validar o código antes da mesclagem. Gatilhos agendados são executados em um horário fixo (por exemplo, compilações noturnas). Gatilhos de pipeline encadeiam pipelines. Especifique trigger: none para desabilitar as execuções automáticas e permitir somente a execução manual.
# Branch trigger
trigger:
branches:
include: [main, develop]
# Pull request trigger
pr:
branches:
include: [main]
autoCancel: true # Cancel previous runs when PR is updated
# Scheduled trigger (nightly build at 02:00 UTC)
schedules:
- cron: '0 2 * * *'
displayName: 'Nightly Build'
branches:
include: [main]
always: true # Run even if no new commitsEtapas: scripts e tarefas
As etapas do pipeline são scripts (comandos bash ou PowerShell) ou tarefas (unidades pré-criadas e parametrizadas do marketplace do Azure DevOps). Tarefas como NodeTool@0, DotNetCoreCLI@2 e Maven@3 encapsulam operações comuns de compilação. Use displayName em cada etapa para tornar os registros do pipeline legíveis. Cada etapa é executada em sequência, e o pipeline falha se alguma etapa terminar com um código diferente de zero, a menos que você defina continueOnError: true.
steps:
- task: NodeTool@0
displayName: 'Install Node.js 18'
inputs:
versionSpec: '18.x'
- script: npm ci
displayName: 'Install dependencies (clean install)'
- script: npm run lint
displayName: 'Run ESLint'
- script: npm run build
displayName: 'Build production bundle'
- script: npm test -- --ci --coverage
displayName: 'Run unit tests with coverage'Publicação dos resultados dos testes
Depois de executar os testes, publique os resultados no Azure DevOps usando a tarefa PublishTestResults. O Azure Pipelines analisa arquivos de resultados nos formatos JUnit, NUnit, XUnit ou VSTest e exibe as contagens de aprovações e reprovações, a duração da execução dos testes e os detalhes individuais dos testes na interface da execução do pipeline. O histórico de testes é acompanhado ao longo do tempo, permitindo identificar testes instáveis e regressões. Isso é essencial para dar visibilidade à qualidade do código em toda a equipe.
# Example: Node.js project with Jest tests
steps:
- script: npm test -- --ci --reporters=jest-junit
displayName: 'Run tests with JUnit reporter'
env:
JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/test-results'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: JUnit
testResultsFiles: '$(Agent.TempDirectory)/test-results/**/*.xml'
condition: succeededOrFailed() # Publish even if tests failPublicação da cobertura de código
Publique relatórios de cobertura de código para que o Azure Pipelines exiba percentuais e tendências de cobertura na interface do pipeline. A tarefa PublishCodeCoverageResults aceita relatórios nos formatos Cobertura ou JaCoCo. Combine isso com portões de cobertura de branch — configure um limite mínimo de cobertura e faça a compilação falhar se a cobertura ficar abaixo dele. As tendências de cobertura ajudam a identificar quando um novo código está sendo adicionado sem os testes correspondentes.
# Jest + coverage
- script: npm test -- --ci --coverage --coverageReporters=cobertura
displayName: 'Run tests with coverage'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/coverage'Variáveis e grupos de variáveis do pipeline
Armazene a configuração do pipeline em variáveis definidas no nível do pipeline, do estágio ou da tarefa no YAML. Para valores confidenciais (chaves de API, senhas), use variáveis secretas — defina-as na biblioteca do pipeline (interface do usuário) ou em grupos de variáveis e faça referência a elas no YAML. Grupos de variáveis são coleções reutilizáveis de variáveis compartilhadas entre vários pipelines. Vincule um grupo de variáveis ao Azure Key Vault para sincronizar automaticamente os segredos do Key Vault com as variáveis do pipeline.
# Reference a variable group in a pipeline
variables:
- group: 'Production-Secrets' # Linked to Azure Key Vault
- name: buildConfiguration
value: Release
# Use a variable
steps:
- script: echo 'Building $(buildConfiguration) configuration'
- script: az webapp deploy --src-path drop.zip
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID) # From Key Vault
APP_API_KEY: $(APP_API_KEY) # Secret, not printed in logsArtefatos: empacotamento da saída da compilação
Depois de uma compilação bem-sucedida, empacote a saída em um artefato do pipeline para que os estágios posteriores (como a implantação) possam acessá-la. Use PublishPipelineArtifact para carregar arquivos do agente de compilação no armazenamento de artefatos do Azure DevOps. Em um estágio ou tarefa posterior, use DownloadPipelineArtifact para recuperar o artefato. Isso desacopla a tarefa de compilação das tarefas de implantação, que podem ser executadas em agentes diferentes ou em estágios diferentes.
# Publish build artifact
- task: PublishPipelineArtifact@1
displayName: 'Publish build artifact'
inputs:
targetPath: '$(System.DefaultWorkingDirectory)/dist'
artifactName: webapp-drop
publishLocation: pipeline
# In a later deployment job, download the artifact
- task: DownloadPipelineArtifact@2
inputs:
artifactName: webapp-drop
targetPath: '$(Pipeline.Workspace)/drop'
- script: ls -la $(Pipeline.Workspace)/dropTarefas paralelas para compilações mais rápidas
Execute tarefas independentes em paralelo definindo várias tarefas dentro de um estágio. Por exemplo, execute testes unitários e a verificação de segurança simultaneamente, em vez de sequencialmente. As tarefas paralelas exigem minutos de compilação separados, mas podem reduzir consideravelmente a duração total do pipeline. Use a propriedade dependsOn para fazer uma tarefa aguardar a conclusão de uma ou mais outras tarefas antes de começar, criando um grafo de dependências dentro de um estágio.
stages:
- stage: CI
jobs:
- job: UnitTests
displayName: 'Run unit tests'
steps:
- script: npm test
- job: LintAndSecurity
displayName: 'Lint and security scan'
steps:
- script: npm run lint
- script: npm audit --audit-level=high
- job: BuildArtifact
displayName: 'Build and publish artifact'
dependsOn: [UnitTests, LintAndSecurity]
condition: succeeded('UnitTests') and succeeded('LintAndSecurity')
steps:
- script: npm run buildValidação da compilação com políticas de branch
Vincule seu pipeline de CI a uma política de branch no Azure Repos para que ele seja executado automaticamente como uma verificação de validação da compilação em solicitações de pull direcionadas à main. A mesclagem é bloqueada até que o pipeline seja aprovado. Combine várias verificações: o pipeline de CI deve ser bem-sucedido, pelo menos 2 revisores devem aprovar, todos os comentários devem ser resolvidos e deve existir um item de trabalho vinculado. Isso cria um portão de qualidade que torna impossível mesclar código com falhas na branch principal.
# Add build validation via CLI
az repos policy build create \
--blocking true \
--branch main \
--branch-match-type exact \
--build-definition-id <pipeline-id> \
--display-name 'CI Build Validation' \
--enabled true \
--project MyProject \
--repository-id <repo-id> \
--queue-on-source-update-only true \
--manual-queue-only false \
--valid-duration 720 # Pipeline result expires after 12 hoursLeitura dos resultados da execução do pipeline
Depois que uma execução do pipeline for concluída, analise os resultados no portal do Azure DevOps. A guia Resumo mostra o resultado geral, aprovado ou reprovado, e os tempos. A guia Testes lista todos os resultados dos testes, com filtragem por resultado. A guia Cobertura de código mostra o percentual de cobertura e destaca as linhas não cobertas. Clique em qualquer tarefa para ver a saída do registro etapa por etapa. Os pipelines reprovados exibem a etapa com falha destacada em vermelho, com a saída completa do erro para facilitar o diagnóstico.
# View pipeline run results via CLI
az pipelines runs list \
--pipeline-ids <pipeline-id> \
--project MyProject \
--query '[].{id:id, status:status, result:result, startTime:startTime}' \
-o table
# View logs from a specific run
az pipelines runs logs list \
--run-id <run-id> \
--project MyProjectVerificação rápida
Teste sua compreensão dos conceitos do Microsoft Azure Fundamentals (AZ-900) abordados nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu que o Azure Pipelines YAML define pipelines de CI com estágios, tarefas e etapas para compilação, testes e criação de artefatos; que gatilhos de PR e políticas de branch impõem portões de qualidade que bloqueiam a mesclagem de código com falhas; e que as tarefas PublishTestResults e PublishCodeCoverageResults tornam a qualidade dos testes visível em toda a equipe. Em seguida, exploraremos a implantação contínua no Azure.
Perguntas Frequentes
A aula “Criando um Pipeline de CI com o Azure Pipelines” é grátis?
Sim — o texto completo de “Criando um Pipeline de CI com o Azure Pipelines” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Azure Fundamentals, atualize para CoddyKit PRO. O curso de Azure Fundamentals inclui 4 aulas no total.
O que vou aprender em “Criando um Pipeline de CI com o Azure Pipelines”?
Defina um pipeline YAML acionado por solicitações de pull, execute testes unitários e produza um artefato de compilação; depois, analise os resultados dos testes e a cobertura de código no portal. Você pratica Azure Fundamentals com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Azure Fundamentals?
Nenhuma experiência prévia é necessária. Azure Fundamentals no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Criando um Pipeline de CI com o Azure Pipelines”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Azure Fundamentals?
Sim. Cada aula de Azure Fundamentals inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visão Geral dos Serviços do Azure DevOps
- Criando um Pipeline de CI com o Azure Pipelines
- Implantação Contínua no Azure
- GitHub Actions no Azure