0Pricing
Cloud & IT Cert Prep · Aula

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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cloud & IT Cert Prep 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 commits

Etapas: 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 fail

Publicaçã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 logs

Artefatos: 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)/drop

Tarefas 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 build

Validaçã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 hours

Leitura 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 MyProject

Verificaçã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 Cloud & IT Cert Prep, atualize para CoddyKit PRO. O curso de Cloud & IT Cert Prep 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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Nenhuma experiência prévia é necessária. Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Sim. Cada aula de Cloud & IT Cert Prep 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

  1. Visão Geral dos Serviços do Azure DevOps
  2. Criando um Pipeline de CI com o Azure Pipelines
  3. Implantação Contínua no Azure
  4. GitHub Actions no Azure
← Voltar para Cloud & IT Cert Prep