Partilhar via


Recomendações para o uso da 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 testes. Para uma designação clara da função, padronize as práticas entre 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 na ramificação principal do código 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, cobertura de teste e bugs introduzidos. Este processo permite-lhe trabalhar mais rapidamente e com mais confiança e menos risco.

A integração contínua (CI) é uma prática em que os sistemas de controle do código-fonte e os pipelines de implantação de software são integrados para fornecer mecanismos automatizados de compilação, teste e feedback 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 de origem em uma cadência regular.

O processo de integração contínua começa quando um engenheiro cria uma solicitação 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, fornece feedback ao engenheiro solicitante sobre o status desses testes.

Se as verificações de linha de base e os testes forem bem-sucedidos, o processo de integração produz e prepara 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 em relação ao código para fornecer deteção precoce de alterações de quebra.
  • Execute a 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 de aceitação ou funcionais para garantir que o software funcione conforme o esperado.
  • Forneça feedback rápido sobre os problemas detetados.
  • Quando aplicável, produza ativos ou pacotes implantáveis que incluam o código atualizado.

Automatize a integração contínua com pipelines

Para alcançar a 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.
  • Elaboração de 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 solicitações 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 dar feedback de CI diretamente sobre solicitações pull.

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

Integre pipelines com controle de origem

A integração de seu pipeline de integração contínua com seu sistema de controle de origem é fundamental para permitir contribuições rápidas de código de autoatendimento.

O pipeline de CI é executado em uma solicitação 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 pull para permitir feedback quase em tempo real sobre a qualidade.

Outra prática popular é a criação de pequenos relatórios ou emblemas que podem ser apresentados no controle do código-fonte para tornar visíveis os estados de compilação atuais.

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

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

Incorporar 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. O teste de solicitações pull à medida que são criadas dá um feedback rápido de que a confirmação não introduziu alterações de quebra. A vantagem é que os testes no pipeline de integração contínua podem ser os mesmos testes executados durante o desenvolvimento orientado a testes.

O trecho de código a seguir mostra uma etapa de teste de um pipeline de DevOps do Azure. 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 ao lado do 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 reprovados

Testes com falha devem bloquear temporariamente uma implantação e levar a uma análise mais profunda do que aconteceu. Os testes reprovados 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 compilação

Muitos desenvolvedores mostram que a qualidade do código é alta exibindo um selo de status em seu repositório. A imagem a seguir mostra um selo do Azure Pipelines exibido no arquivo readme de um projeto de código aberto 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 compilação e lançamento para dar suporte à integração contínua e à entrega contínua (CI/CD) de seus aplicativos.

O GitHub for Actions for 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 pull em seu repositório ou que implantam solicitações 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