Partilhar via


Recomendações para utilizar 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 o desenvolvimento de software e os processos de garantia de qualidade ao seguir as práticas comprovadas pela indústria para desenvolvimento e teste. Para uma designação de função clara, uniformize práticas entre componentes como ferramentas, controlo de origem, padrões de conceção de aplicações, documentação e guias de estilo.

Guia relacionado: Melhorar asferramentas e os processos de Uniformizaçãoda velocidade da | compilação

À medida que o código é desenvolvido, atualizado ou até removido, ter um método intuitivo e seguro para integrar estas alterações no ramo de código principal permite que os programadores forneçam valor.

Enquanto programador, pode fazer pequenas alterações de código, emitir estas alterações para um repositório de código e obter feedback quase instantâneo sobre a qualidade, a cobertura do teste e os erros 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 controlo de origem e os pipelines de implementação de software estão integrados para fornecer mecanismos automatizados de compilação, teste e feedback para equipas de desenvolvimento de software.

Principais estratégias de design

A integração contínua é uma prática de desenvolvimento de software que os programadores utilizam para integrar atualizações de software num sistema de controlo de origem numa cadência regular.

O processo de integração contínua começa quando um engenheiro cria um pedido Pull do GitHub para indicar ao sistema 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 várias linhas de base e testes. Em seguida, fornece feedback ao engenheiro requerente sobre o estado destes testes.

Se as verificações de linha de base e os testes correrem bem, o processo de integração produz e fasea os recursos que irão implementar o software atualizado. Estes recursos incluem código compilado e imagens de contentor.

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

  • Execute testes automatizados no código para fornecer a deteção precoce de alterações interruptivas.
  • Execute a análise de código para garantir padrões de código, qualidade e configuração.
  • Execute verificações de conformidade e segurança para garantir que o software não tem vulnerabilidades conhecidas.
  • Execute testes funcionais ou de aceitação para garantir que o software funciona conforme esperado.
  • Forneça feedback rápido sobre problemas detetados.
  • Quando aplicável, produza recursos ou pacotes implementáveis que incluam o código atualizado.

Pipelines de integração contínua

Para alcançar a integração contínua, utilize soluções de software para gerir, integrar e automatizar o processo. Uma prática comum é utilizar um pipeline de integração contínua.

Um pipeline de integração contínua envolve uma parte do software (muitas vezes alojado na cloud) que fornece:

  • Uma plataforma para executar testes automatizados.
  • Análises 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 controlo de origem de modo a que, quando os pedidos Pull são criados ou o software é intercalado num ramo específico, o pipeline de integração contínua é executado. A integração do controlo de origem também proporciona a oportunidade de fornecer feedback de CI diretamente sobre pedidos Pull.

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

Integração do controlo de origem

A integração do pipeline de integração contínua com o sistema de controlo de origem é fundamental para permitir contribuições rápidas e personalizadas de código.

O pipeline de CI é executado num pedido Pull recentemente criado. O pipeline inclui todos os testes, avaliações de segurança e outras verificações. Os resultados dos testes de CI são apresentados diretamente no pedido Pull para permitir feedback quase em tempo real sobre a qualidade.

Outra prática popular é criar pequenos relatórios ou distintivos que podem ser apresentados no controlo de origem para tornar os estados de compilação atuais visíveis.

A imagem seguinte mostra a integração entre o GitHub e um pipeline do Azure DevOps. Neste exemplo, a criação de um pedido Pull aciona um pipeline do Azure DevOps. O estado do pipeline é apresentado no pedido Pull.

Captura de ecrã a mostrar um distintivo de estado do Azure DevOps num repositório do GitHub.

Testar a integração

Um elemento-chave da integração contínua é a criação e teste contínuos do código à medida que os programadores fazem contribuições de código. Testar pedidos Pull à medida que são criados dá feedback rápido de que a consolidação não introduziu alterações interruptivas. A vantagem é que os testes no pipeline de integração contínua podem ser os mesmos testes que são executados durante o desenvolvimento orientado para testes.

O fragmento de código seguinte mostra um passo de teste de um pipeline do Azure DevOps. O passo tem duas tarefas:

  • A primeira tarefa utiliza uma arquitetura de teste de Python popular para executar testes de CI. Estes testes residem no controlo de origem juntamente com o código Python. Os resultados do teste vão para um ficheiro com o nome test-results.xml.
  • A segunda tarefa consome os resultados do teste e publica-os 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 seguinte mostra os resultados dos testes apresentados no portal do Azure DevOps.

Captura de ecrã dos testes de pipeline do Azure DevOps no portal do Azure DevOps.

Testes com falhas

Os testes com falhas devem bloquear temporariamente uma implementação e levar a uma análise mais aprofundada do que aconteceu. Os testes com falhas também devem levar a um refinamento dos testes ou a uma melhoria na alteração que fez com que os testes falhassem.

Distintivos de resultados de CI

Muitos programadores mostram que a qualidade do código é elevada ao apresentar um distintivo de estado no repositório. A imagem seguinte mostra um destaque dos Pipelines do Azure apresentado no ficheiro readme de um projeto open source no GitHub.

Captura de ecrã a mostrar um distintivo dos Pipelines do Azure num ficheiro readme no GitHub.

Facilitação do Azure

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

O Azure Pipelines fornece serviços de compilação e versão para suportar a integração contínua e a entrega contínua (CI/CD) das suas aplicações.

O GitHub for Actions para o Azure permite a automatização de processos de CI/CD. Integra-se diretamente no Azure para simplificar as implementações. Pode criar fluxos de trabalho que compilam e testam todos os pedidos Pull no seu repositório ou que implementam pedidos Pull intercalados na produção.

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

Saiba como apresentar distintivos nos seus repositórios:

Lista de verificação de Excelência Operacional