Share via


Recomendações para usar a integração contínua

Aplica-se a esta recomendação de lista de verificação de Excelência Operacional do Azure Well-Architected Framework:

OE:04 Otimize os processos de desenvolvimento de software e garantia de qualidade seguindo práticas comprovadas pelo setor para desenvolvimento e teste. Para designação clara de função, padronizar práticas entre componentes como ferramentas, controle do código-fonte, padrões de design de aplicativo, documentação e guias de estilo.

Guia relacionado: Melhorar a velocidade | de buildPadronizar ferramentas e processos

À medida que o código é desenvolvido, atualizado ou até mesmo removido, ter um método intuitivo e seguro para integrar essas alterações ao branch de código main permite que os desenvolvedores forneçam valor.

Como desenvolvedor, você pode fazer pequenas alterações de código, enviar essas alterações por push para um repositório de código e receber comentários quase instantâneos sobre a qualidade, a cobertura de teste e os bugs introduzidos. Esse processo permite que você trabalhe mais rápido e com mais confiança e menos risco.

A CI (integração contínua) é uma prática em que sistemas de controle do código-fonte e pipelines de implantação de software são integrados para fornecer mecanismos automatizados de compilação, teste e comentários para as equipes de desenvolvimento de software.

Principais estratégias de design

A integração contínua é uma prática de desenvolvimento de software que os desenvolvedores usam para integrar atualizações de software em um sistema de controle do código-fonte em uma cadência regular.

O processo de integração contínua começa quando um engenheiro cria uma solicitação de pull do GitHub para sinalizar ao sistema de CI que as alterações de código estão prontas para serem integradas. O ideal é que o processo de integração valide o código em relação a várias linhas de base e testes. Em seguida, ele fornece comentários ao engenheiro solicitante sobre o status desses testes.

Se as verificações de linha de base e os testes deem certo, o processo de integração produzirá e fases de ativos que implantarão o software atualizado. Esses ativos incluem imagens de contêiner e código compilados.

A integração contínua pode ajudá-lo a fornecer software de alta qualidade mais rapidamente executando as seguintes ações:

  • Execute testes automatizados no código para fornecer detecção antecipada de alterações interruptivas.
  • Executar análise de código para garantir os padrões, a qualidade e a configuração do código.
  • Execute verificações de conformidade e segurança para garantir que o software não tenha vulnerabilidades conhecidas.
  • Execute testes funcionais ou de aceitação para garantir que o software funcione conforme o esperado.
  • Forneça comentários rápidos sobre problemas detectados.
  • Quando aplicável, produzir ativos ou pacotes implantáveis que incluam o código atualizado.

Pipelines de integração contínua

Para ter integração contínua, use soluções de software para gerenciar, integrar e automatizar o processo. Uma prática comum é usar um pipeline de integração contínua.

Um pipeline de integração contínua envolve um software (geralmente hospedado na nuvem) que fornece:

  • Uma plataforma para executar testes automatizados.
  • Verificações de conformidade.
  • Relatórios.
  • Todos os outros componentes que compõem o processo de integração contínua.

Na maioria dos casos, o software de pipeline é anexado ao controle do código-fonte de modo que, quando as solicitações de pull são criadas ou o software é mesclado em um branch específico, o pipeline de integração contínua é executado. A integração do controle do código-fonte também oferece a oportunidade de fornecer comentários de CI diretamente sobre solicitações de pull.

Muitas soluções, como o Azure Pipelines ou GitHub Actions, fornecem os recursos de pipelines de integração contínua.

Integração de controle do código-fonte

A integração do pipeline de integração contínua com o sistema de controle do código-fonte é fundamental para habilitar o código de autoatendimento rápido contribuições.

O pipeline de CI é executado em uma solicitação de pull recém-criada. O pipeline inclui todos os testes, avaliações de segurança e outras verificações. Os resultados do teste de CI aparecem diretamente na solicitação de pull para permitir comentários quase em tempo real sobre a qualidade.

Outra prática popular é criar pequenos relatórios ou selos que podem ser apresentados no controle do código-fonte para tornar os estados de build atuais visíveis.

A imagem a seguir mostra a integração entre GitHub e um pipeline do Azure DevOps. Neste exemplo, a criação de uma solicitação de pull dispara um pipeline do Azure DevOps. O pipeline status aparece na solicitação de pull.

Captura de tela de um selo de status do Azure DevOps em um repositório GitHub.

Testar a integração

Um elemento-chave da integração contínua é a criação e o teste contínuos de código à medida que os desenvolvedores fazem contribuições de código. Testar solicitações de pull conforme elas são criadas fornece comentários rápidos de que o commit não introduziu alterações interruptivas. A vantagem é que os testes no pipeline de integração contínua podem ser os mesmos testes executados durante o desenvolvimento controlado por testes.

O trecho de código a seguir mostra uma etapa de teste de um pipeline do Azure DevOps. A etapa tem duas tarefas:

  • A primeira tarefa usa uma estrutura de teste popular do Python para executar testes de CI. Esses testes residem no controle do código-fonte junto com o código Python. Os resultados do teste vão para um arquivo chamado test-results.xml.
  • A segunda tarefa consome os resultados do teste e os publica no pipeline do Azure DevOps como um relatório integrado.
- script: |
    pip3 install pytest
    pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
    continueOnError: true

- task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    failTaskOnFailedTests: true
    testRunTitle: 'Python $(python.version)'

A imagem a seguir mostra os resultados do teste que aparecem no portal do Azure DevOps.

Captura de tela dos testes de pipeline do Azure DevOps no portal do Azure DevOps.

Testes com falha

Testes com falha devem bloquear temporariamente uma implantação e levar a uma análise mais profunda do que aconteceu. Testes com falha também devem levar a um refinamento dos testes ou a uma melhoria na alteração que causou a falha dos testes.

Selos de resultado de CI

Muitos desenvolvedores mostram que sua qualidade de código é alta exibindo um selo status em seu repositório. A imagem a seguir mostra um selo do Azure Pipelines exibido no arquivo readme de um projeto de software livre no GitHub.

Captura de tela de um selo do Azure Pipelines em um arquivo leiame no GitHub.

Facilitação do Azure

O Azure DevOps é uma coleção de serviços que ajudam você a criar uma prática de desenvolvimento colaborativa, eficiente e consistente.

O Azure Pipelines fornece serviços de build e lançamento para dar suporte à CI/CD (integração contínua e entrega contínua) de seus aplicativos.

O GitHub for Actions para Azure permite a automação de processos de CI/CD. Ele se integra diretamente ao Azure para simplificar as implantações. Você pode criar fluxos de trabalho que criam e testam cada solicitação de pull em seu repositório ou que implantam solicitações de pull mescladas em produção.

Saiba como criar um pipeline de integração contínua usando o GitHub ou o Azure DevOps:

Saiba como exibir selos em seus repositórios:

Lista de verificação de Excelência Operacional