Início topics Integração contínua O que é CI (integração contínua)? 
Explore a solução de integração contínua da IBM Inscreva-se para receber atualizações da nuvem
Ilustração com colagem de pictogramas de engrenagem, braço robótico, celular

Publicado em: 16 de julho de 2024
Colaboradores: Chrystal R. China, Michael Goodwin

O que é integração contínua?

A integração contínua (CI) é um processo de desenvolvimento de software em que os desenvolvedores integram novo código à base de código durante todo o ciclo de desenvolvimento.

Quando o código é enviado, as ferramentas de CI verificam cada integração criando uma iteração da compilação e executando uma bateria de testes automatizados para detectar e lidar com erros de integração de forma mais rápida.

A CI foi criada como uma resposta aos desafios do desenvolvimento de softwaretradicional, ou seja, os processos associados à integração e implementação. No desenvolvimento tradicional, cada desenvolvedor era responsável por integrar manualmente o novo código em novas iterações de um aplicativo ou serviço, tornando a integração um processo lento e propenso a erros, especialmente para grandes equipes de desenvolvimento.

Diferentes partes do código nem sempre funcionavam bem juntas, e os desenvolvedores integravam suas alterações em diferentes cronogramas (e, às vezes, no último minuto). Então, o feedback sobre problemas de integração frequentemente era atrasado. Atrasos relacionados a integrações inconsistentes tornavam mais difícil para as equipes descobrir qual mudança introduziu o bug e, portanto, a depuração também se tornava um processo árduo.

Além disso, os testes de software eram pouco frequentes, com grandes atualizações em lote feitas de uma só vez; então, os bugs podiam passar despercebidos e se acumular na base do código, levando a erros e falhas para os usuários finais. (E uma solução de problemas mais difícil para os desenvolvedores).

As ferramentas de CI, que são fundamentais para as práticas modernas de DevOps , os pipelines de integração contínua/implementação contínua (CI/CD) e as arquiteturas de microsserviços , ajudam a simplificar o processo de criação, fornecendo feedback rápido sobre o desempenho da integração.

Com um sistema de CI, o novo código é adicionado a um repositório central (normalmente, várias vezes ao dia), onde permanece para construção e testes. Se o sistema detectar um erro, ele envia notificações, corrige o código e confirma se o código atualizado está correto antes de mesclá-lo totalmente com a base de código.

Consequentemente, a abordagem de CI permite que as equipes de desenvolvimento de software detectem e corrijam erros antes que eles afetem o desempenho do software, resultando em software de alta qualidade e cronogramas de entrega mais previsíveis.

O Relatório de Entrega de Software da IBM de 2023

Melhorar a eficiência da entrega de software não se trata de responder à onda de DevOps do mercado, mas de melhorar as experiências e a produtividade dos desenvolvedores com base em seus dados de DevOps.

Conteúdo relacionado

A IBM foi nomeada líder no Gartner Magic Quadrant de 2023

Principais componentes e processos de CI

Embora a configuração exata de um sistema de integração contínua varie de equipe para equipe e de empresa para empresa, todo sistema de CI usa determinados componentes e processos para otimizar as tarefas de integração.

Repositórios centrais de código fonte

A CI começa com um repositório central em que todos os desenvolvedores confirmam seu código. Os repositórios centrais são a base das práticas de CI e geralmente são gerenciados por sistemas de controle de versão (VCSs), como o Git e o Bitbucket. Quando os desenvolvedores enviam alterações, o repositório central as controla, criando um histórico completo das alterações de código que as equipes de desenvolvimento podem usar para colaborar com mais eficiência.

Os repositórios também usam estratégias de ramificação, como desenvolvimento baseado em troncos ou GitFlow, para facilitar o desenvolvimento paralelo. A ramificação permite que os desenvolvedores criem ramificações de funcionalidades e ramificações de curta duração para isolar seu trabalho antes de mesclá-lo novamente na ramificação de código principal.

Servidores de integração contínua

Os servidores de CI, que podem ser configurados para criar vários projetos para diferentes plataformas, centralizam todas as operações de CI e fornecem uma plataforma estável e confiável para o desenvolvimento de software. Eles modelam e visualizam fluxos de trabalho (para entrega contínua) e fornecem uma interface intuitiva para criar pipelines de entrega contínua (CD).

Os servidores de CI também executam compilações, testes e lançamentos automatizados, orquestram protocolos de controle de versão, monitoram repositórios de código, lidam com relatórios de status e são compatíveis com plug-ins que podem melhorar a funcionalidade do sistema.

Integração de código

Os sistemas de CI incentivam os desenvolvedores a enviar alterações de código várias vezes ao dia, priorizando pequenas alterações focadas em tarefas ou funcionalidades específicas. Usando ferramentas como solicitações de pull (descrição) e solicitações de mesclagem, as equipes podem iniciar avaliações de código e discutir problemas antes de mesclar o novo código, para que os erros sejam detectados desde o início.

Crie automação

Servidores e ferramentas de integração contínua (incluindo ferramentas populares de CI de código aberto, como Jenkins, CircleCI, GitHub, AWS CodePipeline e GitLab CI) monitoram o repositório central em busca de alterações no código. Quando detectam uma nova alteração, os servidores de compilação disparam o processo de compilação e executam fluxos de trabalho predefinidos e scripts de compilação, compilando e empacotando o código em preparação para testes e, no final das contas, implantação.

Testes automatizados

As ferramentas de CI executam uma série de testes para validar o código antes que ele seja mesclado com a base de código. Os testes unitários validam componentes ou funções individuais, fornecendo feedback imediato sobre o comportamento do código. Os testes de integração avaliam as interações entre componentes e módulos de software para garantir que estejam funcionando corretamente em conjunto e para detectar quaisquer problemas que os testes de unidade possam não ter detectado.

Em alguns fluxos de trabalho de CI, testes de ponta a ponta validam o software simulando interações do usuário para verificar se o software se comporta corretamente da perspectiva do usuário. As equipes também podem executar testes de qualidade de código e análises estáticas para verificar a capacidade de resposta e a estabilidade da aplicação sob carga e para identificar violações de padrões de programação e vulnerabilidades de segurança.

Mecanismos de feedback e gerenciamento de artefatos

Os servidores de CI notificam os desenvolvedores imediatamente se uma compilação ou teste falhar. No caso de uma falha, os desenvolvedores priorizam a reparação do código para garantir que a ramificação principal permaneça implementável.

Se uma compilação for bem-sucedida, os servidores produzem artefatos (como binários compilados, imagens Docker e instaladores) que são versionados e armazenados em repositórios de artefatos para testes e implementação futuros. Independentemente do resultado, os principais sistemas de CI registrarão tentativas de integração, taxas de sucesso e outras métricas para garantir que os membros da equipe possam sempre acessar a documentação abrangente da versão. 

A importância de testar o código na CI

Os testes são um componente vital dos processos de integração contínua. No mínimo, os testes constituem cerca de um terço das atividades de CI, mas isso só acontece quando as equipes executam um único estágio de teste. Na realidade, as atividades de testes podem representar a maior parte da carga de trabalho das ferramentas de CI. 

Os testes contínuos em um ambiente de CI começam quando um desenvolvedor produz uma compilação e um pacote (também conhecido como entidade instalável ou entidade empacotada) e termina quando o pacote entra em produção. Cada etapa, de ponta a ponta, compõe o pacote de testes.

Como parte do processo de testes automatizados em CI, o desenvolvimento orientado por testes cria o código de forma iterativa e testa um caso de uso por vez; e notifica as equipes sobre o desempenho do código em todas as áreas funcionais da aplicação.

No entanto, é fundamental que os desenvolvedores executem todos os testes (e subconjuntos de testes) em seu ambiente local para garantir que eles confirmem o código fonte para o controle de versão somente após as novas alterações de código passarem em seus testes. Essa abordagem maximiza a cobertura dos testes, previne a regressão do código e prepara o terreno para a entrega contínua. 

Integração contínua em DevOps

Na framework de DevOps, a integração contínua fica no início do processo de desenvolvimento de software. Os pipelines de DevOps aceleram a entrega de software de alta qualidade, automatizando e combinando os esforços das equipes de desenvolvimento e operações de TI, que tradicionalmente existiam em silos separados.

Os melhores processos e culturas de DevOps vão além do desenvolvimento e das operações, incluindo engenharia de plataforma e infraestrutura, segurança, conformidade, governança, gerenciamento de riscos, linha de negócios, usuários finais e clientes. Em outras palavras, um bom DevOps deve incorporar contribuições de todos os stakeholders da aplicação no ciclo de vida do desenvolvimento de software.

Como parte do DevOps, a CI permite que os desenvolvedores verifiquem seu código pelo menos uma vez por dia, para evitar que cópias locais se afastem muito da ramificação principal da compilação do código. Essa abordagem ajuda as equipes a evitar conflitos de mesclagem desastrosos que podem "quebrar" a compilação nas fases de entrega e implementação.

CI versus entrega contínua e implementação contínua

A integração contínua é a primeira parada no pipeline de CI/CD e, normalmente, é seguida por processos de entrega contínua e implementação contínua.

A entrega contínua (CD) começa onde a integração contínua termina, automatizando a entrega de aplicações e alterações validadas na base de código (atualizações, correções de bugs e até mesmo novas funcionalidades) para todos os ambientes necessários para desenvolvimento, testes e, no final das contas, entrega aos usuários finais. Os processos de CD mantêm a fase de construção “verde”, para que os artefatos estejam prontos para serem implementados a qualquer momento.

Com a implementação contínua (a fase final do DevOps), as alterações no código são lançadas automaticamente no ambiente de produção e distribuídas ao usuário final. Nesse ponto, as modificações no código passaram por todos os protocolos de testes e, portanto, estão seguras e prontas para uso público. Então, os scripts ou ferramentas de CI movem o artefato de software para servidores públicos ou plataformas de distribuição (como lojas de aplicações) e enviam a atualização para os usuários finais.

Integração contínua no desenvolvimento ágil

A integração contínua e o desenvolvimento ágil têm muitos dos mesmos recursos, incluindo automação de testes. Assim, pode ser útil discutir como os dois interagem.

A metodologia ágil é uma prática que organiza o processo de desenvolvimento em grupos menores de trabalho, ou "sprints", para minimizar as barreiras, permitir a colaboração do desenvolvedor e acelerar a entrega do software. As metodologias ágeis reconhecem que as práticas de desenvolvimento de software e as necessidades dos clientes são dinâmicas, o que as torna suscetíveis a mudanças ao longo do tempo.  

Dessa forma, metodologia ágil fornece uma abordagem iterativa para o desenvolvimento que permite que equipes e empresas se adaptem mais facilmente às mudanças e à escala e evoluam as soluções de software ao longo do tempo. E como a CI incentiva atualizações frequentes e validação de código, ela também permite que equipes ágeis lancem produtos de alta qualidade ainda mais rápido, tornando-se uma prática inerentemente ágil.

Melhores práticas de integração contínua

A integração contínua ajuda as equipes de DevOps a contar com um repositório compartilhado para programação, testes, implementação e suporte de software, mas há algumas etapas adicionais que uma empresa pode seguir para otimizar o processo. As melhores práticas de CI normalmente implementadas incluem:

Manter um único repositório de código fonte

Uma base de código consolidada e centralizada pode simplificar a distribuição e a visibilidade. Muitas organizações usam o gerenciamento de controle de origem para manter um único repositório, que rastreia e controla todos os arquivos associados à criação de um produto.

Usar confirmações diárias na linha principal

As organizações podem criar uma cultura de consistência ao exigir que os desenvolvedores confirmem suas alterações no fluxo principal de desenvolvimento pelo menos uma vez ao dia. Isso também permite que os desenvolvedores verifiquem se sua cópia de trabalho é consistente com o fluxo principal de desenvolvimento.

Manter um processo de compilação rápido e eficiente

A otimização de scripts de compilação, a paralelização de tarefas e o uso de mecanismos de cache podem reduzir os tempos de compilação. As equipes também podem configurar pipelines de CI para que novas integrações, caso tenham problemas, falhem no início do processo. Isso permite que os desenvolvedores resolvam os problemas com rapidez e gastem menos tempo com a depuração de erros.

 

 

Testar em um clone do ambiente de produção

Tornar o ambiente de testes o mais semelhante possível ao ambiente de produção final pode garantir que os resultados dos testes forneçam uma representação precisa de como o software será executado no mundo real.

Confiar em sinalizadores de funcionalidades

A implementação de sinalizadores de funcionalidades para controlar o lançamento de novas funcionalidades permite que os sistemas de CI mesclem recursos incompletos ou experimentais na ramificação principal sem afetar a produção geral.

Avaliar o pipeline de CI com frequência

Avaliar e atualizar periodicamente o pipeline de CI para incorporar novas ferramentas, tecnologias e melhores práticas permite que o pipeline evolua de acordo com as necessidades de um projeto.

Benefícios da integração contínua

A configuração de um pipeline de CI robusto, especialmente como parte do DevOps e do desenvolvimento ágil, requer planejamento e configuração cuidadosos, incluindo a escolha das ferramentas certas, a definição de fluxos de trabalho de compilação e teste e a configuração da infraestrutura. Os pipelines de CI também exigem manutenção regular para acomodar alterações na base de código, dependências (como APIs) e infraestrutura.

No entanto, a implementação da CI pode oferecer às equipes de desenvolvimento de software uma série de benefícios, incluindo:  

Detecção de erros antecipada e mais eficiente

Os processos de CI permitem que as equipes resolvam os erros antecipadamente, às vezes minutos após o check-in.

Colaboração aprimorada da equipe

Todos na equipe podem alterar o código, integrar alterações no código e identificar incompatibilidades e erros de integração, simplificando o compartilhamento de conhecimento e melhorando a qualidade do código e do software por meio do feedback dos colegas.

Desenvolvimento de software acelerado

Como o novo código é integrado continuamente, as equipes gastam menos tempo integrando e testando grandes lotes de código. E o loop de feedback acelerado que as ferramentas de CI oferecem ajuda os desenvolvedores a iterar e entregar atualizações de software e novos produtos aos usuários finais com mais rapidez.

Redução de riscos no processo de desenvolvimento

Confirmações frequentes de código significam mudanças menores e mais incrementais, que são mais fáceis de entender, avaliar e testar. Isso reduz o risco de introduzir problemas significativos na base de código durante o desenvolvimento.

Soluções relacionadas
IBM DevOps Build

O IBM DevOps Build é uma ferramenta de gerenciamento de compilações distribuída e multiplataforma para configurar e executar compilações de software. 

Explore o IBM DevOps Build Obtenha o ebook sobre DevOps
Soluções de DevOpsda IBM

Adote um poderoso software de DevOps para criar, implantar e gerenciar aplicativos nativos da nuvem ricos em segurança em vários dispositivos, ambientes e nuvens.

Explore as soluções de DevOps da IBM Experimente as soluções de DevOps da IBM
IBM Cloud Continuous Delivery

O IBM Cloud Continuous Delivery permite que as equipes adotem o DevOps pronto para empresas, criem cadeias de ferramentas seguras que apoiam as tarefas de entrega de aplicativos e automatizem compilações, testes, implementações e muito mais.

Explore o IBM Cloud Continuous Delivery Experimente o IBM Cloud Continuous Delivery
Recursos O que é DevOps?

O DevOps acelera a entrega de software de maior qualidade, ao combinar e automatizar o trabalho das equipes de desenvolvimento de software e operações de TI.

DevOps para nuvem híbrida: um ponto de vista da IBM

Como o DevOps para nuvem híbrida pode ajudar a organização a ter sucesso com a Digital Reinvention.

O que são CI/CD e pipeline de CI/CD?

Leia um guia prático para entender o pipeline de CI/CD.

O que é entrega contínua?

A entrega contínua é uma prática que as equipes de desenvolvimento usam para automatizar o processo de lançamento de software.

O que é transformação digital?

A transformação digital é uma iniciativa estratégica que incorpora a tecnologia digital em todas as áreas de uma organização.

O que é Java?

O Java é uma linguagem de programação orientada a objetos e uma plataforma de software amplamente utilizada. As regras e a sintaxe do Java são baseadas nas linguagens C e C++.

Dê o próximo passo

Você está pronto para DevOps? Para entregar software e serviços na velocidade exigida pelo mercado, as equipes devem iterar e experimentar rapidamente, implementar novas versões com frequência e ser guiadas por feedback e dados. As equipes de desenvolvimento em nuvem mais bem-sucedidas adotam a cultura e as práticas modernas de DevOps, abraçam arquiteturas nativas da nuvem e montam cadeias de ferramentas com as melhores ferramentas disponíveis para liberar sua produtividade.

Explore as soluções de DevOps Experimente sem nenhum custo