Compartilhar via


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

Aplica-se a esta recomendação da lista de verificação do Azure Well-Architected Framework Operational Excellence:

OE:04 Otimize os processos de desenvolvimento de software e garantia de qualidade seguindo práticas comprovadas no setor para desenvolvimento e teste. Para uma designação clara da função, padronize as práticas em todos os componentes, como ferramentas, controle do código-fonte, padrões de design de aplicativos, documentação e guias de estilo.

Guia relacionado: Melhorar a velocidade | de construção Padronizar 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 principal permite que os desenvolvedores forneçam valor.

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

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. Idealmente, o processo de integração valida o código em relação a várias linhas de base e testes. Em seguida, ele fornece feedback ao engenheiro solicitante sobre o status desses testes.

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

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 significativas.
  • 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 feedback rápido sobre os problemas detectados.
  • Quando aplicável, produzir ativos ou pacotes implantáveis que incluam o código atualizado.

Automatize a integração contínua com pipelines

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 uma ramificação específica, 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 Azure Pipelines ou GitHub Actions, fornecem os recursos de pipelines de integração contínua.

Integrar pipelines com 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 permitir contribuições rápidas de código de autoatendimento.

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 visíveis os estados de build atuais.

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 status do pipeline aparece na solicitação de pull.

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

Incorpore testes automatizados

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

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 Python popular 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.

Publicar status de build

Muitos desenvolvedores mostram que a qualidade do código é alta exibindo um selo de status em seu repositório. A imagem a seguir mostra uma notificação do Azure Pipelines exibida no arquivo leiame para 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 versão 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 todas as solicitações de pull em seu repositório ou que implantam solicitações de pull mescladas na 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